Diffie-Hellman — 공개 채널 위의 비밀 키 교환
ElGamal에서 복호화가 성립하는 핵심은 Alice와 Bob이 독립적으로 동일한 공유 비밀 를 계산한다는 것이었다. 이 아이디어의 원형이 바로 Diffie-Hellman 키 교환이다. 1976년, 공개 채널만으로 비밀 키를 공유할 수 있다는 혁명적 발상이 공개키 암호학 전체의 문을 열었다.
- 핵심 문제: 도청 가능한 공개 채널에서 비밀 키를 공유하는 방법
- 프로토콜: Alice는 g^a, Bob은 g^b를 교환 → 공유 비밀 g^(ab)
- 보안 근거: CDH 가정 — g^a, g^b로부터 g^(ab)를 계산하는 것은 어렵다
- 한계: 인증 없음 → 중간자 공격(MITM)에 취약
- 확장: DH + 메시지 마스킹 = ElGamal 암호화
키 교환 문제: 왜 어려운가
대칭키 암호(AES 등)는 빠르고 효율적이지만, 근본적인 문제가 있다 — 양쪽이 같은 비밀 키를 미리 공유해야 한다. 그런데 도청자가 있는 채널에서 비밀 키를 어떻게 전달하는가?
직관적으로 불가능해 보인다. 채널 위의 모든 메시지를 도청자가 볼 수 있다면, 비밀 키를 그대로 보내는 것은 자살행위다. Whitfield Diffie와 Martin Hellman이 1976년에 보인 것은, 일방향 함수(one-way function) 를 활용하면 공개 메시지만으로 비밀을 공유할 수 있다는 것이었다.
핵심 통찰: 곱셈의 순서는 결과에 영향을 주지 않는다 — .
프로토콜
공개 파라미터: 큰 소수 , 의 생성원
Step 1 — Alice의 준비:
- 비밀 를 범위에서 무작위 선택
- 계산
- 를 Bob에게 전송 (공개 채널)
Step 2 — Bob의 준비:
- 비밀 를 범위에서 무작위 선택
- 계산
- 를 Alice에게 전송 (공개 채널)
Step 3 — 공유 비밀 계산:
- Alice:
- Bob:
정확성 증명
왜 Alice와 Bob이 같은 값을 얻는가.
지수법칙에 의해 이므로
도청자는 , , , 를 모두 알지만, 도 도 모른다. 를 계산하려면 또는 가 필요한데, 이산 대수 문제(DLP)에 의해 에서 를 역산하는 것이 계산적으로 어렵다.
수치 예시: p=23, g=5
구체적으로 계산해 보자.
Alice: 을 선택
Bob: 를 선택
공유 비밀 계산:
- Alice:
- Bob:
검증:
도청자는 , , , 를 알지만, 와 없이는 를 계산할 수 없다.
보안 근거: CDH와 DDH 가정
DH 프로토콜의 보안은 두 가지 가정에 기반한다.
CDH (Computational Diffie-Hellman)
, , 가 주어졌을 때, 를 계산하는 다항식 시간 알고리즘이 존재하지 않는다.
이것은 ElGamal에서 다룬 것과 동일한 가정이다. CDH를 풀려면 DLP를 풀어야 하므로, DLP가 어려운 한 CDH도 어렵다.
DDH (Decisional Diffie-Hellman)
, , , 가 주어졌을 때, 인지 가 랜덤인지 구별하는 것이 어렵다.
DDH는 CDH보다 강한 가정이다. 를 계산하지 못하는 것(CDH)을 넘어, 인지 아닌지조차 구별할 수 없다는 것이다.
DDH 가정이 성립하면, 도청자가 , 를 보더라도 공유 비밀 에 대한 어떤 정보도 얻을 수 없다 — 가 랜덤 값과 구별 불가능하기 때문이다.
DDH 가정은 CDH보다 한 단계 더 강한 주장이다. CDH는 "공유 비밀을 계산할 수 없다"이고, DDH는 "공유 비밀인지 랜덤 값인지 구별조차 할 수 없다"이다. 도청자가 g^a와 g^b를 모두 보더라도, 실제 공유 비밀 g^{ab}와 아무 관계 없는 랜덤 값을 구별할 방법이 없다는 뜻이다.
중간자 공격 (MITM)
DH의 치명적 한계는 인증(authentication)이 없다는 것이다. Alice는 상대방이 Bob인지 확인할 방법이 없다.
공격자 Mallory가 Alice와 Bob 사이에 위치하면:
- Alice → Mallory: (Alice는 Bob에게 보냈다고 믿음)
- Mallory → Bob: (Mallory가 자신의 비밀 로 생성)
- Bob → Mallory: (Bob은 Alice에게 보냈다고 믿음)
- Mallory → Alice: (Mallory가 자신의 비밀 로 생성)
결과적으로 두 개의 독립된 세션이 만들어진다:
- Alice ↔ Mallory: 공유 비밀
- Mallory ↔ Bob: 공유 비밀
Mallory는 양쪽 세션의 비밀을 모두 알고 있으므로, 모든 메시지를 복호화하고 변조한 뒤 재암호화할 수 있다. Alice와 Bob은 서로 직접 통신하고 있다고 믿는다.
해결책: 전자 서명과 인증기관(CA)을 결합한다. DH 교환 시 와 에 서명을 붙이면, 수신자는 서명을 검증해 상대방의 신원을 확인할 수 있다. 이것이 TLS 핸드셰이크의 구조다.
DH에서 ElGamal으로
ElGamal 포스트에서 “복호화 정확성은 Diffie-Hellman 키 교환의 직접적인 응용”이라고 했다. 이제 정확히 어떤 관계인지 볼 수 있다.
| DH 키 교환 | ElGamal 암호화 |
|---|---|
| Alice의 비밀 | 수신자의 비밀키 |
| Alice의 공개값 | 수신자의 공개키 |
| Bob의 비밀 | 송신자의 임시 키 |
| Bob의 공개값 | 암호문의 |
| 공유 비밀 | 공유 비밀 |
DH는 공유 비밀을 만드는 것에서 끝나지만, ElGamal은 여기에 한 단계를 추가한다 — 메시지 마스킹. 공유 비밀 를 사용해 평문 을 로 마스킹한다.
또한 DH는 양쪽이 동시에 온라인이어야 하는 대화형(interactive) 프로토콜이다. ElGamal은 수신자의 공개키를 미리 알고 있으면 수신자가 오프라인이어도 암호화할 수 있는 비대화형(non-interactive) 프로토콜로 전환한 것이다. 매 암호화마다 Bob이 새로운 를 선택하는 것은 매번 일회성 DH 키 교환을 수행하는 것과 같다.
전방향 안전성 (Forward Secrecy)
DH의 중요한 보안 속성 중 하나는 전방향 안전성(Forward Secrecy) 이다.
Alice의 장기 비밀키가 미래에 노출되더라도, 과거 세션의 비밀은 안전하다. 왜냐하면 각 세션에서 사용된 임시 비밀 , 는 세션 종료 후 폐기되기 때문이다. 장기 키 노출은 미래의 세션만 위험에 빠뜨리고, 과거 세션의 공유 비밀을 복원할 수 없다.
이 속성은 현대 TLS 1.3에서 DH(또는 ECDH) 기반 키 교환을 필수로 요구하는 이유다. RSA 키 교환은 서버의 개인키가 노출되면 과거 모든 세션이 복호화되지만, DH 기반 교환은 각 세션이 독립적이므로 피해가 제한된다.
파라미터 선택
소수 : DLP의 어려움은 의 크기에 비례한다. 현재 권장은 2048비트 이상. 는 안전 소수(safe prime) — 즉 형태로 도 소수 — 를 사용해야 한다. 의 소인수가 작으면 Pohlig-Hellman 공격으로 DLP가 쉬워진다.
생성원 : ElGamal과 동일하게, 는 의 생성원이어야 한다. 실무에서는 를 위수 인 부분군의 생성원으로 선택해, 의 안전한 부분군에서 연산한다.
비밀 , : 각 세션마다 새로 생성해야 한다. 재사용하면 전방향 안전성이 깨진다.
- Diffie-Hellman은 공개 채널만으로 비밀 키를 공유하는 최초의 프로토콜이다. g^(ab) = g^(ba)라는 지수법칙이 전부다.
- 보안은 CDH 가정에 기반한다 — g^a, g^b로부터 g^(ab)를 계산하는 것이 어렵다. DDH 가정은 더 나아가 g^(ab)인지 랜덤인지 구별조차 어렵다고 말한다.
- 인증이 없으므로 중간자 공격에 취약하다. 전자 서명·인증서와 결합해야 실용적이다.
- ElGamal은 DH 키 교환에 메시지 마스킹을 결합한 것이다. 매 암호화가 일회성 DH 세션이다.
- 전방향 안전성 — 임시 비밀 폐기로 과거 세션이 보호된다. TLS 1.3이 DH 기반 교환을 필수로 요구하는 이유다.
Digital Signature — 전자 서명의 수학적 구조 — RSA·ElGamal 서명의 생성과 검증, 인증기관(CA)의 역할, 암호화 해시와 결합한 최종 프로토콜까지 디지털 서명의 전체 그림을 다룬다.