본문 바로가기

별걸다하는 IT/기타IT

[암호학] 카이사르 암호법, 시저 암호법, 가장 오래된 고전 암호법

반응형

안녕하세요!! 이번에는 암호학 관련된 글로 찾아왔어요 ㅎㅎ

오늘 살펴볼 암호법은 가장 오래된 암호법 중 하나로 꼽히면서~~~~ 가장 간단한~~ 암호학의 시초라 할 수 있는 시저 암호법입니다.

시저 암호 (Caesar Cipher)

시저 암호는 카이사르 암호라고도 해요 ㅎㅎ 그 역사적으로 유명한 카이사르가 암호학에도 획을 긋고 갔네요 ㅎㅎ

시저랑 카이사르랑 뭔 상관이냐 ㅎㅎ

카이사르의 이름은 라틴어로 'Gaius Iulius Caesar' 이렇게 작성됩니다. 뒤에 보면 '시저'라고 읽히죠?ㅎㅎ 즉 카이사르 이름에서 딴 네이밍입니다.

카이스라는 기원전 100년전 사람이야요

기원 후 2세기경에 세토니우스가 시저의 생애라는 책을 썼는데 그 가운데 다음과 같은 글이 있었다고 합니다.

시저가 키케로나 친지들에게 비밀리에 편지를 보내고자 할 때  사용한 암호가 있다. 시저는 다른 사람들이 알아보지 못하도록 문자들을 다른 문자들로 치환하였다. 다른  사람이 암호를 풀어 내용을 파악하려면 각 문자대신 알파벳 순서로  보았을 때 그 문자부터 시작하여 4번째 앞에 오는 문자로, 즉 예를 들어 D는 A로 바꾸어야 했다.

시저 암호화, 복호화 방법?

 

 

알파벳을 암호화 할 때 썼는데요. 가장 오래된만큼 엄청 간단합니다. 3글자씩 밀려서 쓰는거예요. 즉 평행이동입니다.

 

무슨 말이냐? 알파벳이 ABCDEFG...이런식으로 가니까 A는 3글자 뒤인 B,C,D! D로 변경이 되는겁니다.

출처: https://inventwithpython.com/chapter14.html

첫 번째 라인은, A부터 Z까지 알파벳을 나열해놨는데 이게 암호화하기 전의 평문이라고 생각합시다!

그리고 그 밑에 라인은 알파벳을 시저방법으로 암호화한 결과물이예요 ㅎㅎ

그냥 3칸씩 뒤로 미룬거밖에 읍음... 여기서 암호를 도와주는 키는 3이 되겠죠 ㅎㅎ

키 공간

어떤 암호로 사용할 수 있는 모든 키의 집합을 키 공간이라고 합니다. 키는 알파벳과 일대일 대응 되므로 가능한 개수는 총 26개가 될거예요. 그 이후부터는 순환이니까!! 

키 공간은 1부터 26이 되고 키 공간의 크기는 26이 됩니다. ㅎㅎㅎ 

 

복호화 Decrypt

그럼 반대로 이 암호를 푸는 복호방법은?

세칸씩 떙기면 되겠죠???ㅎㅎ그러므로 복호화때의 키는 -3..

만약 암호화된 문장이 ABCDEF이고 시저 방식으로 암호화되어있는거라면

세칸씩 땡겨서 푸는건 XYZABC가 되겠죠 ㅎㅎ

 

순환하기 때문에 수식으로는 

이렇게 표현할 수 있습니다.

 

카이사르 암호법으로 'HELLO'를 암호화하면,

'KHOOR'이 될거예요. ㅎㅎ 이렇게 편지를 보내면 편지받는 사람은 -3칸 해서 'HELLO'를 얻어내는거죠 

이런 시트지를 이용하면 암산없이 쉽게 치환 가능해요

 

이렇게 일정 규칙에 의해 특정 문자를 바꾸는 암호법을 치환방법이라고 하고 저렇게 순환되기 떄문에 순환암호라고도 합니다.

 

▼잠깐? 왜 3칸일까요?

