CIDY
[Cryptography] stage2_고전 암호 본문
*고전 암호
고성능 연산 장치 발명 이전, 간단한 기계와 손으로 암호화/복호화 하던 암호를 말한다. 고전 암호는 치환 & 전치의 방법으로 설계된다.
치환: 평문 -> 다른 문자, 전치: 평문 문자 위치 바꿈
단순한 고전 암호는 둘 중 하나의 원리만을 사용하고(치환 암호, 전치 암호), 복잡한 고전 암호의 경우 두 원리를 모두 이용한다. 치환 암호는 다시 단일 문자 치환 암호/ 다중 문자 치환 암호로 나뉜다.
*단일 문자 치환 암호
평문의 각 문자를 약속된 다른 문자로 치환하는 암호. -> ex: 카이사르 암호
카이사르 암호는 평문의 각 알파벳을 일정 거리만큼 밀어서 다른 알파벳으로 치환하는 암호이다. 복호화 시에는 다시 원래 위치로 밀면 됨. -> 송수신자 간 몇 칸을 밀 것인지에 대한 사전 합의 필요
밀어낸 횟수 = 키 라고 하면, 가능한 키의 개수는 26개이다. (알파벳) -> 카이사르 암호에서의 키 공간의 크기는 26
알파벳 A ~ Z를 각각 0~ 25에 대응시키면, n글자씩 밀어내는 카이사르 암호를 다음과 같은 수식으로 표현할 수 있다.
키 공간의 크기가 작은 암호의 경우 복호화가 쉬워 암호로서의 기능성이 떨어진다. -> 조금 더 복잡한 단일 치환암호로는 셜록 홈즈에 나오는 춤추는 인형 암호가 나온다. (셜록 홈즈_춤추는 사람에 나온다...)
이 경우 사람 한 명이 글자 하나에 대응된다. -> 카이사르 암호의 경우 순서가 보장되기에 키 공간의 크기가 작았지만, 이 암호의 경우 모든 알파벳을 서로 다른 기호와 무작위 일대일 대응 시키기 때문에 -> 키 공간의 크기는 26! 이 된다. -> 매우 큼
이처럼 꽤 복잡해보이는 단일 문자 치환 암호의 경우에도 언어의 통계적 특성이 그대로 유지된다는 허점(?)이 있다. ex: 영어에서 통계적으로 가장 많이 쓰이는 알파벳은 e. -> 이러한 특성을 이용하면 영문 단일 치환 암호문의 해독은 그리 어렵지 않다고..
*다중 문자 치환 암호
평문의 한 문자가 암호문에서 여러 문자로 치환될 수 있는 암호이다. 비제네르 암호에서 암호화와 복호화는 미리 정해진 키워드를 통해 이루어진다.
위와 같은 비제네르 표가 있다고 할 때, ABCDEF를 암호화한다고 해 보자. 미리 정해진 키워드는 SKY이다.
S K Y S K Y
A B C D E F
이렇게 대응되는 상황인데,
A -> S
B -> L
C -> A
D -> V
E -> O
F -> D
이런 식으로 암호화되는 것이다.
Ci = Ek(Mi) = (Mi+Ki) mod26
Mi= Dk(Ci) = (Ci−Ki) mod26
마찬가지로 A ~ Z를 0 ~ 25에 대응시키면 위와 같은 합동식으로 표현할 수 있다. (C는 암호문, M은 평문, K는 키워드)
*전치 암호
평문을 구성하는 문자들의 순서를 재배열하는 암호이다. 평문을 정해진 길이들의 블록으로 나눈 뒤, 지정된 규칙에 따라 블록 내 문자들을 재배치한다.
블록 길이가 3이고, 키가 (3, 1, 2)일 때, ABCD EFGHI는 다음과 같이 암호화된다.
ABC | D EF | GHI
CAB | F DE | IGH
전치 암호의 대표적인 예시로는 스키테일 암호가 있다. -> 나무 봉에 얇고 긴 종이를 감아 세로로 글을 쓴 뒤, 풀면 순서가 뒤섞임 -> 같은 굵기의 나무 막대가 있어야 해석 가능
*고전 암호 공격
전수 키 탐색 방법, 빈도수 분석 방법이 있다.
전수 키 탐색 공격: 평문과 암호문을 알 때, 키 공간을 전부 탐색해 주어진 암호문과 같은 암호문을 생성하는 키를 찾는 방법이다. -> 키 공간의 크기가 작다면 빠르게 키를 찾을 수 있음
빈도수 분석 공격: 단일 치환 암호의 경우 평문 - 암호문의 각 문자가 일대일 대응 관계에 있기 때문에 평문의 통계적 특성이 암호문에서도 그대로 유지된다. -> 영문에서의 알파벳 사용 빈도 통계를 그대로 적용 가능. -> 이러한 추측을 기반으로 공격 가능
(* 다중 치환 암호의 경우 통계적 특성이 사라지기 때문에 위 공격으로부터 비교적 안전)
'Hack > DreamHack(로드맵)' 카테고리의 다른 글
[Cryptography] stage3_블록암호: AES (0) | 2022.07.20 |
---|---|
[Cryptography] stage2_현대 암호 (0) | 2022.07.20 |
[Cryptography] stage1_intro (0) | 2022.07.19 |
[Reverse_Engineering] stage2_Binary&Analysis (0) | 2022.07.16 |
[System_Hacking] AD: stage6_문제풀이(Bypass IO_validate_vtable) (0) | 2022.07.15 |