안녕하세요!! 이번에는 암호학 관련된 글로 찾아왔어요 ㅎㅎ
오늘 살펴볼 암호법은 가장 오래된 암호법 중 하나로 꼽히면서~~~~ 가장 간단한~~ 암호학의 시초라 할 수 있는 시저 암호법입니다.
시저 암호 (Caesar Cipher)
시저 암호는 카이사르 암호라고도 해요 ㅎㅎ 그 역사적으로 유명한 카이사르가 암호학에도 획을 긋고 갔네요 ㅎㅎ
시저랑 카이사르랑 뭔 상관이냐 ㅎㅎ
카이사르의 이름은 라틴어로 'Gaius Iulius Caesar' 이렇게 작성됩니다. 뒤에 보면 '시저'라고 읽히죠?ㅎㅎ 즉 카이사르 이름에서 딴 네이밍입니다.
기원 후 2세기경에 세토니우스가 시저의 생애라는 책을 썼는데 그 가운데 다음과 같은 글이 있었다고 합니다.
시저가 키케로나 친지들에게 비밀리에 편지를 보내고자 할 때 사용한 암호가 있다. 시저는 다른 사람들이 알아보지 못하도록 문자들을 다른 문자들로 치환하였다. 다른 사람이 암호를 풀어 내용을 파악하려면 각 문자대신 알파벳 순서로 보았을 때 그 문자부터 시작하여 4번째 앞에 오는 문자로, 즉 예를 들어 D는 A로 바꾸어야 했다.
시저 암호화, 복호화 방법?
알파벳을 암호화 할 때 썼는데요. 가장 오래된만큼 엄청 간단합니다. 3글자씩 밀려서 쓰는거예요. 즉 평행이동입니다.
무슨 말이냐? 알파벳이 ABCDEFG...이런식으로 가니까 A는 3글자 뒤인 B,C,D! D로 변경이 되는겁니다.
첫 번째 라인은, 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가 나온다! 라는 수식이 되는거죠 ㅎㅎ
무튼 시저암호법의 자세한 전체 코드는 밑에 연습문제들을 참고하면 확인할 수 있습니다.
참고
시저 관련된 알고리즘 문제들이야요 ㅎㅎ
프로그래머스 코딩테스트 연습>연습문제>시저 암호
백준 알고리즘 1893번
시간 나면 한번 풀어보는 것도..
이어.. 비즈네르 암호에 대해 궁금한 분들은 아래 링크 참고해주세요
▶ 2022.11.30 - [별걸다하는 IT/기타IT] - [암호학] 비즈네르 암호법, 비제네르(Vigenere) 고전 암호화 방식과 카사스키 해독
오늘은 여기까지입니다! 도움되셨다면, 공감, 보답광고, 덧글 등은 열심히 작성하는 도움자에게 힘이됩니다 :)
오늘도 좋은하루보내세요
'별걸다하는 IT > 기타IT' 카테고리의 다른 글
[보안 상식] 스캠(scam)이란? 로맨스 스캠, 비즈니스 스캠, 신용 사기 (0) | 2019.11.03 |
---|---|
안드로이드 핸드폰 저장 공간 관리하기. 모바일 내 파일, 기타파일 정리하기, SD카드로 옮기기 (4) | 2019.10.28 |
.zi파일 확장자, ZI파일 무엇이고 어떻게 압축을 푸는가? ex파일? (0) | 2019.10.15 |
[html/css] element 또는 요소(div) 가운데 정렬시키는 몇 가지 방법 (position, margin, flex 등등) (12) | 2019.10.09 |
중앙처리장치란? CPU란? central processing unit, 제어장치, 연산장치, 레지스터 (0) | 2019.10.07 |
최신 댓글