1. 키 분배 문제
대칭키 암호 사용 시 생기는 문제, 키는 도청 가능하므로 안전하게 배송해야 함
1-1. 키의 사전 공유
- 비밀 경로를 통해 임의 키를 선택해 전달
- n명의 사용자가 있을 때 각 사용자는 n-1개, TA는 $\frac{n(n-1)}{2}$가지 키를 관리해야 함
1-2. 키배포 센터 (온라인 키 분배)
- 키배포센터(KDC)에서 암호 통신이 필요해질 때마다 키를 공유
- n명의 사용자가 있을 때 n개의 키를 저장하고, 세션 키를 암호화하여 전달함
1-3. Diffie-Hellman 키 교환
- 최초의 비밀키 교환 프로토콜 (= 키 합의 프로토콜)
- KDC 없이 통신 주체가 대칭 세션키를 생성함
- 절차
- p, g는 공개됨
- A는 $R_{1} = g^x mod\,p$를, B는 $R_{2} = g^y mod\,p$ 계산함 ($0 <= x, y <= p-1$ 인 임의의 수)
- $R_{1}, R_{2}$를 서로 교환함
- A는 $K = R_{2}^x mod\,p$ B는 $K = R_{1}^y mod\,p$를 계산함
- K가 바로 세션키임
- 안전성
- 이산대수 문제에 근거
- 계산이 복잡해 IP 스푸핑이 동반된 DoS 공격에 취약함
- 인증이 없어 중간자 공격에 취약 (공개키 인증서가 도입된 국-대-국 프로토콜은 방어 가능)
1-4. 공개키 암호
- 수신자가 자신의 공개키를 알려주면, 복호화키(= 개인키)는 수신자만 가지고 있으므로 배송할 필요가 없어짐
2. 공개키 암호
- 공개키 사용 원칙
- 암호화키와 복호화키는 같은 사람의 키쌍이어야 함
- 키는 암, 복호화 중 한 번만 사용해야 함
- 타인의 개인키를 사용하면 안 됨
- 공개키 종류
- 이산대수 문제: ElGamal(디피-헬만 확장), DSA(DSS에 활용), ECC(짧은 키)
- 소인수분해 문제: RSA, Rabin(2차 합동)
- 공개키 모드 2가지
송신자 | 수신자 | |
송신자 개인키로 암호화 | 송신자 공개키로 복호화 | 인증, 부인 방지 (ex. 전자서명) |
수신자 공개키로 암호화 | 수신자 개인키로 복호화 | 기밀성 (ex. 이메일) |
- 중간자 공격 (MITM Attack)
- 기밀성에 대해 매우 유효한 공격 방법
- 방어하기 위해 인증이 필요 (공개키 인증서)
- 대칭키 vs 비대칭키
- 대칭키: 속도가 빠르고 키가 짧지만, 키 분배 문제가 있고 관리해야 할 키가 많음
- 비대칭키: 키 분배가 용이하고 여러 분야에 응용 가능하지만, 속도가 느리고 키의 길이가 너무 긺
- 둘은 서로의 장단점을 보완하는 상호보완적 관계
대칭키 | 공개키 | |
안전한 키 길이 | 128-bit | 2048-bit |
키 개수 | $frac{n(n-1)}{2}$ | $2n$ |
속도, 경제성 | 높다 | 낮다 |
제공 서비스 | 기밀성 | 기밀성, 인증, 부인방지 |
목적 | 데이터 암호화 | 대칭키 교환 |
단점 | 키 배송 문제 | 중간자 공격 |
3. RSA 암호 시스템
사실상의 표준 공개키 알고리즘, 인수분해 문제에 근거
3-1. 암호화와 복호화
- 암호화: $C = P^e mod \, n$
- 복호화: $P = C^d mod \, n$
3-2. 키 생성
- 공개키 $PU = \{e, n\}$, 개인키 $PR = \{d, n\}$
- 절차
- 두 개의 서로 다른 소수 p, q 선택 (해당 값은 비밀)
- $n = pq$ 계산
- $\phi(n) = (p-1)(q-1)$ 계산
- $gcd(\phi(n), e)=1$을 만족하는 $e$ 선택 ($1 < e < \phi(n)$)
- $de\,mod\,\phi(n) = 1$을 계산해 d를 구함
3-3. RSA에 대한 공격
- 수학적 공격 (소인수분해 공격)
- 타이밍 공격
- CCA의 일종, 복호화 알고리즘의 실행 시간으로 키 길이 추측
- 랜덤 딜레이로 방어
- 선택 암호문 공격 (CCA)
- 임의의 데이터를 암호문으로 간주하고 회신해주는 서비스를 공격자가 이용함 (복호 오라클)
- OAEP가 권장됨 (패딩이 더해짐)
3-4. 권장사항
- p, q는 거의 같은 크기의 소수
- p-1, q-1은 커다란 소인수를 가져야 하며 최대공약수는 작아야 함
- OAEP로 메세지가 패딩되어야 함
4. 그외 공개키 알고리즘
4-1. Rabin 암호시스템
- RSA의 변형이지만 2차 합동에 근거를 둠 (RSA는 지수합동)
- 연산이 한 번의 곱셈이라 암호화가 간단하고 빠름
- 성능 낮은 플랫폼에서도 잘 활용됨 (ex. 스마트카드)
4-2. ElGamal 방식
- Diffie-Hellman 알고리즘의 확장으로, 이산대수 문제에 근거함
- RSA처럼 디지털 서명, 암호화, 키 교환에 사용 가능
- 암호문의 길이가 평문의 2배가 되어 메모리 공간이 많이 요구되며 전송 속도가 느림
4-3. 타원 곡선 암호 (ECC, Elliptic Curve Cryptosystem)
- 키의 길이가 더 짧아도 동일한 수준의 보안을 제공하는 빠르고 효율적인 알고리즘
- 무선통신, 스마트카드 등에 활용됨
- ECDLP (타원곡선 이산대수) 문제에 근거
- $Q = kP$를 만족하는 수 $k$를 구하는 문제
- 유한체상 $y^2 = x^3 + ax + b$로 정의된 타원곡선상 점들 간의 덧셈 연산으로 키를 산출
- 덧셈: P와 Q를 연결하는 선과 곡선이 만나는 교점에서 x축에 대칭인 점이 R임 (P + Q)
5. 하이브리드 암호시스템
대칭키 암호와 공개키 암호의 장점을 살릴 수 있도록 조합한 시스템
- 메세지를 대칭키 암호로 암호화
- 사용한 대칭키를 공개키 암호로 암호화
- PGP, SSL/TLS 등에서 사용되고 있음