아무 이유 없대요 ㅎㅎ 그냥 시저가 그게 편했답니다.ㅎㅎ 10으로 하던 5로 하던 쌍방 합의만 있으면 상관 없겠죠 ㅎㅎ 그냥 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식 자체를 시저 암호라고 합니다. 

 

보안성과 실질 효과

엄청 깨기 쉽겠죠. 걍 알파벳을 3자리만 땡기면 암호가 풀리는데.. 근데 이런 간단하고 초심플한 암호방식이 실제로 효과가 있었나, 우리가 보기엔 쉬워보이지만 기원 100년전 상상도 하기 힘든 과거 당시로서는 아무나 쉽게 해독할 수 없었다고 합니다. (물론 오늘날에는 현실적이지 않은 방법이죠 ㅎㅎ, 이동 크기를 3에서 어떤 값으로 바꾼다해도, 알파벳 가능한 25자리 이동값을 모두 때려넣어보면 언젠간 풀리니까요 ㅎㅎ) 하지만 당시 그 시절 사람들에게는 암호라는 개념 자체가 익숙치 않았어요 ㅎㅎ

 

단점

카이사르암호법에는 큰 단점이 있는데 바로 중복되는 단어가 나열될 경우 매우 유추하기 쉬워진다는 겁니다.

예를 들어 KILL의 경우 NLOO인데  이 경우 단어가 4자리면서도 뒤에 같은 알파벳이 2번 나타난다는것을 유추할 수 있습니다.

따라서 kill, call, sell, yell 등 올 수 있는 단어가 한정되어 있죠. 또,  즉 L은 O보다 3글자 뒤에 있는 숫자라는 걸 알 수 있어요. (순서가 LMNO이니까) 그럼 call, sell, yell등은 다 탈락이죠.. 알아내기가 매우 쉬워집니다.

이러한 이유로 암호화를 할때 반복되는 알파벳은 생략하기도 했습니다. NLOO대신 NLO로 암호화하는 것이죠.

ㅎㅎ 아이러니하게 카이사르는 이 암호를 해독하지 못해 암살당했다고 합니다.

구현법

시저를 구현하는건 매우 쉬워요 ㅎㅎ 알파벳은 26자이고 이 룰에서 순환된다는것만 알면!

주의해야할 점은 순환이예요 ㅎㅎ a-z가 끝이 아니라 abcd...xyzabcd...이렇게 이어간다는거.

(Z를 3칸 뒤로 하면 C가 된다는 얘기죠 ㅎㅎ) 이를 해결하려면 모듈 연산자 방식이 필요하겠죠?

 

n이 움직이는 키가 된다면 암호화 방식은 위와 같은 공식으로 표현할 수 있을 거예요 ㅎㅎ

 

이걸 암호 공식으로 표현하자면

이렇게 정리할 수 있습니다.

보통 암호공식을 쓸 때 저렇게 쓰는데 E는 Encrypt로 암호화하는걸, D는 Decrypt로 복호화하는 수식을 의미합니다.

k는 key, p는 평문, c는 암호화된 암호문을 의미해요

c = E(k,p) : 키와 평문을 암호화하면 암호문 c가 나온다! 라는 수식이 되는거죠 ㅎㅎ

 

무튼 시저암호법의 자세한 전체 코드는 밑에 연습문제들을 참고하면 확인할 수 있습니다.

참고

시저 관련된 알고리즘 문제들이야요 ㅎㅎ

프로그래머스 코딩테스트 연습>연습문제>시저 암호

 

[프로그래머스] 시저 암호 문제 및 해설 (C, C++, JAVA 자바)

오랜만에 돌아온 프로그래머스 문제 풀이예요 ㅎㅎ [Level 1] 시저 암호 문제 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 AB는 1만..

jhnyang.tistory.com

백준 알고리즘 1893번

시간 나면 한번 풀어보는 것도..

오늘은 여기까지입니다! 도움되셨다면, 공감, 보답광고, 덧글 등은 열심히 작성하는 도움자에게 힘이됩니다 :)

오늘도 좋은하루보내세요

반응형