Dreamhack

암호학 Stage 2

kchabin 2022. 7. 30. 23:55

고전 암호

고전암호 분류

고전 암호 : 컴퓨터 발명 이전 간단한 기계와 손 등으로 암복호화를 수행하던 암호.

 

치환(Substitution) : 평문의 문자를 다른 문자로 바꾸는 것.

전치(Transposition) : 평문 문자들의 위치를 바꾸는 것.

 

단순 : 치환 암호 / 전치 암호

복잡 : 치환 + 전치

 

치환 암호 = 단일 문자 치환 암호, 다중 문자 치환 암호

 

단일 문자 치환 암호(Monoalpahabetic Substitution Cipher)

평문의 각 문자를 약속된 다른 문자로 치환하는 암호.

'A'가 'B'로 치환된다면 다른 문자들은 'B'로 치환 불가능.

 

카이사르 암호(Caesar Cipher) : 평문의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 치환.

복호화 : 다시 원래 위치로 문자 밀기.

몇 칸 밀 것인지 송수신자간 사전 합의 필요.

 

키 : 알파벳을 밀어낸 횟수. -> 가능한 키의 갯수는 26개.(알파벳이 26자임)

 

키 공간(Key Space) : 가능한 모든 키의 집합

- 카이사르 암호에서 키 공간의 크기 = 26

합동식을 이용해 표현한 카이사르 암호

A부터 Z를 0부터 25까지 대응시키면, n글자씩 밀어내는 카이사르 암호를 합동식으로 표현할 수 있다.

오른쪽으로 3번 밀어내는 암호

춤추는 인형 암호 

사람 한 명이 글자 하나에 대응됨.

모든 알파벳을 서로 다른 기호와 무작위로 일대일 대응시켜 치환하면 키 공간의 크기가 26!이 된다. 이런 크기의 키 공간은 현대 컴퓨터로도 전부 탐색하기 어렵다. 

 

단점

-언어가 지닌 통계적 특성이 유지된다.

ex) 영어 문장에서 가장 많이 사용되는 문자는 'e'이므로 암호문에서 'b'가 가장 많이 등장한다면 b는 e가 치환된 것이라 추측할 수 있다.

 

난수표/코드북

책을 정하고 책의 페이지 x와 단어의 인덱스 y를 보내면 수신자는 책 x페이지의 y번째 단어를 확인하여 송신자의 메시지를 해독한다. -> 공작원에게 지령을 전달하는 목적으로도 사용됨.

암호 : 21537, 21529. 21406, 21402 

해독 : 215페이지 37, 29번째 단어./ 214페이지 6번째 2번째 단어.

메시지 = come to yellow roads

 

다중 문자 치환 암호 (Polyalphabetic Substitution Cipher)

평문의 한 문자가 암호문에서 여러 종류의 문자로 치환될 수 있다.

 

비제네르 암호(Vigenere Cipher)

미리 정해진 키워드를 통해 암복호화가 이루어진다.

 

- 'SKY'라는 키워드로 'DREAMHACK'을 비제네르 암호화하는 과정.

 

1. 비제네르 표에서 키의 각 문자인 'S', 'K', 'Y' 행을 고른다.

비제네르 표

2. 키워드를 반복하며 키워드의 각 행에서 평문의 문자에 대응되는 문자로 평문을 치환한다.

S는 D와 만나면 V 이런식으로.

 

비제네르 암호 합동식

 

C = 암호문

M = 평문

K = 키워드

Xi = X의 i번째 요소를 나타냄.

 

 

전치 암호

평문을 구성하는 문자들의 순서를 재배열하여 암호문을 만든다.

평문을 정해진 길이의 블록들로 나누고, 규칙을 적용하여 블록 안의 문자들을 재배치.

블록 길이 =3, 키(3,1,2)

 

스키테일 암호(Scytale Cipher)

나무봉을 이용한 암호. 

송신자는 종이 테이프를 나무봉에 감고, 세로로 메시지를 기입하여 암호문을 만든다. 종이 테이프를 풀어내면 순서가 뒤섞여 메시지를 읽을 수 없지만, 같은 나무봉을 가진 수신자는 테이프를 다시 나무봉에 감아서 이를 해석할 수 있다.

 

 

고전 암호 공격

 

키 탐색 공격(Exhaustive Key Search Attack)

평문과 암호문을 알 때, 키 공간을 전부 탐색하며 주어진 암호문과 같은 암호문을 생성하는 키를 찾는 방법.

- 굉장히 단순함.

- 키 공간의 크기가 작을 수록 빠름.

-> 카이사르 암호 취약함.

 

빈도수 분석(Frequency Analysis)

평문의 통계적 특성이 유지되는 단일 치환 암호.

알파벳의 'e' 

암호문이 어떤 언어로 구성되어 있어도 대상 언어의 특성을 아는 경우 시도해 볼 수 있다. 

 

다중 치환 암호는 통게적 특성이 사라지므로 빈도수 공격으로부터 비교적 안전하다. 

 

 


현대 암호

고전 암호 : 대칭키 암호 시스템(Symmetric Key Cryptosysytem)

송신자 키 = 수신자 키

ex) 알파벳 미는 칸 수(카이사르), 키워드(비제네르)

- 사전 키 공유 필수 <- 네트워크 도청 문제.

 

키 공유 알고리즘(Key-Sharing Algorithm) 

키 공유 과정을 도청해도, 공유되는 키는 알지 못함.

 

