T

Text Machine

강력한 텍스트 도구를 브라우저에서

러닝 키 암호

키가 짧은 반복 단어가 아니라 긴 텍스트 구절인 Vigenère 암호, 즉 러닝 키 암호를 암호화하고 복호화하세요. 키가 메시지만큼 길고 결코 반복되지 않기 때문에, 보통의 Vigenère를 깨뜨리는 주기적 패턴이 사라집니다. 암호화와 복호화를 전환하고 계산 과정이 실시간으로 만들어지는 모습을 지켜보세요. 모든 작업은 브라우저에서 실행됩니다.

러닝 키

긴 키 구절을 붙여넣으세요. 전통적으로는 약속한 책의 한 페이지입니다. 진정한 러닝 키가 되려면 적어도 메시지만큼 길어야 합니다. 이동에는 오직 글자만 사용되며, 대문자와 소문자는 동일하게 취급되고, 키에 포함된 공백이나 숫자, 문장 부호는 무시됩니다.

평문
암호문

위에 텍스트를 입력하면 러닝 키 결과가 여기에 표시됩니다.

러닝 키 암호 사용 방법

  1. 1

    암호화 또는 복호화 선택

    평문을 러닝 키 암호문으로 바꾸려면 암호화를, 암호문에서 평문을 되찾으려면 복호화를 고르세요. 같은 러닝 키가 두 방향에 모두 쓰입니다.

  2. 2

    러닝 키 붙여넣기

    키로 사용할 긴 텍스트 구절을 붙여넣으세요. 전통적으로는 약속한 책의 한 페이지입니다. 진정한 러닝 키가 되려면 적어도 메시지만큼 길어야 합니다. 오직 글자만 사용되며, 대소문자와 공백, 문장 부호는 무시됩니다.

  3. 3

    텍스트 입력 또는 붙여넣기

    변환하려는 메시지를 입력하세요. 암호는 입력하는 즉시 자동으로 실행되며, 아래의 글자별 계산 과정이 실시간으로 갱신되어 짧은 키가 되감겨 반복해야 했던 지점을 강조합니다.

  4. 4

    보기, 복사, 공유

    결과를 읽은 뒤, 복사하거나 텍스트 파일로 다운로드하거나, 당신의 정확한 키와 방향, 텍스트 그대로 도구를 다시 여는 링크로 공유하세요. 모든 것이 브라우저 안에 머뭅니다.

러닝 키 암호 이해하기

러닝 키 암호란 무엇인가요?

러닝 키 암호는 다중 문자 치환 암호로, 짧은 반복 키워드 대신 긴 평범한 텍스트 구절을 키로 쓰는 Vigenère 암호의 한 형태입니다. 송신자와 수신자는 미리 키 텍스트를 약속하는데, 고전적으로는 특정 책의 특정 판본을 특정 페이지에서 펼친 것으로, 그 글자들을 순서대로 써서 메시지를 이동시킵니다. 키가 적어도 메시지만큼 길기 때문에 결코 반복할 필요가 없고, 반복 키 암호를 깨기 쉽게 만드는 규칙적인 순환 구조가 그저 사라져 버립니다.

이 길고 반복되지 않는 키가 러닝 키 암호를 남다르게 만드는 점입니다. 보통의 Vigenère 암호는 주기성으로 자신을 드러냅니다: 짧은 키워드가 순환하고, 그 리듬은 감지되어 풀어낼 수 있습니다. 러닝 키는 그 리듬을 완전히 없앱니다. 그 대가로, 이제 키는 자연 언어이며 영어 텍스트가 지닌 온갖 통계적 편향을 안고 있고, 그 편향이 공격자가 대신 파고드는 빈틈이 됩니다.

러닝 키 암호가 작동하는 방식

알파벳에 A를 0부터 Z를 25까지 번호를 매깁니다. 키 텍스트를 메시지 아래에 적어, 평문의 모든 글자 아래에 키 글자 하나씩이 놓이게 합니다. 암호화하려면 각 키 글자를 그 위의 글자에 더하고 26으로 나눈 나머지로 알파벳을 한 바퀴 둘러 감으므로, 암호문 글자는 C = (P + K) mod 26이 됩니다. 그 산술은 정확히 Vigenère 표이며, 바뀐 것은 키의 출처뿐입니다.

