고전 암호는 컴퓨터와 같은 고성능 연산 장치가 발명되기 이전에, 비교적 간단한 기계나 손 등으로 암복호화를 수행하던 암호를 말합니다. 대부분 컴퓨터를 사용하면 쉽게 복호화할 수 있기 때문에 현대에는 사용되지 않습니다.
고대 암호는 일반적으로 치환(Substitution)과 전치(Transposition)의 방법으로 설계됩니다. 치환은 평문의 문자를 다른 것으로 바꾸는 것이고, 전치는 평문 문자들의 위치를 바꾸는 것을 말합니다.
단순한 고전 암호는 위의 두 원리 중 하나만 사용하는 치환 암호(Substitution cipher)와 전치 암호(Transposition cipher)이 있고, 복잡한 고전 암호는 두 가지 원리를 다 사용합니다.
치환 암호는 또 단일 문자 치환 암호(Monoalphabetic substitution cipher)와 다중 문자 치환 암호(Polyalphabetic substitution cipher)로 나눌 수 있습니다.
단일 문자 치환 암호(Monoalphabetic substitution cipher)는 평문의 각 문자를 약속된 다른 문자로 치환하는 암호입니다. 치환의 대응 관계는 일대일 대응이므로 평문의 Z
가 암호문의 Y
로 치환된다면 평문의 다른 어떤 문자도 Y
로 치환되지 않습니다.
이러한 암호는 언어가 지닌 통계적 특성이 그대로 유지된다는 단점이 있습니다. 통계적으로, 영어 문장에서 가장 많이 사용되는 알파벳은 e
입니다. 따라서 단일 치환 암호가 적용된 어떤 암호문에서 가장 많이 나온 문자를 e
라고 유추할 수 있습니다. 이러한 특성을 이용하면 일반적인 영문 단일 치환 암호문은 어렵지 않게 해독할 수 있습니다.
다중 문자 치환 암호(Polyalphabetic substitution cipher)는 단일 문자 치환 암호와 달리, 평문의 한 문자가 암호문에서 여러 종류의 문자로 치환될 수 있습니다.
대표적인 다중 문자 치환 암호로는 비제네르 암호가 있습니다. 비제니르 암호에서 암호화와 복호화는 미리 정해진 키워드를 통해 이루어집니다. PNU
라는 키워드로 평문 DREAMHACK
을 비제네르 암호화하는 과정은 다음과 같습니다.
우선 아래의 비제네르 표에서 P
, N
, U
행을 고릅니다.
키 P N U P N U P N U 평문 D R E A M H A C K 암호문 S E Y P Z B P P E
전치 암호(Transposition cipher)는 평문을 구성하는 문자들의 순서를 재배열하여 암호문을 만듭니다. 평문을 정해진 길이의 블록들로 나눈 후, 규칙을 적용하여 블록 안의 문자들을 재배열합니다.
예를 들어, 블록의 길이가 3이고 키가 (2, 3, 1)일 때 평문 DREAMHACK
의 암호화를 해보겠습니다. 먼저 평문을 블록의 길이로 나눈 후, 키가 (2, 3, 1)이므로 두번째, 세번째, 첫번째 문자 순서로 재배열하면 됩니다. 실제로 적용하면 맨 처음 블록인 DRE
를 재배열하면 RED
가 되고, 이처럼 전부 재배열하면 REDMHACKA
가 됩니다.
고전 암호를 공격하는 방법으로는 대표적으로 전수 키 탐색 공격과 빈도수 분석이 있습니다.
전수 키 탐색 공격(Exhaustive key search attack)은 평문과 암호문을 알 때, 키 공간을 전부 탐색하며 주어진 암호문과 같은 암호문을 생성하는 키를 찾는 방법입니다. 키 공간의 크기가 작다면 빠른 시간안에 키를 찾고, 해독할 수 있습니다.
단일 치환 암호는 평문의 문자와 암호문의 문자가 항상 일대일 대응을 이루기 때문에 평문의 통계적 특성이 유지됩니다. 따라서 평문의 E
를 A
로 치환하여 암호문을 만들었다면, 암호문에서 가장 많이 등장하는 알파벳이 A
일 확률이 높습니다. 이런 추측을 바탕으로 암호문을 복구하는 방법을 빈도수 공격(Frequency analysis)이라고 합니다.
다중 치환 암호는 이러한 통계적 특성이 사라지기 때문에, 빈도수 공격으로부터 비교적 안전하다고 알려져 있습니다.