동음 치환 암호 (Homophonic Substitution)
동음 치환 암호(homophonic substitution)는 하나의 평문 기호를 미리 정해 둔 여러 개의 서로 다른 암호문 기호, 즉 '동음 기호(homophone)' 중 하나로 바꾸는 치환 암호입니다. 'homophonic'은 그리스어로 '같은 소리'라는 뜻으로, 서로 다른 기호들이 모두 같은 평문 글자를 '소리 낸다'는 의미에서 붙은 이름이며, 영문으로는 homophonic cipher라고도 합니다. 자주 쓰이는 글자에 더 많은 동음 기호를 배정해, 암호문에서 모든 기호가 비슷한 빈도로 나타나게 만드는 것이 목적입니다. 단순 치환에서는 평문의 가장 흔한 글자가 언제나 암호문의 가장 흔한 기호가 된다는 약점을 막기 위한 방법입니다.
자세히 알아보기
예를 들어 영어에서 E는 약 12%로 가장 흔하므로 12개의 기호를, 빈도가 1% 정도인 글자에는 1개의 기호를 배정하면, 100개 기호가 모두 약 1%씩 나타나게 됩니다. 암호화할 때는 동음 기호 중 하나를 무작위로 고릅니다. 복호화는 어느 동음 기호든 원래 글자로 바꾸면 되므로 간단합니다. 즉 평문 글자 하나에 여러 기호가 대응하는 일대다 구조이지만, 기호 하나는 언제나 한 글자로만 되돌아가므로 모호함이 없습니다.
대가는 암호문 확장입니다. 기호 종류가 평문 알파벳보다 많아야 하므로 각 기호를 표현하는 데 더 많은 비트(또는 두 자리 숫자)가 필요합니다. 또 빈도는 감출 수 있어도 두 글자 조합과 문맥 정보까지 완전히 감추지는 못해, 충분한 암호문이 있으면 언덕 오르기(hill climbing) 같은 통계적 탐색과 컴퓨터 탐색으로 풀 수 있습니다. 2020년 12월에는 1969년부터 50여 년간 풀리지 않던 조디악 킬러의 340자 암호가 동음 치환에 전치를 결합한 방식이었음이 밝혀지며 해독되었습니다.
블록체인·암호화폐에서는
동음 치환 자체는 현대 암호에서 쓰이지 않지만, '같은 평문이 매번 다른 암호문이 되게 한다'는 핵심 아이디어는 현대 확률적 암호화로 이어졌습니다. 오늘날 안전한 암호화는 매번 새 난스나 IV를 써서, 같은 메시지를 두 번 암호화해도 다른 암호문이 나오도록 합니다(IND-CPA 안전성). 지갑 간 메시지 암호화에 쓰이는 ECIES, AES-GCM, ChaCha20-Poly1305가 모두 이 원칙을 따르며, 그 대가로 난스·태그만큼의 암호문 확장이 생긴다는 점도 동음 치환과 같습니다. 같은 맥락에서 이더리움 트랜잭션의 ECDSA 서명도 서명마다 고유한 난스를 쓰며, 이 난스는 무작위로 뽑거나 RFC 6979처럼 개인 키와 메시지에서 결정론적으로 유도합니다.
쉽게 말하면
'E'를 쓸 때마다 12개의 가짜 이름 중 하나를 골라 쓰는 방법입니다. 누가 가장 자주 등장하는지 세어 봐도 티가 나지 않습니다.
예시
E에 {17, 42, 63}, T에 {05, 88}을 배정하면 'TEE'는 '05 63 17'이나 '88 42 63' 등 여러 방식으로 암호화됩니다.
이렇게 하면 같은 글자가 반복되어도 암호문 기호가 반복되지 않게 할 수 있어, 단순 치환에서 쓰던 빈도 세기와 반복 패턴 찾기가 바로 통하지 않습니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.