복호화하려면 수신자가 같은 키 텍스트를 암호문 아래에 적고 빼서, P = (C − K) mod 26으로 각 평문 글자를 복원합니다. 모든 Vigenère 변형에서처럼 오직 26개의 글자만 변환됩니다: 공백과 문장 부호, 숫자는 그대로 통과하며 키 글자를 소모하지 않으므로, 키는 메시지의 글자들과 계속 정렬된 채 유지됩니다. 대소문자가 보존되어 출력은 원래 텍스트의 모양을 그대로 간직합니다.

예제 풀이

메시지 HELLO를 러닝 키 KEYBOARD로 암호화합니다. 처음 다섯 개의 키 글자 K, E, Y, B, O를 메시지 아래에 줄 맞춰 더합니다: H 더하기 K는 R, E 더하기 E는 I, L 더하기 Y는 J, L 더하기 B는 M, O 더하기 O는 C입니다. 암호문은 RIJMC입니다. 오토키 암호와 달리, 키 글자가 순전히 약속된 키 텍스트에서 오며 평문과는 아무 상관이 없다는 점에 주목하세요.

RIJMC를 복호화하려면 같은 키 KEYBOARD를 그 아래에 적고 뺍니다: R 빼기 K는 H, I 빼기 E는 E, J 빼기 Y는 L, M 빼기 B는 L, C 빼기 O는 O가 되어 HELLO를 복원합니다. 키가 처음부터 온전히 알려져 있어 글자별 되먹임을 기다릴 필요가 없으므로, 메시지 전체를 한 번에 읽어 낼 수 있습니다.

러닝 키 대 반복 키 Vigenère

표준 Vigenère 암호는 짧은 키워드를 메시지 전체에 걸쳐 반복합니다: 키 KEY로는 스트림이 KEYKEYKEY 같은 식으로 이어집니다. 그 반복이 치명적 약점인데, 키 길이가 Kasiski 검사나 일치 지수로 복원될 수 있고, 그러고 나면 각 열은 빈도 분석으로 풀리는 단순한 카이사르 이동이 되기 때문입니다. 러닝 키 암호는 동일한 덧셈 규칙을 쓰지만 메시지만큼 긴 키를 쓰므로, 찾아낼 주기가 없고 그런 고전적 검사가 직접 통하지 않습니다.

위험은 너무 짧은 키를 쓰는 데 있습니다. 러닝 키가 메시지보다 짧으면 처음으로 되감겨야 하고, 그 순간 그것은 그 암호의 온갖 약점을 지닌 보통의 반복 키 Vigenère가 됩니다. 예를 들어 HELLO를 세 글자 키 KEY로 암호화하면 되감겨 RIJVS가 되는데 — 바로 반복 Vigenère의 결과입니다. 이 도구는 재사용된 키 글자를 표시해 암호가 약해지는 모습을 볼 수 있게 하며, 제대로 된 러닝 키는 언제나 적어도 텍스트만큼 길어야 합니다.

러닝 키 대 오토키 암호

러닝 키와 오토키 암호는 가까운 사촌입니다: 둘 다 아무것도 반복되지 않도록 메시지만큼 긴 키를 쓰고, 둘 다 같은 모듈러 덧셈으로 귀결됩니다. 차이는 그 긴 키가 어디서 오는지에 있습니다. 러닝 키 암호는 약속한 책의 한 페이지처럼 공유된 외부 텍스트에서 키를 끌어오는 반면, 오토키 암호는 짧은 시작 키워드 뒤에 평문 자체를 이어 붙여 긴 키를 만듭니다.

그 구분이 각각이 공격받는 방식을 좌우합니다. 오토키 암호는 시작 키워드라는 아주 작은 공유 비밀만 있으면 되지만, 키의 일부가 평문이기 때문에 흔한 단어를 알아맞혀 메시지에 끌고 다니면 더 많은 텍스트가 드러납니다. 러닝 키 암호는 양쪽 당사자가 같은 키 텍스트를 지녀야 하지만, 그 약점은 통계적입니다: 메시지와 키가 모두 자연 언어이므로, 분석가는 일관된 분할이 나타날 때까지 그럴듯한 단어들을 서로 맞대어 시험해 볼 수 있습니다.

러닝 키 암호를 깨는 방법

키가 결코 반복되지 않기 때문에, Kasiski 검사와 일치 지수는 반복 Vigenère에서처럼 먹히지 않습니다. 대신 고전적 공격은 각 암호문 글자가 둘 다 평범한 언어에서 가져온 두 글자의 합이라는 사실을 이용합니다. 영어는 매우 중복적이어서, 어떤 주어진 암호문 글자에 대해 그럴듯한 평문-키 글자 쌍은 소수에 불과하며, 어느 한쪽 스트림의 흔한 단어들이 감지할 수 있는 흔적을 남깁니다.

