빈도 분석: 암호는 어떻게 깨지는가
암호문을 받았는데 열쇠가 없다면 어떻게 읽을 수 있을까요? 가장 오래되고 강력한 해법은 글자를 세어 보는 것입니다. 사람이 쓰는 글에는 눈에 띄는 버릇이 있어서, 아무리 글자를 바꿔 놓아도 그 버릇은 암호문에 흔적처럼 남습니다. 이 글에서는 빈도 분석이 어떻게 생겨났고 어떤 순서로 암호를 푸는지 짧은 예문과 함께 따라가 보고, 현대 암호가 왜 이런 공격에 강한지도 설명합니다.
9세기 바그다드에서 시작된 발상
빈도 분석을 처음 체계적으로 정리한 사람으로는 9세기 아랍의 학자 알킨디가 꼽힙니다. 그는 《암호문 해독에 관한 원고》라는 글에서, 어떤 언어로 쓰인 충분히 긴 글을 가지고 글자의 출현 빈도를 센 다음, 암호문에서 가장 자주 나오는 글자를 평문에서 가장 자주 나오는 글자와 대응시켜 보라고 설명했습니다. 당시 이슬람 세계는 언어학과 수학이 활발히 발전하던 곳이었고, 이런 학문적 분위기 속에서 글자의 통계를 암호 해독에 쓰는 발상이 나왔습니다.
이 방법은 이후 유럽으로도 전해져 수백 년간 단순 치환 암호의 천적으로 자리 잡았습니다. 에드거 앨런 포가 1843년에 발표한 단편소설 《황금 벌레》에는 주인공이 빈도 분석으로 암호문을 푸는 장면이 나와, 일반 독자에게 이 기법을 널리 알린 작품으로도 유명합니다.
언어에는 지문이 있다
빈도 분석이 통하는 이유는 글자가 고르게 쓰이지 않기 때문입니다. 영어에서는 E가 전체 글자의 약 12~13%로 가장 많고, 그 뒤를 T, A, O, I, N이 대략 이어서 따릅니다. 반대로 Z, Q, X, J는 거의 쓰이지 않습니다. 이 순서는 글의 주제가 바뀌어도 대체로 비슷하게 유지되는데, 짧은 글에서는 오차가 커서 항상 딱 맞지는 않습니다.
글자 하나뿐 아니라 짧은 단어와 글자 조합도 단서가 됩니다. 영어에서는 THE가 압도적으로 흔한 3글자 단어이고, 한 글자 단어는 대개 A 아니면 I입니다. 같은 글자가 연달아 나오는 쌍자음은 LL, EE, SS, OO 정도이며, 영어 단어는 Q 뒤에 거의 항상 U가 옵니다. 이런 버릇들이 모두 해독자에게는 힌트입니다.
빈도표로 푸는 단계별 예제
실제로 풀어 보겠습니다. 다음은 알파벳을 무작위로 바꿔치기한 단순 치환 암호문입니다. 시저 암호처럼 일정한 칸을 미는 것이 아니라, 글자마다 제멋대로 짝이 정해져 있다고 가정합니다.
ZIT ZKTT ZIQZ LZQFRL WN ZIT KOCTK IORTL ZIT LTEKTZ
1단계, 글자 세기. 공백을 빼고 글자를 세 보면 T가 9번, Z가 8번, I가 5번, K와 L이 각각 4번 나옵니다. 나머지는 1~2번에 그칩니다.
2단계, 단어 길이 살피기. 3글자 단어 ZIT가 세 번이나 반복됩니다. 영어에서 이렇게 자주 나오는 3글자 단어는 THE일 가능성이 높습니다. 그렇다면 Z는 T, I는 H, T는 E입니다. 빈도 면에서도 T(9번)가 E, Z(8번)가 T에 대응해 잘 맞아떨어집니다.
3단계, 대입해 보기. 알아낸 글자를 넣으면 암호문은 다음처럼 바뀝니다. 대문자는 확정된 글자이고 소문자는 아직 모르는 암호문 글자입니다.
THE TkEE THqT lTqfrl wn THE kocEk HorEl THE lEekET
두 번째 단어 TkEE는 T로 시작해 EE로 끝나는 4글자이니 TREE로 보입니다. 그러면 k는 R입니다. 네 번째 단어 THqT에서는 한 글자만 모르는데 THAT이 가장 자연스러우므로 q는 A입니다.
4단계, 문맥으로 확장. k를 R로, q를 A로 바꾸면 문장은 THE TREE THAT lTAfrl wn THE RocER HorEl THE lEeRET가 됩니다. 마지막 단어 lEeRET는 ?E?RET 꼴이라 SECRET이 떠오르고, 그러면 l은 S, e는 C입니다. l을 S로 바꾸면 STAfrS가 되어 STANDS, 즉 f는 N, r은 D임이 드러납니다. 이어서 RocER는 RIVER, HorEl은 HIDES, wn은 BY입니다. 최종 평문은 THE TREE THAT STANDS BY THE RIVER HIDES THE SECRET입니다. 글자 몇 개의 추측이 맞으면 나머지는 줄줄이 풀려 나오는 것입니다.
빈도 분석이 통하는 암호, 통하지 않는 암호
이 방법이 통하려면 두 가지 조건이 필요합니다. 첫째, 같은 평문 글자가 언제나 같은 암호문 글자로 바뀌어야 합니다. 둘째, 글이 어느 정도 길어서 통계가 안정적으로 나와야 합니다. 시저 암호나 임의의 글자 대응표로 만든 단순 치환 암호가 정확히 이 조건에 해당합니다. 글자 대응표의 경우의 수는 26!, 즉 약 4×10의 26제곱으로 무차별 대입은 불가능에 가깝지만, 빈도 분석 앞에서는 이 큰 숫자가 거의 쓸모가 없었습니다.
반대로 같은 글자가 상황에 따라 다르게 바뀌면 통계가 흩어집니다. 앞서 소개한 비제네르 암호가 이 방향의 대응책이었고, 이를 풀기 위해 열쇠 길이를 먼저 알아내는 카시스키 검사 같은 더 정교한 분석이 나왔습니다. 자세한 이야기는 비제네르 암호에서 에니그마까지에서 볼 수 있습니다.
현대 암호는 왜 안전한가
1949년 클로드 섀넌은 논문 〈비밀 체계의 통신 이론〉에서 좋은 암호가 갖춰야 할 성질로 혼돈과 확산을 제시했습니다. 혼돈은 열쇠와 암호문의 관계를 복잡하게 만드는 것이고, 확산은 평문 하나의 특징이 암호문 전체로 넓게 퍼지게 하는 것입니다. 현대의 블록 암호는 글자 한 개가 아니라 16바이트 같은 큰 덩어리를 여러 번 반복해서 섞기 때문에, 평문에서 글자 하나를 바꾸면 암호문 전체가 완전히 달라집니다. 글자 빈도의 흔적이 남을 자리가 없는 것입니다.
여기에 AES-GCM 같은 방식은 매번 새로운 임의의 값(논스)을 섞습니다. 같은 문장을 같은 비밀번호로 두 번 암호화해도 결과가 서로 다르므로, 같은 글자 패턴이 반복되어도 암호문에는 드러나지 않습니다. 이 사이트의 번역기도 이런 방식을 사용합니다. 물론 번역기의 변환 방식과 비밀번호를 얼마나 길고 예측 불가능하게 정하느냐에 따라 안전성은 달라지므로, 중요한 내용을 다룰 때는 번역기 열기에서 설정을 꼼꼼히 확인하는 것이 좋습니다.
한 문제 더 풀어 보기
이번에는 시저 암호로 만든 암호문을 빈도 분석으로 풀어 보겠습니다.
PHHW PH DW WKH ULYHU
글자를 세어 보면 H가 5번으로 가장 많고, W가 3번으로 그다음입니다. 영어에서 가장 흔한 글자는 E이므로 H가 E를 뜻한다고 가정하면 E에서 H까지는 세 칸입니다. 그러면 모든 글자를 세 칸씩 당겨 보면 됩니다. P는 M, H는 E, W는 T가 되어 MEET ME AT THE RIVER라는 문장이 나옵니다. 가정이 맞았는지는 결과가 뜻이 통하는 영어인지로 확인합니다. 만약 뜻이 통하지 않았다면 그다음으로 흔한 글자인 T나 A를 기준으로 다시 시험해 보면 됩니다.
이 방식은 시저 암호에서는 글자 하나만 맞춰도 전체가 풀린다는 점에서 단순 치환 암호보다 훨씬 쉽습니다. 단순 치환 암호는 앞의 예제처럼 글자마다 하나씩 추측을 쌓아 가야 합니다.
빈도 분석에 대한 흔한 오해
- 가장 많이 나온 글자가 반드시 E일까요? 그렇지 않습니다. 평균적인 경향일 뿐이며, 글자 수가 적을수록 오차가 큽니다. 몇십 글자 정도의 짧은 글에서는 E가 가장 많지 않은 경우도 흔합니다.
- 띄어쓰기를 없애면 풀 수 없다? 단어 길이 단서는 사라지지만 글자 빈도와 자주 붙어 나오는 글자 조합은 그대로 남아 있습니다. 시간이 더 걸릴 뿐 풀 수 있습니다.
- 영어에서만 통하는 방법이다? 글자나 음절의 쓰임이 고르지 않은 언어라면 어디에나 통합니다. 한글 같은 다른 언어도 평문의 언어에 맞는 빈도표를 쓰면 같은 원리가 적용됩니다. 다만 한글은 음절 종류가 매우 많아서 통계가 안정되려면 더 긴 글이 필요합니다.
- 글자 대응표 경우의 수가 많으면 안전하다? 경우의 수가 천문학적으로 많아도 규칙성이 남아 있으면 통계가 그 규칙성을 드러냅니다. 안전성은 경우의 수의 크기만으로 결정되지 않습니다.
빈도 분석에서 자주 쓰는 단서 모음
영어 글자를 많이 나오는 순서로 늘어놓은 ETAOIN SHRDLU라는 배열은 해독가와 인쇄공 사이에서 오래 알려진 기억법입니다. 앞쪽 글자들은 평문에서 자주 나오고, 뒤쪽은 드뭅니다. 글자 조합으로는 TH, HE, IN, ER 같은 쌍이 흔하며, 3글자 단어는 THE와 AND를 먼저 의심해 볼 만합니다. 암호문에서 한 글자짜리 단어가 보이면 A나 I를 의심하고, 같은 글자가 두 번 이어지면 LL, EE, SS, OO 같은 쌍을 후보로 놓습니다.
자주 묻는 질문
짧은 글은 빈도 분석으로 풀 수 없나요?
짧은 글은 통계가 불안정하므로 어렵지만, 단어 모양이나 예상되는 문구를 이용해 풀 수 있는 경우도 있습니다. 반대로 암호를 만드는 입장에서는 짧은 글이라고 안심할 이유가 없습니다.
이 사이트의 비밀어에도 빈도 분석이 통할까요?
번역기는 AES-GCM이라는 현대 암호로 바이트 전체를 섞은 다음 그 결과를 한글이나 영문숫자로 표현합니다. 비밀어의 글자는 평문의 글자와 대응하지 않으므로, 글자 빈도를 세어도 평문의 흔적을 찾을 수 없습니다. 같은 문장을 다시 암호화하면 결과가 달라지기까지 합니다.
빈도 분석은 지금도 쓰이나요?
현대 암호를 깨는 데 직접 쓰이지는 않지만, 암호 수업의 기초이자 퍼즐이나 게임에서 계속 쓰이는 방법입니다. 암호를 설계할 때 통계적 흔적이 남지 않도록 점검하는 사고방식도 이 방법에서 이어진 것입니다.
정리하며
빈도 분석은 "비밀은 완벽히 숨겨도 습관은 숨기기 어렵다"는 사실을 보여 줍니다. 암호를 만드는 쪽은 언어의 통계적 버릇을 지우는 방향으로, 푸는 쪽은 그 버릇을 찾아내는 방향으로 천 년 넘게 경쟁해 왔습니다. 오늘의 암호가 튼튼한 것도 결국 이 경쟁에서 얻은 교훈 덕분입니다. 이 흐름이 시작된 곳은 시저 암호부터 시작하는 암호 이야기에서 확인할 수 있습니다.
잘못된 내용이나 보완할 점을 발견하셨다면 소개·문의의 이메일로 알려 주세요. 확인 후 글을 고치고 수정일을 갱신합니다.