다중 알파벳 치환 암호(polyalphabetic cipher)는 여러 개의 대체 알파벳을 사용하는 치환(substitution) 기반 암호 방식을 말합니다. 이 암호에서는 평문(plaintext)의 글자가 텍스트 내 위치에 따라 서로 다르게 암호화됩니다. 즉, 각 글자와 그 대체 문자 사이에는 일대일 대응이 아닌 일대다(one-to-many) 관계가 성립합니다.
다중 알파벳 치환 암호의 핵심 원리
예를 들어 'a'라는 글자는 텍스트 시작 부분에서는 'd'로 암호화되지만, 문서 중간에서는 'n'으로 암호화될 수 있습니다. 이처럼 같은 글자라도 위치에 따라 다른 문자로 치환되기 때문에, 다중 알파벳 치환 암호는 원래 언어의 글자 빈도(letter frequency)를 효과적으로 숨길 수 있다는 큰 장점이 있습니다.
그 결과 공격자는 개별 글자의 빈도 통계를 이용해 암호문을 분석하고 해독하는 빈도 분석 공격(frequency analysis)을 적용하기 어렵습니다. 이는 단일 알파벳 치환 암호(monoalphabetic cipher)가 지닌 근본적인 취약점을 보완하는 핵심 아이디어입니다.
최초의 다중 알파벳 치환 암호: 알베르티 암호
역사상 최초의 다중 알파벳 치환 암호는 1467년 이탈리아의 르네상스 인문주의자이자 암호학자인 레온 바티스타 알베르티(Leon Battista Alberti)가 소개한 알베르티 암호(Alberti Cipher)입니다. 그는 '암호학의 아버지'로 불리기도 합니다.
알베르티 암호는 무작위로 섞인 알파벳을 사용해 평문을 암호화했으며, 암호화 도중 특정 지점마다 다른 혼합 알파벳으로 전환할 수 있었습니다. 이때 알파벳이 전환된 시점은 암호문에 대문자로 표시하여 수신자가 이를 인식할 수 있도록 했습니다.
알베르티는 이 암호를 실제로 구현하기 위해 암호판(cipher disc)이라는 도구를 고안했습니다. 암호판은 겹쳐 놓은 두 개의 회전 원판을 이용해 평문 글자와 암호문 글자의 대응 관계를 시각적으로 보여주는 장치로, 원판을 회전시킬 때마다 새로운 치환 규칙이 적용됩니다.
결국 이 암호에서 각 암호문 문자는 해당 평문 문자 자체와, 그 문자가 메시지 내에서 차지하는 위치라는 두 가지 요소에 모두 의존하게 됩니다.
키 스트림(Key Stream)의 개념
'다중 알파벳(polyalphabetic)'이라는 이름에서 알 수 있듯이, 이 방식은 하나의 키가 아니라 여러 개의 키를 사용함으로써 구현됩니다. 이는 곧 키가 하위 키(subkey)들의 스트림, 즉 흐름 형태여야 함을 의미합니다. 각 하위 키는 암호화가 필요한 평문 문자의 위치에 어떤 식으로든 의존하게 됩니다.
다시 말해, k = (K1, K2, K3 ...) 형태의 키 스트림이 필요하며, 여기서 Ki는 평문의 i번째 문자를 암호화하여 암호문의 i번째 문자를 생성하는 데 사용됩니다. 이러한 방식의 알고리즘 중 가장 잘 알려져 있고 가장 단순한 것이 바로 비제네르 암호(Vigenère cipher)입니다.
비제네르 암호(Vigenère Cipher)
비제네르 암호는 다중 알파벳 치환 암호 중 가장 단순하면서도 널리 알려진 알고리즘 중 하나입니다. 이 방식에서는 키워드(keyword)의 글자들을 기반으로 여러 개의 카이사르 암호(Caesar cipher)를 연속적으로 적용하여 알파벳 텍스트를 암호화합니다.
카이사르 암호의 이해
카이사르 암호는 평문의 각 글자를 알파벳에서 일정한 거리만큼 오른쪽에 있는 글자로 대체하는 방식입니다. 이 이동(shift)은 알파벳이 순환하도록 26을 법으로 하는 모듈로 연산(modulo 26)으로 처리됩니다. 예를 들어 이동 값이 3인 카이사르 암호에서는 A가 D로, B가 E로 바뀌며, Z는 다시 C로 돌아갑니다.
비제네르 암호의 작동 방식
비제네르 암호는 서로 다른 이동 값을 가진 여러 개의 단순 치환 암호를 순차적으로 결합한 형태입니다. 이 암호에서는 키워드가 평문의 길이와 같아질 때까지 계속 반복되어 적용됩니다.
암호화 과정은 다음과 같습니다. 먼저 비제네르 표(Vigenère Square, 타뷸라 렉툼라고도 함)에서 키 글자에 해당하는 행(row)을 찾습니다. 다음으로 평문 글자에 해당하는 열(column)의 머리글을 찾습니다. 그리고 해당 행과 열이 교차하는 지점에 있는 글자가 바로 암호문 문자가 됩니다. 나머지 평문 글자들도 이와 동일한 방식으로 순차적으로 암호화됩니다.
이처럼 비제네르 암호는 키워드의 각 글자가 서로 다른 이동 값을 만들어내기 때문에, 같은 평문 글자라도 키워드 상의 위치에 따라 다양한 암호문 글자로 변환됩니다. 덕분에 단순 빈도 분석으로는 해독이 어려웠으며, 19세기까지 '깨지지 않는 암호'로 불리며 널리 사용되었습니다.