보안과 알고리즘
데이터 전달 시 문제점
- 도청 : 메세지를 훔쳐보는 것
- 위장 : 메세지를 받는 사람으로 위장하는 것
- 변조 : 메세지를 변조하는 것
- 사후부인 : 메세지의 전송자가 악의를 가져 보내고 난 뒤 내가 보낸 게 아니라고 말하는 것
암호의 기본
- 암호화 : 말 그대로 원문을 암호화해서 암호문으로 만드는 것
- 복호화 : 암호문을 원 데이터로 복원하는 것
해시 함수
- 데이터를 해시함수에 넣으면 불규칙한 문자들로 만들어준다.
- 아주 작은 데이터를 넣어도, 아주 큰 데이터를 넣어도 고정 길이의 해시값이 나온다
- 입력이 같으면 출력도 같다.
- 데이터 입력이 비슷하다고 해서 해시값도 비슷한 게 아니다. 완전 다르다.
- 해시값으로부터 원 데이터를 찾는 건 불가능하다.
- MD5, SHA-1, SHA-2 등등…
공통키 암호 방식
- 암호화와 복호화에 같은 키를 사용하는 방식
- 키를 도난 당할 위험이 있기 때문에 위험하다.
공개키 암호 방식
- A가 B에게 데이터를 전달해주려고 한다.
- B는 공개키와 비밀키를 만든다.
- B는 공개키를 A에게 전송한다.
- A는 공개키를 사용해서 데이터를 암호화한다.
- A는 암호문을 B에게 전송하고 B는 비밀키로 복호화한다.
- 암호문과 공개키를 훔치더라도 복호화는 비밀키만 가능하기 때문에 볼 수 없다.
공개키 암호 방식의 단점
- 제 3자가 공개키와 비밀키를 직접 만들어 A가 B에게 보낼 때 B에게 보내는 것이 아닌 제 3자에게 보내게 한다면 데이터를 가로챌 수 있다.
- 또한 데이터를 연속적으로 교환해야된다면 암호화 및 복호화에 시간이 오래걸려 적합하지 않다.
하이브리드 암호 방식
- 공통키 암호 방식에 사용되는 키를 공개키 암호 방식으로 암호화해서 키를 먼저 안전하게 보낸 후 데이터를 공통키로 복호화, 암호화 한다.
- SSL에 쓰이고 있다.
메세지 인증 코드
- 이것을 이용하면 메세지의 변조를 감지할 수 있다.
- 메세지 인증 코드를 만드는 함수를 B에게 전한다.
- 그 함수를 암호문에 쓰면 메세지 인증코드가 나온다.
- 그 메세지 인증코드를 B가 받아서 현재 암호문에 메세지 인증 코드 함수를 사용해 받은 것과 동일한지 확인한다.
- 동일하면 변조되지 않은 것.
- 하지만 원문을 작성한 사람이 A인지 B인지 증명할 수가 없다. 악의가 있으면 조작한 메세지라고 거짓말할 수 있으니까.
전자 서명
- 보내려고 하는 데이터에 A꺼라는 전자 서명을 같이 첨부한다.
- B는 전자 서명의 정당성을 검증할 수 있지만 전자 서명을 작성할 수는 없다.
- A가 공개키와 비밀키를 만들어 전자 서명과 메세지를 암호화해서 B에게 보낸다.
- B는 A에게 받은 공개키로 복호화해서 확인한다.
- 그러나 공개키 자체가 누구 것인지 알 수 없어 A로 가장한 누군가가 공개키를 작성할 수 있다.
전자 인증서
- A는 공개키가 자신의 것임을 나타내는 인증서 발행을 의뢰한다.
- CA(Certification Authority)는 확인을 완료하고 인증기관의 비밀키로 전자 서명+A의 공개키를 작성해 A에게 준다.
- A는 그냥 전자 인증서를 B에게 보낸다.
- B는 CA에게서 인증 기관의 공개키를 받는다.
- B는 전자 인증서에서 A의 공개키를 꺼낸다.
- B는 A의 공개키라는 걸 확신하게 된다.
- 나쁜 사람이 CA로 위장할 수 있지 않을까 라는 의문이 들 수도 있는데 CA 자체가 트리구조로 되어있어 더 상위 인증 기관이 있게 된다. 즉 상위 인증 기관에서 하위 인증 기관이 어떤 게 있는지 확인한다면 바로 들통날 수 밖에 없다. 그리고 맨 위로 가면 최상위 인증기관이 있는데 그 기관은 신뢰를 담보할 수 있는 대기업이나 정부 관련 기관들이 맡고있다.