먼저 암호학에서 쓰이는 기본 용어부터 살펴보자.
plaintext | 평문 | |
cipertext | 암호문 | |
cipher | 알고리즘 | |
key | 비밀번호 | |
encipher (encrypt) | 암호화 | |
decipher (decrypt) | 복호화 | |
cryptography | 암호학 | |
cryptanalysis | key를 모르는 상태에서 key를 알아내는 것 | |
cryptology | cryptography + cryptanalysis |
암호학이란, 암호화/복호화를 시키는 것 뿐만 아닌 key를 알아내는 것까지 포함한 cryptology를 알아가는 학문이 되겠다.
암호화와 복호화는 위와 같이 진행된다.
평문 X와 암호문 Y, 키값 K가 있을 때, 암호화 알고리즘 E에 K, X를 대입시키면 암호문 Y가 반환된다.
반대로 복호화 알고리즘 D에 Y와 K를 대입시키면 평문 X가 반환된다.
복호화할 때 필요한 K값은 보안 채널에 의해 전송된다.
암호화 하는 방법에는 간단하게, 치환(substitution)과 순서를 바꾸는(transposition) 방법이 있다. 이 방법들을 섞어서(product) 사용하게 된다.
키에는 single-key와 two-key가 있는데, single-key는 암호화와 복호화에 같은 key를 사용한다.
two-key는 private key와 public key로 나뉘어 있다. 정보를 암호화 하기 위해서는 public key가 사용되고, 복호화하기 위해서는 private key가 필요하다.
암호화 단위로는 block 단위 (1block이 64bit일 때, 64bit), stream 단위 (n bit, 1bit도 가능) 가 있다.
암호화 시스템의 안전성에 대한 용어는 Unconditional Security와 Computational Security가 있다.
Unconditional Security는 얼마나 좋은 컴퓨터 성능과 시간이 있든 절대로 해독될 수 없다. one-time-pad가 그 예시로, 한 번 사용된 key는 절대로 다시 사용되지 않는다. 즉 모든 key는 1회용이다. 이 방법은 현실적으로 불가능하다.
Computation Security는 제한된 컴퓨터 자원과 시간을 고려했을 때 해독될 수 없음을 의미한다. 현실적으로 가능한 방법이다.
암호화 알고리즘은 숨길 수 없다. 바이너리로 저장된 프로그램 또한 리버스 엔지니어링으로 소스코드를 얻어낼 수 있기 때문이다. 따라서 key를 숨기는 것이 중요하다. 그러한 key를 추정하는 일반적인 방법으로는 2가지가 있다.
- cryptanalytic attack : 정보를 바탕으로 key를 추정한다.
이 방법에서는 여러가지 환경에 따라 난이도가 나뉜다. 아래로 갈수록 더 좋은 환경이다.
1. 알고리즘과 암호문만 아는 경우
2. 몇몇의 평문과 암호문의 대치를 아는 경우
3. 선택한 평문에 대한 암호문을 아는 경우
4. 선택한 암호문에 대한 평문을 아는 경우
5. 선택한 평문, 암호문에 대한 암호문, 평문을 아는 경우
가장 좋은 환경인 5번에서도 현대의 암호화 알고리즘에서는 key를 알아내기 어렵다.
- brute-force attack : 가능한 모든 key를 탐색한다.
key의 크기가 늘어날 수록 시간이 매우 오래 걸리게 된다. key가 32bit라면 한 대의 컴퓨터로 35.8분밖에 안걸리는 반면, 128bit라면 지구가 몇백번 다시 태어나도 모든 key를 탐색할 수 없다.
'학교강의필기장 > 암호학' 카테고리의 다른 글
5. Random Number (2) | 2023.10.16 |
---|---|
4. DES, block/stream cipher mode (0) | 2023.10.15 |
3. AES (0) | 2023.10.12 |
2. 모듈러 연산 (1) | 2023.10.10 |
1. 고전 암호화 기법들 (0) | 2023.09.07 |