자리를 바꾼다
암호화는 데이터를 정해진 사람만 되돌릴 수 있는 형태로 바꾸는 것입니다. 그러면 어떻게 바꿔야 할까요? 컴퓨터가 없던 시절 사람들이 찾아낸 길은 크게 둘이었습니다. 글자의 자리를 바꾸거나, 글자 자체를 다른 글자로 바꾸거나. 이 절에서는 자리를 바꾸는 쪽을 봅니다.
전치형 암호화 기법
「전치(轉置)」는 자리를 옮긴다는 뜻입니다. 글자는 그대로 두고 늘어놓는 차례만 뒤섞는 방식입니다. 그러니 암호문에 나오는 글자의 종류와 개수는 평문과 똑같습니다.
단순 전치 암호는 「몇 번째 글자를 어디로 옮길지」를 미리 정해 두고 그대로 옮깁니다. 그 차례가 키입니다.
| 암호문의 자리 | 1번째 | 2번째 | 3번째 | 4번째 |
|---|---|---|---|---|
| 평문의 몇 번째를 가져올까 (키) | 3 | 1 | 4 | 2 |
| 가져온 글자 | 시 | 정 | 간 | 보 |
평문 정보시간이 암호문 시정간보가 되었습니다. 되돌릴 때는 같은 키를 거꾸로 읽습니다. 암호문의 1번째가 평문의 3번째 자리로, 2번째가 평문의 1번째 자리로 돌아가는 식입니다.
키가 길수록 후보가 많아집니다
네 글자를 뒤섞는 차례는 모두 24가지입니다. 다섯 글자면 120가지, 여섯 글자면 720가지로 글자 수가 하나 늘 때마다 급격히 늘어납니다. 키가 될 수 있는 값이 많을수록 하나씩 다 해 보기가 어려워집니다.
레일 펜스 암호는 자리를 뒤섞는 또 다른 방법입니다. 글자를 지그재그로 두 줄에 나누어 쓴 다음, 윗줄을 먼저 읽고 아랫줄을 이어 읽습니다. 지그재그로 엮인 나무 울타리 모양을 닮았다고 해서 붙은 이름입니다. 이때 키는 몇 줄로 나눌 것인가입니다.
| 줄 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| 윗줄 | 암 | 는 | 미 | 다 | |||
| 아랫줄 | 호 | 재 | 있 |
윗줄을 읽으면 암는미다, 아랫줄을 읽으면 호재있입니다. 이어 붙이면 암호문은 암는미다호재있이 됩니다. 되돌릴 때는 글자 수를 세어 윗줄과 아랫줄에 몇 글자씩 들어갔는지 알아낸 뒤, 다시 지그재그로 읽습니다.
레일 펜스는 키가 아주 적습니다
키가 「몇 줄로 나눌 것인가」 하나뿐이라 고를 수 있는 값이 몇 가지 되지 않습니다. 열 글자짜리 평문이라면 두 줄부터 아홉 줄까지 여덟 가지밖에 없습니다. 규칙은 간단해서 쓰기 편하지만, 하나씩 다 해 보면 금방 끝나므로 키의 후보가 너무 적어 안전하다고 할 수 없습니다.
「오늘도좋은하루」를 레일 펜스 두 줄로 암호화해 보세요. 그리고 나온 암호문을 다시 평문으로 되돌려 확인해 보세요.
글자를 바꾼다
이번에는 다른 길입니다. 자리는 그대로 두고 글자 자체를 다른 글자로 갈아 끼웁니다. 이것을 치환형 암호화 기법이라고 합니다. 「치환(置換)」은 바꿔 놓는다는 뜻입니다.
가장 널리 알려진 것이 카이사르 암호입니다. 규칙은 아주 단순합니다. 모든 글자를 알파벳 차례에서 같은 칸수만큼 뒤로 밉니다. 이때 몇 칸을 밀 것인가가 키입니다. Z를 넘어가면 다시 A로 돌아옵니다.
암호문
—
키를 1부터 25까지 넣어 본 결과입니다. 뜻이 통하는 줄을 찾아보세요.
| 키 | 되돌려 본 결과 |
|---|
25줄이면 눈으로도 찾아집니다
「다 해 보기」를 눌러 보세요. 키를 몰라도 스물다섯 줄만 살펴보면 뜻이 통하는 줄이 보입니다. 손으로 해도 몇 분이면 되고, 컴퓨터라면 눈 깜짝할 사이입니다.
안전하려면 키가 될 수 있는 값이 아주 많아야 합니다. 카이사르 암호는 키의 후보가 스물다섯 개뿐이라 그 조건을 전혀 채우지 못합니다.
그래서 나온 것이 단일 치환 암호입니다. 카이사르처럼 모두 같은 칸수로 미는 대신, 글자마다 바뀔 글자를 제각각 정해 둔 표를 씁니다. 이 표 전체가 키입니다.
| 평문 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|
| 암호문 | Q | W | E | R | T | Y |
이 표대로라면 FACE는 YQET가 됩니다. 글자마다 미는 칸수가 제각각이라 카이사르처럼 「몇 칸 밀었나」를 알아내는 것으로는 풀 수 없습니다. 알파벳 스물여섯 글자를 짝지어 놓는 방법의 수가 어마어마하게 많아서 다 해 보기로는 감당이 안 됩니다.
그런데도 단일 치환 암호는 안전하지 않습니다
키의 후보가 많은데도 그렇습니다. 다 해 보기 말고 다른 길이 있기 때문입니다. 그 길이 무엇인지는 「왜 지금은 안 쓰는가」 절에서 봅니다. 여기서는 이것 하나만 기억합니다. 키의 후보가 많다는 것은 안전함의 필요조건이지 충분조건이 아닙니다.
시뮬레이터에 AAAA를 넣고 키를 바꿔 보세요. 암호문에서 눈에 띄는 것이 있나요? 이것이 「왜 지금은 안 쓰는가」 절의 약점과 어떻게 이어질지 짐작해 보세요.
두 갈래 비교하기
두 방식을 나란히 놓고 같은 평문에 적용해 봅시다. 무엇이 달라지는지 눈으로 보면 헷갈리지 않습니다.
전치형 — 자리만 바뀐다
아래 줄에 같은 색이 그대로 넷 다 있습니다. 놓인 차례만 달라졌습니다.
치환형 — 색만 바뀐다
자리는 그대로인데 색이 전부 다른 것으로 바뀌었습니다. 위 줄의 색은 하나도 남아 있지 않습니다.
| 보는 곳 | 전치형 | 치환형 |
|---|---|---|
| 무엇을 바꾸나 | 글자가 놓인 자리 | 글자 자체 |
| 키는 무엇인가 | 어떤 차례로 옮길지, 몇 줄로 나눌지 | 몇 칸 밀지, 어떤 표로 갈아 끼울지 |
| 쓰인 글자의 종류 | 평문과 똑같다 | 대개 평문과 달라진다 |
| 글자마다 나온 횟수 | 평문과 똑같다 | 글자 이름만 바뀌고 횟수는 그대로다 |
| 보기 | 단순 전치 암호, 레일 펜스 암호 | 카이사르 암호, 단일 치환 암호 |
구분하는 물음: 평문에 없던 글자가 암호문에 있는가
평문과 암호문을 나란히 놓고 어느 갈래인지 짐작하는 방법입니다. 전치형은 자리만 바꾸므로 평문에 없던 글자가 암호문에 나올 수 없습니다. 반대로 치환형은 글자를 갈아 끼우므로 대개 평문에 없던 글자가 나옵니다. 다만 치환형도 우연히 평문에 있던 글자끼리만 바뀔 수 있으므로, 평문에 없던 글자가 없다고 해서 전치형이라고 단정할 수는 없습니다.
표의 「글자마다 나온 횟수」 줄도 눈여겨보세요. 둘 다 「어떤 글자가 몇 번 나왔는가」를 흐트러뜨리지 못합니다. 전치형은 아예 그대로이고, 치환형은 글자 이름만 바뀔 뿐 횟수의 모양은 그대로 옮겨 갑니다. 「왜 지금은 안 쓰는가」 절의 약점이 바로 여기서 나옵니다.
두 갈래는 겹쳐 쓸 수도 있습니다. 먼저 글자를 갈아 끼운 다음 자리를 뒤섞으면 한쪽만 쓸 때보다 풀기 어려워집니다. 압축에서 반복 줄이기와 버리기를 겹쳐 쓰는 것과 같은 생각입니다.
평문 BANANA를 암호화한 결과가 ANABNA였습니다. 어느 갈래로 보는 것이 자연스러울까요? 구분하는 물음으로 답해 보세요.
왜 지금은 안 쓰는가
여기까지 본 네 가지 암호는 지금은 중요한 데이터를 지키는 데 쓰이지 않습니다. 수업에서 다루는 까닭은 암호화의 원리를 손으로 따라가 볼 수 있기 때문이지, 실제로 쓰라는 뜻이 아닙니다. 뚫리는 길이 둘 있습니다.
길 1 — 다 해 보기
키가 될 수 있는 값을 하나씩 전부 넣어 보는 방법입니다. 카이사르 암호는 스물다섯 번, 레일 펜스는 몇 번이면 끝납니다.
막는 길은 키의 후보를 아주 많게 만드는 것뿐입니다.
길 2 — 빈도 세기
어떤 글자가 몇 번 나왔는지 세어 보는 방법입니다. 다 해 보기가 통하지 않는 단일 치환 암호를 무너뜨리는 것이 이쪽입니다.
키의 후보가 아무리 많아도 소용이 없습니다.
빈도 세기가 왜 통할까요
어떤 언어든 글자마다 쓰이는 횟수가 고르지 않습니다. 영어 글을 길게 모아 세어 보면 E가 가장 많이 나오고, Q나 Z는 아주 드뭅니다.
단일 치환 암호는 글자를 갈아 끼우기만 하므로 「가장 많이 나온 글자」는 여전히 가장 많이 나옵니다. 이름표만 바뀌었을 뿐입니다. 그러니 암호문에서 가장 많이 나온 글자가 E일 가능성이 높고, 이런 짐작을 몇 개만 맞혀도 나머지가 줄줄이 풀립니다. 「두 갈래 비교하기」 표의 「글자마다 나온 횟수」 줄에서 「횟수는 그대로 옮겨 간다」고 한 것이 바로 이 약점입니다.
다만 조건이 있습니다. 암호문이 충분히 길어야 합니다. 다섯 글자짜리 암호문에서는 빈도를 셀 것이 없습니다. 그래서 빈도 세기는 긴 글에서 잘 통하는 방법입니다.
두 길의 뿌리는 규칙이 단순하다는 데 있습니다. 규칙이 단순하니 키의 후보가 적거나, 평문의 모양이 암호문에 그대로 비칩니다. 자리만 바꾸거나 이름만 갈아 끼우면, 원래 글의 생김새가 어딘가에 남습니다.
그러면 오늘날의 암호는 무엇이 다를까요
컴퓨터를 쓰면 사람이 손으로 할 수 없던 계산을 할 수 있습니다. 키의 후보를 사람이 셀 수 없을 만큼 늘릴 수 있고, 글자 하나가 아니라 여러 값을 한꺼번에 뒤섞어 평문의 모양이 남지 않게 할 수 있습니다. 이렇게 컴퓨터를 써서 만든 암호를 현대 암호화 기법이라고 합니다.
전치형 암호에는 빈도 세기가 그대로 통하지 않습니다. 왜 그럴까요? 그리고 전치형이라는 것을 알아챈 뒤에는 무엇을 해 보면 될까요?
핵심 정리
전치형 — 자리를 바꾼다
- 글자는 그대로 두고 늘어놓는 차례만 뒤섞는다.
- 단순 전치는 옮길 차례가, 레일 펜스는 몇 줄로 나눌지가 키다.
- 레일 펜스는 키의 후보가 아주 적어 안전하다고 할 수 없다.
치환형 — 글자를 바꾼다
- 자리는 그대로 두고 글자를 다른 글자로 갈아 끼운다.
- 카이사르는 몇 칸 밀지가, 단일 치환은 갈아 끼울 표 전체가 키다.
- 카이사르는 키의 후보가 스물다섯 개뿐이라 다 해 보기로 곧 뚫린다.
두 갈래 구분하기
- 평문에 없던 글자가 암호문에 있으면 전치형일 수 없다. 그런 글자가 없고 같은 글자가 같은 횟수로 차례만 바뀌었으면 전치형으로 본다.
- 둘 다 「어떤 글자가 몇 번 나왔는가」의 모양은 흐트러뜨리지 못한다.
- 두 갈래는 겹쳐 쓸 수 있고, 그러면 풀기가 더 어려워진다.
뚫리는 두 길
- 다 해 보기는 키의 후보가 적을 때 통한다.
- 빈도 세기는 키의 후보가 많아도 통한다. 다만 암호문이 충분히 길어야 한다.
- 키의 후보가 많다는 것은 안전함의 필요조건이지 충분조건이 아니다.
확인 퀴즈
배운 내용을 확인해 봅시다.
카이사르 암호로 CAT을 키 2로 암호화하면?
평문 STOP의 암호문이 POST였습니다. 어느 갈래로 보는 것이 가장 알맞을까요?
단일 치환 암호는 키의 후보가 어마어마하게 많은데도 안전하지 않습니다. 왜일까요?
빈도 세기가 잘 통하지 않는 경우는?