일회용 암호표: 이론상 깨지지 않는 암호
암호 역사에는 이론적으로 절대 깨지지 않는다고 증명된 암호가 하나 있습니다. 일회용 패드(one-time pad, OTP)입니다. 그런데 그렇게 완벽한 암호가 왜 우리가 쓰는 메신저나 웹사이트에는 쓰이지 않을까요. 이 글에서는 일회용 패드의 원리를 직접 계산해 보고, 완벽함의 조건과 그 조건이 현실에서 왜 지키기 어려운지를 이야기합니다.
일회용 패드의 기본 아이디어
일회용 패드는 아이디어가 매우 단순합니다. 보낼 글과 같은 길이의 무작위 키를 준비하고, 글의 각 부분을 키의 같은 위치 값과 섞어서 암호문을 만듭니다. 받는 사람은 똑같은 키를 가지고 있다가 같은 방식으로 되돌립니다. 이름의 유래는 예전에 이 키를 낱장 종이에 적어 묶음(패드)으로 나눠 가졌고, 한 장은 한 번만 쓰고 버렸다는 데 있습니다.
이 방식은 1917년에 미국의 길버트 버넘(Gilbert Vernam)이 전신 암호 장치를 연구하면서 고안한 것으로 알려져 있습니다. 그 뒤 키를 진짜 무작위로 만들고 한 번만 쓰면 깨질 수 없다는 점이 알려졌고, 1949년에 클로드 섀넌(Claude Shannon)이 이를 수학적으로 증명했습니다. 섀넌은 이런 성질을 완전 비밀성(perfect secrecy)이라고 불렀습니다.
XOR로 직접 해 보기
컴퓨터에서는 섞는 연산으로 보통 XOR(배타적 논리합)을 씁니다. XOR은 비트가 서로 다르면 1, 같으면 0을 돌려줍니다. 가장 큰 특징은 같은 값으로 두 번 XOR 하면 원래대로 돌아온다는 점입니다.
영문 대문자 H 한 글자를 예로 들어 보겠습니다. ASCII 코드로 H는 숫자 72이고, 2진수로는 01001000 입니다. 무작위로 뽑은 키 한 바이트가 01011010 이라고 하겠습니다.
글자 H : 01001000
키 : 01011010
XOR 결과 : 00010010 (암호문)
암호문 00010010 을 받은 사람은 같은 키로 다시 XOR 합니다.
암호문 : 00010010
키 : 01011010
XOR 결과 : 01001000 (원래의 H)
같은 방식으로 두 번째 글자 i(2진수 01101001)를 다른 키 바이트 11000011 과 XOR 하면 10101010 이 됩니다. 글자마다 키 바이트가 다르다는 점이 핵심입니다. 키를 한 글자 쓸 때마다 새로운 무작위 값을 쓰기 때문에 암호문의 모양에서는 아무 규칙도 읽을 수 없습니다.
왜 깨질 수 없는가
암호문 00010010 만 보고 있는 도청자의 입장에서 생각해 보겠습니다. 이 암호문이 H에서 나왔을 수도 있지만, 키가 다르다면 다른 글자에서도 얼마든지 나올 수 있습니다. 어떤 글자든 알맞은 키 하나만 있으면 이 암호문이 되기 때문입니다. 그리고 키는 무작위이므로 모든 가능성이 똑같이 그럴듯합니다. 도청자가 아무리 계산 능력이 뛰어나도 어느 것이 정답인지 고를 단서가 암호문 안에 없습니다. 이것이 계산이 오래 걸려서 못 푸는 것이 아니라 정보 자체가 없어서 못 푸는, 완전 비밀성의 의미입니다.
이 점이 AES 같은 현대 암호와 다른 점입니다. AES는 키가 충분히 커서 현실적으로 못 푸는 암호이고, 일회용 패드는 무한한 계산 능력이 있어도 못 푸는 암호입니다.
글자 더하기로도 해 보기
XOR 대신 알파벳 순서를 더하는 방식으로도 같은 원리를 보여 줄 수 있습니다. A를 0, B를 1, ... Z를 25로 놓고, 글자 값에 키 글자 값을 더한 뒤 26으로 나눈 나머지를 취합니다. 평문이 HELLO이고 무작위 키가 XMCKL이라고 해 보겠습니다.
평문 H E L L O = 7 4 11 11 14
키 X M C K L = 23 12 2 10 11
합계 = 30 16 13 21 25
26으로 나눈 나머지 = 4 16 13 21 25
암호문 E Q N V Z
받는 사람은 암호문에서 키를 빼고, 음수가 되면 26을 더해 되돌립니다. 이제 도청자의 처지에서 암호문 EQNVZ를 봅니다. 만약 키가 TQURI였다면 같은 암호문이 LATER가 됩니다. 확인해 보면 L(11)에 T(19)를 더하면 30, 나머지 4로 E가 됩니다. 다섯 글자 모두 맞아떨어집니다. 즉 같은 암호문이 키만 다르면 HELLO도 되고 LATER도 됩니다. 어느 쪽이 맞는지 판단할 근거가 암호문에 없다는 뜻이고, 이것이 완전 비밀성이 말하는 상태입니다.
완벽함이 성립하는 조건
이 완벽함은 아래 조건이 모두 지켜질 때만 성립합니다. 하나라도 어기면 보장이 무너집니다.
- 키는 글과 같거나 더 긴 길이여야 합니다.
- 키는 진짜 무작위여야 합니다. 규칙이 있거나 예측 가능한 값이면 안 됩니다.
- 키는 단 한 번만 써야 합니다. 같은 키를 다시 쓰면 안 됩니다.
- 키는 송신자와 수신자만 알아야 하고, 사용 후에는 폐기해야 합니다.
이 가운데 "한 번만 쓴다"가 가장 중요하고 가장 자주 깨집니다.
키를 재사용하면 어떻게 될까요
같은 키 K로 두 개의 글 A, B를 암호화했다고 합시다. 암호문은 각각 A XOR K, B XOR K 입니다. 도청자가 두 암호문을 서로 XOR 하면 키가 약분되어 사라집니다.
(A XOR K) XOR (B XOR K) = A XOR B
이렇게 되면 키는 몰라도 두 글이 섞인 값 A XOR B를 얻게 됩니다. 글의 형식이나 자주 나오는 단어를 짐작해 가며 맞추어 나가면 두 글이 모두 드러날 수 있습니다. 완벽했던 암호가 키를 한 번 재사용했다는 이유만으로 평범한 암호보다 약해질 수 있습니다.
역사에는 이와 관련된 사례가 알려져 있습니다. 냉전 초기 미국이 소련의 외교 통신을 분석한 베노나(Venona) 계획이 대표적입니다. 소련이 일회용 패드를 쓰는 체계였는데, 일부 패드가 중복 사용되면서 미국이 일부 통신을 해독할 수 있었다고 알려져 있습니다. 구체적인 규모나 경위는 자료마다 설명이 다르므로, 여기서는 재사용이 해독의 실마리가 되었다는 정도로만 소개합니다.
또 하나의 약점: 변조
일회용 패드는 비밀은 지켜 주지만, 글이 바뀌지 않았다는 것은 보장하지 않습니다. 도청자가 암호문의 특정 비트를 뒤집으면 해독된 글에서 같은 위치의 비트가 뒤집힙니다. 내용을 몰라도 위치만 알면 글을 고쳐 놓을 수 있습니다. 그래서 일회용 패드를 쓰더라도 변조를 확인하는 별도의 장치가 필요합니다. AES-GCM이 암호화와 함께 인증 태그를 붙이는 이유가 이런 문제를 막기 위해서입니다. 자세한 내용은 AES-GCM 쉽게 풀어쓰기를 참고하세요.
그런데 왜 실제로는 거의 쓰이지 않을까요
이론상 완벽한데도 일상적인 통신에 쓰이지 않는 이유는 키 관리의 부담 때문입니다.
- 키가 글만큼 길어야 하므로, 1GB의 파일을 보내려면 1GB의 키가 필요합니다.
- 그 키를 미리 안전하게 상대에게 전달해야 합니다. 안전하게 전달할 수 있다면 그 통로로 글을 보내면 되지 않느냐는 모순이 생깁니다.
- 진짜 무작위 키를 대량으로 만드는 것 자체가 어렵습니다.
- 키를 한 번씩만 써야 해서 쓰다 보면 금세 소진되고, 송수신자가 쓴 위치를 정확히 맞춰 관리해야 합니다.
그래서 일회용 패드는 극히 중요한 소수의 연락을 대면해서 키를 건네줄 수 있는 환경에서만 쓰여 왔습니다. 대부분의 서비스는 짧은 키를 AES 같은 알고리즘으로 확장해서 쓰는 방식을 택합니다. 키를 짧게 유지하면서도 실용적으로 안전한 균형이라서, 완전 비밀성은 포기하는 대신 현실적인 안전성을 얻는 것입니다. 이때도 난수의 품질은 중요하므로 암호에서 난수가 중요한 이유를 함께 보시기 바랍니다.
현대 암호는 일회용 패드를 어떻게 흉내 내나요
현대의 스트림 암호와 AES의 카운터 계열 방식은 짧은 키와 IV에서 긴 키 흐름을 만들어 글과 XOR 하는 구조를 가집니다. 이 점에서 일회용 패드와 모양이 닮았습니다. 차이는 키 흐름이 진짜 무작위가 아니라 계산으로 만든 의사 난수라는 점입니다. 그래서 완전 비밀성은 없지만, 계산으로 구별해 내기가 현실적으로 불가능하도록 설계되어 있습니다. 대신 키가 짧아서 관리가 쉽습니다.
그리고 일회용 패드의 재사용 금지 원칙이 여기서는 같은 키와 같은 IV 조합을 두 번 쓰지 말라는 규칙으로 이어집니다. 이 규칙을 어기면 위에서 본 A XOR B 문제가 그대로 되살아납니다. 이 서비스가 글마다 12바이트짜리 새 IV를 무작위로 뽑는 것은 이 위험을 피하기 위해서입니다. 12바이트는 2의 96제곱 가지여서, 한 키로 보통 수준의 메시지를 보내는 동안 우연히 겹칠 가능성은 무시할 만합니다.
이렇게 보면 일회용 패드는 낡은 유물이 아니라 현대 암호가 따르려 하는 이상형입니다. 완벽한 모델을 알아 두면, 지금 쓰는 암호가 어떤 타협 위에 서 있는지를 이해하기 쉬워집니다.
요약하면 일회용 패드는 안전성이 키에서만 나오는 암호입니다. 알고리즘이 아무리 단순해도, 키가 무작위이고 한 번만 쓰이며 비밀로 남는다면 어떤 계산 능력으로도 뚫을 수 없습니다. 반대로 그 조건 중 하나라도 어기면 지켜지는 것이 없습니다.
이 서비스와의 관계
친구와 암호 대화는 일회용 패드를 쓰지 않습니다. 글마다 새로 뽑은 무작위 IV와 번역기 키에서 유도한 AES-GCM 키로 암호화합니다. 일회용 패드의 정신, 즉 같은 것을 재사용하지 않는다는 원칙은 IV에도 그대로 이어집니다. 같은 글을 두 번 암호화해도 매번 다른 비밀어가 나오는 것이 그 때문입니다.
정리하면, 일회용 패드는 암호학에서 가장 이상적인 모델이지만 운영이 어려운 암호입니다. 암호의 안전은 알고리즘만이 아니라 키를 어떻게 만들고 쓰고 버리느냐에 달려 있다는 교훈을 가장 선명하게 보여 줍니다. 직접 비밀어를 만들어 보고 싶으시면 번역기 열기에서 시작해 보세요.
잘못된 내용이나 보완할 점을 발견하셨다면 소개·문의의 이메일로 알려 주세요. 확인 후 글을 고치고 수정일을 갱신합니다.