공개키 암호 시스템(Public Key Cryptosystem) = 비대칭키 암호 시스템(Asymmetric Cryptography)

송신자와 수신자의 키가 다른 시스템.

 

 

대칭키 / 비대칭키

 

Claude Shannon - 안전한 암호 시스템은 혼돈(Confusion)과 확산(Diffusion)의 성질을 만족해야 한다.

 

혼돈 

암호문에서 평문의 특성을 알아내기 힘든 성질.

 

단일 치환 암호로 평문을 두 번 암호화 -> 두 암호문은 서로 같다. -> 암호문을 생성한 평문이 같다고 추측 가능.

단일 치환 암호는 혼돈 성질을 만족하지 못한다.

 

확산

평문의 작은 변화 -> 암호문의 큰 변화

- 대부분의 고전 암호에선 찾아보기 힘든 성질. 

B 한글자만 바뀌었는데 암호문은 아예 달라졌다.

대칭키 암호 시스템

암호화와 복호화에 같은 키를 사용한다.

 

블록 암호(Block Cipher)

평문을 정해진 크기의 블록 단위로 암호화.

블록 크기가 4바이트라면 평문을 4바이트의 블록으로 쪼개어 각 블록마다 암호화한다.

패딩(Padding) : 평문 크기가 블록의 배수가 아니어서 균등하게 쪼개지지 않는 경우 평문뒤에 데이터를 추가하는 것.

평문이 블록 크기의 배수가 될 때까지 데이터를 추가한다. 

 

대표적인 블록 암호 : DES, AES

 

스트림 암호(Stream Cipher)

송신자와 수신자가 공유하는 데이터 스트림 생성하고 이를 평문에 XOR하는 암호.

C=P⊕X 

평문 : P, 암호문 : C, 스트림 : X

 

이므로 수신자는 로 암호문을 복호화할 수 있다.

 

C=PX 이므로 PXX가 됨.

XX=0 이므로 P⊕0이 되고, 0과 xor하면 P임.

 

스트림을 모르는 공격자는 암호문을 복호화할 수 없다. 

but

평문과 같은 길이의 스트림을 안전하게 공유할 수 있다면, 스트림을 공유하는 채널로 평문을 공유하면 된다 -> 암호화가 필요하지 않은 환경. 

 

시드(Seed) 

스트림 대신 공유. 사전에 합의된 함수의 인자로 넣어 스트림을 각자 생성함.

 

- 단순한 연산 -> 속도가 매우 빠름.

- 블록암호보다는 안전하지 않음 -> 임베디드 기기(연산 능력 부족)나 속도가 중요한 환경에서만 제한적 사용.

 

대칭키 암호 시스템의 장단점

 

장점

- 공개키 암호 시스템의 비해 속도가 빠르다.

 

단점

- 송신자와 수신자가 사전에 키를 교환해야 한다.

- 그룹 내에 여러 명이 있는 경우 두 사람마다 서로 다른 키를 생성해서 사용해야한다. 

N명의 사람, 총 N(N-1)/2개의 키 필요.

새로운 상대와 통신할 때마다 키 생성.

 

공개키 시스템에는 키 생성의 불편함이 없다.

대칭키 암호 시스템

 

공개키 암호 시스템

 

송신자 : 수신자의 공개키(Public Key)로 데이터 암호화 및 전송

수신자 : 비밀키(Private Key)로 복호화

 

공개키는 모두에게 오픈돼있으나 비밀키는 수신자 본인만 갖고 있기 때문에 비밀키가 없으면 암호문을 도청해도 복호화를 할 수 없다. 

 

우체통 비유

누구나 수신자에게 편지를 보낼 수 있지만, 편지를 꺼내서 보려면 수신자가 갖고있는 우체통 열쇠가 필요하다.

 

공개키 암호 시스템의 장단점

 

장점

- 대칭키 암호 시스템보다 키 개수 적음.

그룹 구성원들이 각자 공개키와 비밀키를 만든 후 공개키만 공개하면 됨. -> 키 2N개 필요.

- 새로운 상대와 통신할 때 새로 키 생성 필요 없음.

 

단점

- 다소 복잡한 연산이 필요하므로 속도가 느림.

- 대칭키 암호보다 긴 키를 사용해야 그와 같은 안전성 제공 가능.

 

AES - 192비트 이상 키 충분히 안전함.

RSA - 2048 비트 이상 키 권장

 

암호의 기능

 

1. 기밀성(Confidentiality)

허락된 사람만이 정보를 열람할 수 있게 하는 기능. 일반적으로 키를 갖고 있는 사람.

 

2. 무결성(Integrity)

송신자가 보낸 정보에 변조가 일어나지 않았음을 의미.

누군가 보내진 데이터를 가로채어 조작할 수 있고, 네트워크 상 문제로 일부 변경될 수도 있다.

무결성은 이러한 데이터의 변화가 발생하지 않았음을 보증하는 기능이다.

 

3. 인증(Authentication)

정보를 주고 받는 상대방의 신원을 확인하는 기능.

 

4. 부인 방지(Non-repudiation)

정보를 교환한 이후에 교환한 사실을 부인할 수 없게 하는 기능.

온라인 거래를 가능하게 한다.

 

'Dreamhack' 카테고리의 다른 글

암호학 Stage 4  (0) 2022.08.05
암호학 Stage 3  (0) 2022.08.04
암호학 Stage 1  (0) 2022.07.30
웹 해킹 : XSS-2  (0) 2022.07.25
웹 해킹 ClientSide: XSS  (0) 2022.07.25