암호학
1. 개요
漢: 暗號學 / En: Cryptology
정보를 보호하기 위한 수학적, 언어학적인 방법을 다루는 학문이다. 컴퓨터과학, 수학, 언어학과 관련 깊다. 전시에서의 통신 수단으로도 많이 쓰이기 때문에 군사 기술과도 관계가 깊다.
암호학은 크게 두 가지 분류로 나누어진다. 후술할 비밀키 암호화 기법과 공개키 암호화 기법이며, 역사적으로는 비밀키 암호화 기법이 먼저 등장하였다.
암호학에 대해서 설명할 경우에는 앨리스(Alice)와 밥(Bob)이 자주 등장한다. 이는 A가 B에게 메세지를 전달한다고 하는 것이 별로 재미가 없을 뿐만 아니라, 딱딱하게 "Person A", "Person B" 계속 운운하는 것보다는 성별이 뚜렷히 드러나는 이름인 앨리스와 밥을 도입해서 인칭대명사(He, She 등)를 써먹으려는 영어권 학자들의 센스가 반영된 결과이다. C의 캐롤(Carol), D의 데이브(Dave)가 등장하기도 하지만, 학문이 학문이니만큼 앨리스와 밥 다음으로 자주 나타나는 인물은 E의 이브(Eve). Eavesdropper(엿듣는 사람)의 별칭이며, 대개 암호 프로토콜을 공격하려는 제3자이다. xkcd에서 이와 관련한 우스갯소리를 그려낸 바 있는데, 컴퓨터과학자들이 지루한 이야기에 집중하게 하는 법 Eve의 사연Alice와 Bob 이외의 이름을 정리해놓은 글 포네틱 코드와 비슷한 아이디어이며, 한국의 물리 교과서에서 갑과 을 대신 철수와 영희가 자주 등장하는 것과 같은 이치이다.
수학과에서는 4학년 때 응용 수학으로서 배우게 된다. 그리고 국가정보원, CIA 등 정보기관의 가장 대표적인 이미지를 만들어주는 학문으로 정보기관 채용 모집인원도 암호학 전공자가 아주 많은 편이다.
2. 고전 암호
2.1. 카이사르 암호
역사상 가장 오래된 암호의 형태 중 하나로 유명한 체계. 카이사르가 사용했다고 전해진다.
원문의 글자 하나하나를 다른 글자로 치환하는 치환 암호로, 모든 글자를 정해진 키 숫자만큼 뒤의 철자로 바꾸는 방식. 현대 영문 알파벳이 26종이므로, 총 25가지 키를 사용할 수 있다. 크기가 다른 원판 두 개를 겹쳐 놓고 중심을 서로 고정한 뒤 테두리 쪽에 순서대로 알파벳을 쓰는 식으로 암호판도 만들 수 있다.
이 체계 자체가 유명하기도 하지만, 암호화 원리 자체가 매우 단순하여 전혀 모르는 사람이라도 글자 빈도 분석이나 브루트 포스로 순식간에 뚫을 수 있다. 현대 기준으로는 보안성은 거의 없는 수준. 카이사르 당시에도 자기 이름 철자인 C만 키로 써서(...) 유명무실한 암호였다는 일화도 있다. 그래도 전승(傳承)되는 최초의 암호화 기법이라는 점에 의의가 있다.
예문은 아래와 같다.
2.2. 비즈네르 암호
카이사르 암호를 키값이 26개 밖에 존재하지 않는다는 단점을 보완해서 만든 암호이다.
여기서 키는 한 글자가 아닌 하나의 단어로 키 칸에 계속 반복되게 적는다. 그럼 같은 단어라도 키에서 다른 위치에 걸리게 되면 암호화된 글자는 달라지게 된다.
상세히 적자면, A에 0, B에 1, ..., Z에 25의 숫자를 대입해서 원문과 키의 숫자를 더한 결과값을 나타낸 것이다.
다음은 그 예시다. 이 예시에서 키는 'dog' 라고 하자.
암호문에 HHH 라는 연속된 글자가 나오지만, 이것의 원본은 bet 로 각각 다르다. 그만큼 해독이 어려워진다.
2.3. 스키테일
주로 스파르타에서 전쟁에 나가 있는 군대에 메시지을 전할때 썼던 암호이다.
이 암호를 암호화 하고 복호화 하는 과정은 스키테일(Scytale) 이라는 원통형 나무 막대기를 이용한다.
이것으로 암호화하는 과정은 다음과 같다.
1. 이 막대기에 종이를 왼쪽부터 오른쪽으로 위에서 아랫방향으로 돌려 싼 다음 왼쪽에서 오른쪽으로 메세지를 적는다.
2. 빈칸은 아무렇게나 채운 다음 종이를 스키테일에서 푼다.
이것을 복호화 할 때는 같은 굵기의 스키테일에 감아서 확인을 해보면 된다.
2.4. 단일문자 체계
2.5. 에니그마
3. 현대 암호
3.1. 양방향 암호 시스템
평문과 암호문 사이의 변환이 자유로운 암호 체계.
3.1.1. 비밀키 암호화 기법
비밀키 암호화 기법은 암호화와 복호화에 사용되는 키가 일치하는 암호 알고리즘 체계이다.
두 사람이 비밀키 암호를 이용하여 데이터를 주고 받기 위해서는 동일한 키를 나눠가져야 하므로 키 분배 방법이 매우 중요하게 다뤄진다. 일반적으로 키 동의, 키 합의 방법으로 DH 알고리즘을 사용하거나 SSL/TLS 처럼 공개키 암호를 이용하여 키를 분배한다.
3.1.1.1. 블록 암호
3.1.1.2. 스트림 암호
- RC-4
3.1.2. 공개키 암호화 기법
공개키 암호화 기법은 위의 비밀키 암호화 기법에서의 보안성과 기하급수적으로 늘어나는 키의 개수를 개선하기 위한 방법으로, 암호화에 사용되는 키[1] 와 복호화에 사용되는 키[2] 가 서로 다르고, 암호화 키(공개키)로부터 복호화 키(비밀키)를 계산하기 매우 어렵다. 처리해야 하는 정보량이 많기 때문에 컴퓨터가 발명되고 난 뒤에 생겼다.
3.1.2.1. RSA
3.1.2.2. 타원 곡선 암호
3.1.3. 양자 암호
양자의 특징인 불확정성(Uncertainty), 양자 얽힘(Quantum Entanglement) 등을 이용하여 암호화하는 기법.
현재 상용화되거나 연구중인 양자암호 기술은 대부분 양자 키 분배 기술이며, 실질적인 양자 암호화는 거리가 있으므로 주의해야 한다.
3.2. 단방향 암호 시스템
평문에서 암호문으로 만드는 것은 자유지만, 그 반대는 아니란다로 대표되는 암호 체계. 대부분이 해쉬 암호화 체계이다.
이는 일반적으로 password 를 '''저장하는 용도'''로 사용된다. 예를 들어 초창기 유닉스/리눅스는 유저의 password 를 암호화 하여 /etc/passwd 파일에 저장해 두었다. 보안을 위해서 암호화 방식도 어려운 것으로 변경되었을 뿐만 아니라 저장 위치도 /etc/shadow 라는 파일로 변경하고, 관리자가 아니면 볼수도 없도록 제한을 걸어놨다.
예를 들여 어떤 사용자의 password 를 12345678 라고 한다면, 이를 MD5 로 암호화했을때 25d55ad283aa400af464c76d713c07ad 이 되는데, 이를 저장해 둔다. 그리고, 누군가가 로그인 시도할때 12345678 을 입력하고 이를 MD5 로 암호화 해서 그결과를 비교해보면 같은 값이 나옴을 알 수 있다. 하지만, 반대로 암호화된 문자열에서 원래 암호를 복호화하는 것은 아주 어렵다. 다만, 컴퓨터의 발전으로 인해서 MD5 같은 알고리즘은 더이상 안전하지 않다.