흔히 William Friedman의 공으로 여겨지는 실용적 방법은, 가능성 있는 단어를 알아맞혀 그것을 키인 양 암호문의 한 구간에서 빼고, 다른 스트림이 언어처럼 보이는지 살피는 것입니다. 키에서의 올바른 추측은 평문의 한 조각을 드러내고, 평문에서의 올바른 추측은 키의 한 조각을 드러내며, 그런 다음 각 조각을 바깥으로 연장하여 두 스트림을 서로 맞대어 풀어낼 수 있습니다. 같은 키 텍스트를 둘 이상의 메시지에 재사용하는 것은 치명적인데, 두 암호문을 빼면 공유된 키가 상쇄되고 두 평문이 결합된 채로 남기 때문입니다.

러닝 키에서 일회용 패드로

러닝 키 암호는 깨질 수 없다고 증명된 유일한 암호인 일회용 패드의 직접적인 개념적 조상입니다. 방법은 거의 같습니다: 메시지만큼 긴 키를 가져다 글자 하나하나 더하는 것입니다. 일회용 패드는 세 가지 엄격한 조건을 덧붙입니다 — 키는 진정으로 무작위여야 하고, 적어도 메시지만큼 길어야 하며, 결코 재사용되어서는 안 됩니다. 이 셋을 모두 충족하면 가능한 모든 평문이 암호문과 똑같이 들어맞으므로, 어떤 분석도 진짜 평문을 가려낼 수 없습니다.

러닝 키는 바로 그 조건들을 충족하지 못합니다. 책의 한 구절은 무작위가 아닙니다; 그 글자 빈도와 흔한 단어들이 위에서 설명한 발판을 분석가에게 내어 주는, 구조화된 영어입니다. 그래서 러닝 키 암호가 반복 Vigenère보다 의미 있게 더 강하기는 하지만, 현대의 기준으로는 어떤 실질적 보안도 제공하지 못하며 진짜 비밀을 지키는 데 결코 써서는 안 됩니다. 이 암호는 암호 역사의 생생한 교훈이자 퍼즐 헌트와 방 탈출, 깃발 뺏기(CTF) 문제의 단골 소재로 즐기는 것이 가장 좋습니다; 실제 보호를 위해서는 AES 같은 현대적이고 충분히 검증된 알고리즘을 쓰세요.

자주 묻는 질문

