dreamhack [현대 암호] 정리
https://dreamhack.io/lecture/courses/71 를 바탕으로 작성했습니다.
현대 암호
현대 암호의 암호 기술들과 이들이 제공하는 기능들을 개략적으로 살펴봅니다.
dreamhack.io
1. 들어가며
서론
- 대칭키 암호 시스템(Symmetric Key Cryptosystem)
: 송신자와 수신자가 같은 키를 공유해야하는 암호시스템 ( * 사전에 서로 키를 공유해야 함)
- 비대칭키 암호 시스템(공개키 암호 시스템 : Public Key Cryptosystem)
: 송신자와 수신자가 서로 다른 키를 사용하는 시스템
키 공유 알고리즘(Key-Sharing Algorithm)
: 외부인이 키가 공유되는 과정을 도청해도, 공유되는 키는 알지 못하게 하는 것
( 현대 네트워크는 도청에 취약해 키를 평문으로 공유하긴 부적절함)
2. 현대 암호
혼돈과 확산
Claude Shannon " 안전한 암호 시스템은 혼돈과 확산의 성질을 만족해야 한다"
혼돈
평문의 특성을 알아내기 힘든 성질
확산
평문의 작은 변화가 암호문의 큰 변화로 이어지는 성질
대칭키 암호 시스템
: 암호화와 복호화에 같은 키를 사용하는 암호 시스템 (1)블록암호 (2)스트림암호
블록 암호
평문을 정해진 크기의 블록 단위로 암호화하는 암호
ex) 블록의 크키가 4바이트라면 평문을 4바이트의 블록으로 쪼개서 각 블록마다 암호화를 진행한다
* 평문의 크기가 블록 크기의 배수가 아니어서 블록으로 균등하게 쪼갤 수 없다면, '패딩'을 먼저 진행
패딩(Padding)
: 평문뒤에 데이터를 추가. 평문이 블록 크기의 배수가 될 때까지 데이터를 추가함. 대표적으로 DES, AES
스트림 암호 (Stream Cipher)
송신자와 수신자가 공유하는 데이터 스트림을 생성하고 이를 평문에 XOR하는 암호.
P : 평문 , C : 암호문 , X : 스트림 / C=P⊕X
X⊕X=0 를 이용해 C⊕X=P⊕X⊕X=P 로 암호문을 복호화할 수 있음
매번 송신자와 수신자가 평문 길이 만큼의 스트림을 공유한다면, 스트림을 모르는 공격자는 복호화할 수 없다
but
스트림을 안전하게 공유할 수 있는 건 암호화가 필요하지 않은 환경임 (스트림 공유채널로 평문 공유하면 됨)
(1) 따라서 스트림(Stream) 대신 작은 값인 시드 (Seed) 를 공유하고,
(2) 합의된 함수의 인자로 넣어 스트림을 각자 생성
대칭키 암호 시스템의 장단점
장점
- 공개키 암호 시스템에 비해 속도가 빠름
단점
- 송신자와 수신자가 사전에 키를 교환해야 한다.
- 여러 명일 경우 두 사람마다 서로 다른 키 생성해야 한다. (N명이 있을 때 N(N-1)/2 개의 키가 필요함
공개키 암호 시스템
송신자 : 수신자의 공개키(Public Key)로 데이터를 암호화해 수신자에게 전송
수신자 : 자신의 비밀키(Private Key)로 복호화
공개키(Public Key) : 공개키를 아는 사람 모두 수신자에게 암호문 보낼 수 있다.
비밀키(Private Key) : 수신자만 알고 있어서, 공격자는 암호문을 도청해도 복호화 할 수 없다.
<우체통>
누구나 수신자의 우체통으로 편지를 보낼 수 있지만, 열쇠를 가진 수신자만 편지를 볼 수 있다.
공개키 암호 시스템의 장점과 단점
장점
- 사람들이 각자의 공개키, 비밀키를 만들고 공개키만 공개하면 되므로 2N개의 키만 필요하다 (대칭키 암호 시스템보다 훨씬 적음)
- 한 번 키를 생성하면, 새로운 상대가 생겨도 키를 다시 만들 필요가 없다
단점
- 대칭키 암호 시스템에 비해 복잡한 연산이 필요해, 속도가 느리다
- 대칭키 암호와 같은 안전성을 제공하려면, 대칭키 암호보다 긴 키를 사용해야 한다(AES:192bit, RSA:2048bit)
3. 마치며
퀴즈 답 : 확산, 2, 부인방지기능