오늘부터 다양한 암호화 체계에 관해 정리해 보겠습니다.
저도 배우는 입장이기 때문에 제 말을 그대로 믿지 마시고 교차 검증해서 옳은 정보만 잘 뽑아서 사용하시길 바랍니다.
우리는 수많은 곳에서 암호를 부지불식 중에 사용합니다. 매일매일 하는 인터넷 사이트 로그인, 암호화폐, 파일 암호화,
공인인증서, SSL(보안 연결)에서 사용되는 것이 바로 RSA, AES를 비롯한 암호화 알고리즘입니다.
우리는 종종 암호화 기술들(RSA, AES)등에 대해 접하며 양자 컴퓨터가 등장할 시 전 세계 보안이 뚫린다 등의 소식을
듣기도 합니다.
정말 이것이 사실인지, 그리고 또 이런 기술들이 무엇인지 알아보기 위해 오늘은 가장 기초적이고 오래된
고전 암호 체계에 대해 알아보려고 합니다.
1. 카이사르/시저 암호
*Caesar의 발음은 영어권에서 시저, 라틴에 가까운 발음으로는 카이사르인데 국립국어원 인정 표기인 '카이사르'로 통칭합니다.
카이사르 암호는 정말 기초 중 기초인 암호입니다. 로마의 카이사르가 최초로 사용했다고 흔히 알려져 있는데 사실 그가 사용해서 유명해진 것이라고 합니다.
카이사르 암호는 너무나도 단순합니다. A를 쓸 일이 있을 때 B나 C를, B를 쓸 일이 있을 때 C나 D를 쓰는 등 알파벳을 몇 칸 뒤로 민 것(shift)입니다.
몇 칸을 밀지는 사용자가 결정하는데, 이 몇 칸을 키(key)라고 합니다.
예시) 키:3
이 경우에 평문(암호화되지 않은 문구) "Hello World"가 "Khoor Zruog"가 됩니다.
ex) MIND THE GAP(key:7)
--> TPUK AOL NHW
이런 카이사르 암호화 같이 하나의 알파벳이 다른 알파벳에 1대 1 대응되는 암호를 '단일 치환'이라고 합니다.
이제 카이사르 암호를 복호화하는 방법에 대해 알아보겠습니다,
CASE 1:key값이 있을 때
사실 너무 당연한 것이긴 하지만 key값이 있으면 암호화 과정과 반대로 진행하면 됩니다.
위 그림은 원래 암호화를 설명하는 그림이지만 어떻게 보면 key:3으로 암호화한 것을 복호화하는 그림으로 볼 수도 있습니다. 위처럼 A--> D로 암호화된 것을 다시 반대로 D--> A, E--> B 이런 식으로 하면 됩니다.
어떻게 보면 key:3으로 암호화한 것을 복호화하는 것은 그것을 다시 key:23으로 암호화(?)한다고 볼 수도 있습니다.
ex) RUBK ZXASVY NGZK(key:6)
--> LOVE TRUMPS HATE
CASE 2:key를 모를 때
i) 브루트 포스
브루트 포스는 모든 경우를 다 대입해 보는 방법으로 용어에 대해서는 추가적으로 다루겠습니다.
카이사르 암호의 키가 25개(알파벳의 수-(자기 자신))밖에 있을 수 없기 때문에 모든 경우를 살펴보는 방법입니다.
IQ CYCA라는 암호문이 있다고 칩시다.
키=1일 때 HP BXBZ
키=2일 때 GO AWAY
키=3일 때 FN ZVZW
키=4일 때 EM YUYV
등등 키=25까지 있을 텐데 이중 말이 되는 소리는 GO AWAY 뿐입니다. 이를 통해 손쉽게 해독이 가능합니다.
하지만 이 방법도 물론 컴퓨터로 하면 금방 되지만 그래도 뭔가 조금 무식해 보이기 때문에 다음 방법을 소개해 보겠습니다.
(ii) 빈도 분석
영어든 한국어든 아랍어든 표음 문자의 알파벳에는 자주 쓰이는 음절이 있습니다. 이를 이용해 암호문에서 가장 자주 등장하는 문자를 해당 알파벳에서 가장 많이 사용되는 음절로 치환하면 대략적으로 해독이 쉬워집니다.
위 그래프에서 알 수 있듯이 영어에서 가장 많이 쓰이는 음절은 e, t, a, o순이라고 합니다. 그러면 가장 많이 쓰이는 문자를 e로 치환해서 복호화를 시도해보도록 하겠습니다.
Lq pb brxqjhu dqg pruh yxoqhudeoh bhduv pb idwkhu jdyh ph vrph dgylfh wkdw L'yh ehhq wxuqlqj ryhu lq pb plqg hyhu vlqfh. Zkhqhyhu brx ihho olnh fulwlflclqj dqbrqh, kh wrog ph, mxvw uhphpehu wkdw doo wkh shrsoh lq wklv zruog kdyhq'w kdg wkh dgydqwdjhv wkdw brx'yh kdg.
이 문단의 알파벳 빈도수는 다음과 같습니다.
h: 36 q: 17 d: 17 w: 16 u: 13 k: 12 l: 12
여기서 h가 제일 많으므로 h를 e로 치환, 즉 key값을 3으로 잡고 복호화하면 다음이 나옵니다.
In my younger and more vulnerable years my father gave me some advice that I've been turning over in my mind ever since. Whenever you feel like criticizing anyone, he told me, just remember that all the people in this world haven't had the advantages that you've had.
이렇게 복호화됨으로써 위대한 개츠비 첫 문장이 됨을 알 수 있습니다.
물론, 모든 문장이 빈도수 순위를 따르지 않기 때문에 성공률이 100%는 아니지만, 어느 정도의 문장들은 브루트 포스보다 쉽게 복호화할 수 있습니다. 통계적으로 길이가 길수록 성공률이 높을 것입니다.
온라인 카이사르 암호 도구, 알파벳 빈도수 계산기를 이용해서 다음 문구를 해독해 볼 수 있습니다.
ex) V
V unir n qernz gung zl sbhe yvggyr puvyqera jvyy bar qnl yvir va n angvba jurer gurl jvyy abg or whqtrq ol gur pbybe bs gurve fxva, ohg ol gur pbagrag bs gurve punenpgre.
이를 통해 r이 40개임으로 보아 r이 e라고 추측해 보면 key값은 13 임을 알 수 있습니다.
key를 13으로 해독해 보면 마틴 루터 킹의 연설 중반 문구가 나옴을 알 수 있습니다.
I have a dream that one day even the state of Mississippi, a state sweltering with the heat of injustice, sweltering with the heat of oppression, will be transformed into an oasis of freedom and justice. I have a dream that my four little children will one day live in a nation where they will not be judged by the color of their skin, but by the content of their character. |
2. 스키테일
또 다른 간단한 고전 암호체계의 하나는 스키 테일입니다.
이 암호도 기원전에 고안된 암호로 특정 암호가 적혀 있는 띠를 특정 모양의 나무(Scytale)에 감으면 평문이 드러나는 방식입니다. 사실 몇 칸씩 띄어 읽으면 되는 것을 편하게 하려고 나무에 감는다고도 볼 수 있습니다.
ex)가혀일야내로더애오므죠지베됴마우져세어 미요
이걸 그냥 보면 말도 안 되는 소리지만 만약에 삼각기둥 모양의 나무에 감아 보면(2칸 띄어 보면) 이렇게 됩니다.
가혀일야내로더애오므죠지베됴마우져세어미요
이렇게 일로오지마세요 라는 문장이 된다는 것을 알 수 있습니다. 이처럼 해당 key(2칸)이 있으면 쉽게 해독이 가능합니다.
이 스키테일 암호도 카이사르 암호처럼 해독이 매우 쉽습니다. 몇 칸씩 띄어 읽는 것을 1부터 시작해서 계속해봐서 말이 되는 것을 찾으면 됩니다.
ex) CYSJDOIEUWLENFBDUEJD
CYSJDOIEUWLENFBDUEJD
+)하지만 스키테일을 만들때 간격이 일정하지 않게 만드면 어떻게 될까요?(한쪽의 두께가 더 두꺼워서 3칸-5칸-4칸-7칸 이런 식으로 띄어 읽게)
ex)DHOJUGHBNCTYAUHJIMTIOKJ
DHOJUGHBNCTYAUHJIMTIOKJ
-->간격을 다양하게 함으로서 풀기 다소 어려운 암호가 됩니다.
이렇게 하면 분명히 해독 난이도가 올라가긴 하겠지만 그래도 스키테일 암호는 풀기 쉬운 고전 암호에 남게 됩니다.
다음부터는 그래도 예전 암호인 프랑스의 비즈네르 암호에 대해 알아보고 그 뒤로부터든 현대 암호의 꽃인 RSA, AES 등의 암호 체계에 대해 알아보도록 하겠습니다.
개선할 점/잘못된 점은 댓글로 달아주시면 감사하겠습니다.