러닝 키 암호란 무엇인가요?
러닝 키 암호는 키가 짧은 반복 키워드가 아니라 약속한 책의 한 페이지 같은 긴 텍스트 구절인 Vigenère 암호입니다. 키가 메시지만큼 길고 결코 반복되지 않기 때문에, 보통의 Vigenère 암호를 깨기 쉽게 만드는 순환 패턴을 피합니다. 키를 책에서 가져올 때는 책 암호라고 부르기도 합니다.
러닝 키 암호는 어떻게 작동하나요?
알파벳에 A를 0부터 Z를 25까지 번호를 매기고 키 텍스트를 메시지 아래에 메시지 글자 하나당 키 글자 하나씩 적습니다. 암호화하려면 각 키 글자를 메시지 글자에 26으로 나눈 나머지로 더합니다: C = (P + K) mod 26. 복호화하려면 같은 키로 뺍니다: P = (C − K) mod 26. 오직 글자만 바뀝니다; 공백과 숫자, 문장 부호는 손대지 않고 그대로 통과합니다.
러닝 키 암호는 Vigenère 암호와 어떻게 다른가요?
둘은 같은 덧셈 규칙을 쓰지만, Vigenère 암호는 짧은 키워드를 메시지 전체에 걸쳐 반복하는 반면 러닝 키 암호는 메시지만큼 길고 결코 반복되지 않는 키를 씁니다. 그것이 Kasiski 검사나 일치 지수가 찾아낼 주기를 없앱니다. 러닝 키가 너무 짧아 반복해야 하면, 보통의 반복 키 Vigenère로 다시 약화됩니다.
러닝 키 암호 예제를 보여 줄 수 있나요?
HELLO를 러닝 키 KEYBOARD로 암호화하면 RIJMC가 됩니다. 키 글자 K, E, Y, B, O를 메시지 아래에 줄 맞추면: H 더하기 K는 R, E 더하기 E는 I, L 더하기 Y는 J, L 더하기 B는 M, O 더하기 O는 C입니다. RIJMC를 같은 키 KEYBOARD로 복호화하면 한 번에 HELLO를 복원합니다.
러닝 키로 무엇을 써야 하나요?
당신과 수신자가 모두 가진 긴 텍스트 구절이라면 무엇이든 쓰세요. 고전적으로는 특정 책의 약속한 페이지입니다. 키는 적어도 메시지만큼 길어서 결코 반복할 필요가 없어야 합니다. 오직 글자만 사용되며, 대문자와 소문자는 동일하게 취급되므로, 키의 문장 부호나 띄어쓰기는 상관없습니다.
키가 메시지보다 짧으면 어떻게 되나요?
키가 처음으로 되감겨 반복하기 시작하는데, 이는 러닝 키 암호를 보통의 반복 키 Vigenère로 바꾸어 흔한 공격에 노출시킵니다. 이 도구는 재사용된 키 글자를 강조하여 정확히 어디서 그 일이 일어나는지 볼 수 있게 합니다. 진정한 러닝 키를 위해서는 언제나 암호화하려는 메시지만큼은 긴 텍스트를 쓰세요.
러닝 키와 오토키 암호의 차이는 무엇인가요?
둘 다 메시지만큼 긴 반복되지 않는 키를 쓰지만, 키가 어디서 오는지에서 다릅니다. 러닝 키 암호는 책 같은 공유된 외부 텍스트에서 키를 가져오는 반면, 오토키 암호는 짧은 시작 키워드 뒤에 평문 자체를 이어 붙여 키를 만듭니다. 오토키는 아주 작은 공유 비밀만 있으면 되지만, 러닝 키는 양쪽 당사자가 같은 키 텍스트를 지녀야 합니다.
러닝 키 암호는 책 암호와 같은 것인가요?
그것은 책 암호의 한 종류입니다. 긴 키 텍스트를 약속한 책에서 가져올 때, 러닝 키 암호는 흔히 책 암호라고 불립니다. 책 암호라는 이름은 단어를 페이지, 줄, 단어 번호로 대체하는 다른 방식에도 쓰이므로 그 용어는 둘 중 어느 쪽이든 가리킬 수 있지만, 여기서는 책 텍스트를 Vigenère 러닝 키로 쓰는 것을 가리킵니다.
이 암호는 공백과 숫자, 문장 부호를 바꾸나요?
아니요. 오직 26개의 글자만 변환됩니다. 공백과 문장 부호, 그리고 메시지의 어떤 숫자든 그대로 통과하며 키 글자를 소모하지 않으므로, 키는 글자들과 계속 정렬된 채 유지됩니다. 대소문자가 보존되어 출력은 원래 텍스트의 모양을 그대로 간직합니다.
러닝 키 암호는 어떻게 깨나요?
키가 결코 반복되지 않으므로 반복 키 도구가 통하지 않습니다. 대신 분석가는 메시지와 키가 모두 평범한 언어라는 사실을 이용합니다: 각 암호문 글자는 두 편향된 글자의 합이므로, 어느 한쪽 스트림에서 가능성 있는 단어를 알아맞혀 텍스트를 따라 미끄러뜨리면 연장할 수 있는 일치하는 조각이 드러납니다. 하나의 키 텍스트를 여러 메시지에 재사용하면 곧바로 깨집니다.
러닝 키 암호는 일회용 패드와 관련이 있나요?
네, 밀접하게 관련됩니다. 일회용 패드는 메시지만큼 긴 키를 같은 방식으로 더하지만, 키가 진정으로 무작위이고 결코 재사용되지 않을 것을 요구하며, 그것이 패드를 깨질 수 없게 만듭니다. 러닝 키는 무작위 글자 대신 구조화된 책 텍스트를 쓰는데, 바로 그 통계적 구조가 공격당하게 하는 요인이므로, 일회용 패드의 완전한 비밀성에는 미치지 못합니다.
러닝 키 암호는 안전하며, 제 텍스트가 업로드되나요?
반복 키 Vigenère보다는 강하지만 여전히 안전하지 않습니다: 자연 언어 키는 통계적으로 공격당할 수 있으므로, 진짜 비밀을 위해서는 AES 같은 현대 알고리즘을 쓰세요. 그와 무관하게 당신의 데이터는 여기서 비공개로 유지됩니다 — 모든 암호화와 복호화가 브라우저에서 일어나며, 공유 링크조차 당신의 텍스트를 URL의 해시 뒤 부분에 담아 두는데, 브라우저는 이 부분을 서버로 절대 전송하지 않습니다.

관련 도구

이런 편리한 도구도 함께 사용해 보세요

비제네르 암호

보퍼트 암호

그론스펠트 암호

오토키 암호

포르타 암호

트리테미우스 암호