⚠️ 고전 암호의 문제점
송신자와 수신자 간 키 공유 문제
▶ 카이사르(알파벳을 미는 칸의 수), 비제네르(키워드) ...
대칭키 암호 시스템(Symmetric key cryptosystem)
- 송신자와 수신자가 같은 키를 공유하는 암호 시스템
- 사전 키 공유 과정 필요
▶ 네트워크 도청 문제로 키 공유 알고리즘(Key exchange algorithm) 연구
→ 1970년 중반 Diffie-Hellman 키 교환 알고리즘 등장
공개키 암호 시스템(Public key cryptosystem) 등장
- 송신자와 수신자가 서로 다른 키 사용하는 암호 시스템
- 대칭키와 대비하여 비대칭키 암호 시스템(Asymmetric cryptography) 으로도 불림
현대 암호
🔎 케르크호프스의 원리 (Kerchhoffs' principle)
키를 제외한 시스템의 다른 모든 내용이 알려지더라도 암호체계는 안전해야 한다
▶ 알고리즘이 노출되더라도 키가 공개되지 않으면 안전하다는 의미
✅ 안전한 암호 시스템의 성질
- 혼돈(Confusion) : 암호문에서 평문의 특성을 알아내기 힘든 성질
예시)
단일 치환 암호 사용 시, 동일 평문 2번 암호화하면 출력 암호문 2개 동일
암호문으로 평문이 무엇인지 유추하지 못해도 2개의 평문이 동일하다는 사실 알 수 있음
∴ 혼돈 성질 불만족
- 확산(Diffusion) : 평문의 작은 변화가 암호문의 큰 변화로 이어지는 성질
예시)
카이사르 암호 사용하여 평문 한 글자 변경 시, 암호문 해당 위치 한 글자만 변화
∴ 확산 성질 불만족
📌 대칭키 암호 시스템
암호화와 복호화에 동일 키 사용하는 암호 시스템
블록 암호 & 스트림 암호로 구분
블록 암호 (Block cipher)
평문을 정해진 크기의 블록 단위로 암호화하는 방식
예시)
블록 크기 : 4 Byte
평문 4바이트 블록으로 쪼개 각 블록마다 암호화 진행
▶ 대표 예시 : DES / AES
➕ 평문 크기가 블록 크기의 배수가 아닐 경우
균등하게 쪼갤 수 없기 때문에 평문 뒤 임의의 데이터를 추가하는 패딩(Padding) 수행
→ 평문이 블록 크기 배수가 될 때까지 추가
스트림 암호(Stream cipher)
송신자와 수신자가 공유하는 데이터 스트림 생성 후, 평문과 연산 수행하여 암호문 생성하는 방식
▶ 복호화 과정은 암호화 방식 역연산 진행
대부분 암호화 & 복호화 과정에 XOR 연산(Exclusive OR) 사용
▶ 비트 단위 연산
🔎 XOR 연산
XOR 연산의 특징
a b a$\oplus$b 0 0 0 0 1 1 1 0 1 1 1 0
- a$\oplus$b 값으로부터 a에 대한 정보를 알아낼 수 X
- $a = (a\oplus b)\oplus b$ 성립으로 역연산이 동일하며, 정보 손실이 없음
평문 $P$, 암호문 $C$, 스트림 $X$ 일 때, $C = P \oplus X$
$X \oplus X = 0$ 이므로 수신자가 $C \oplus X = P \oplus X \oplus X = P$로 암호문 복호화 가능
예시)'AB' $\oplus$ 'qu' = [65,66] $\oplus$ [113, 117]▶ [01000001, 01000010] $\oplus$ [01110001, 01110101] = [00110000, 00110111]
▶ [48, 55] = '07'
💡 스트림 공유 문제
송신자와 수신자가 평문 길이만큼의 스트림을 매번 공유 = 스트림 모르는 공격자는 암호문 복호화 불가
▶ 평문 길이의 스트림 안전 공유 = 스트림 공유 채널로 평문 공유 = 암호화 필요 없음
▶스트림 대신, 시드(Seed) 값 공유
사전에 합의된 함수의 인자로 넣어 스트림 개별 생성
단순 연산 구현으로 속도가 빨라 연산 능력이 부족한 임베디드 기기나 속도 중요 환경에서 사용
대칭키 암호 시스템 장단점
✅ 장점
- 공개키 암호 시스템 대비 빠른 속도
✅ 단점
- 송신자와 수신자 간 사전 키 교환 필요
- 통신마다 개별 키 생성 필요
- N명의 사람이 있을 경우, $_n\mathrm{C}_2 = N(N-1)/2$ 개 키 필요
📌 공개키 암호 시스템
송신자가 수신자 공개키(Public Key)로 데이터 암호화 후, 수신자 전송
수신자는 자신의 비밀키(Private Key)로 암호문 복호화
▶공개키와 비밀키 쌍으로 이루어짐
✅ 공개키 : 모두에게 공개되어 있는 키로 누구나 수신자에게 암호문 전송 가능
✅ 개인키 : 수신자만 알고 있는 키로 공격자가 암호문을 도청해도 복호화 불가
대칭키 암호의 경우, 송신자와 수신자가 같은 키 사용
공개키 암호 시스템의 경우, 서로 다른 키 사용 = 비대칭키 암호 시스템
공개키 암호 시스템 장단점
✅ 장점
- 그룹 내 인원 각자 공개키와 비밀키 생성 후, 공개키만 공개
- N명의 사람이 있을 경우, N개 키 쌍만 필요 (대칭키 암호보다 적은 키 개수)
- 키 생성 후, 재생성 필요 X
✅ 단점
- 대칭키 암호 시스템 대비 복잡한 연산으로 느린 속도
- 대칭키 암호와 동일 안전성 제공 시, 대칭키 암호보다 긴 키 사용 필요
ex.
AES(대칭키) 192비트 이상 필요
RSA(공개키) 2048비트 이상 필요
📌 암호의 기능
1. 기밀성 (Confidentiality)
허가된 사람만 정보를 열람할 수 있게 하는 기능 (= 키를 가지고 있는 사람)
2. 무결성 (Integrity)
송신자가 보낸 정보가 변조되지 않게 보증하는 기능
ex. 송신자가 전송한 데이터를 누군가 가로채어 조작한 후, 수신자에 전달 혹은 네트워크 문제로 전송 중 일부 변경
3. 인증 (Authentication)
정보를 주고 받는 상대방의 신원을 확인하는 기능
ex. 공인인증서, ID/PW를 이용한 로그인
4. 부인방지 (Non-repudiation)
정보 교환 이후, 교환 사실을 부인할 수 없게 하는 기능
'WorkOut > Dreamhack' 카테고리의 다른 글
Cryptography | Double DES _ Exploit : Meet-in-the-middle Attack (0) | 2024.07.16 |
---|---|
Cryptography | 고전 암호 (치환 & 전치) (0) | 2024.07.07 |
Cryptography | 배타적 논리합과 합동식 (0) | 2024.07.07 |
Cryptography | 분명히 시작은 암호학 공부였는데.. (1) | 2024.07.07 |