디피-헬먼 키 교환(Diffie–Hellman key exchange)은 두 사람이 암호화되지 않은 통신망을 통해 공통의 비밀 키를 합의하는 방법이다. 휫필드 디피와 마틴 헬먼이 1976년에 발표했다. 비밀 키 자체는 한 번도 통신로에 실리지 않는다 — 양쪽이 각자 계산해 같은 값에 도달한다. 이 점이 "한쪽이 만든 대칭키를 상대 공개키로 암호화해 보내는" RSA 키 전송과 다르다.
디피-헬먼은 공개키 암호의 출발점이 됐고, 이듬해인 1977년 RSA 가 제안됐다[1]. 오늘날 TLS 1.3 은 키 교환 방법으로 (EC)DHE 만 허용한다[2]. 세션마다 새 값을 쓰는 ephemeral DH 는 서버 개인키가 나중에 유출돼도 지난 세션이 풀리지 않는 전방 비밀성(PFS)을 준다.
앨리스와 밥이 공개된 통신망에서 키를 합의하는 절차다.
마지막 단계에서 B^a mod p = (gb)a mod p = g^ab mod p = (ga)b mod p = A^b mod p 이므로 둘은 같은 값 g^ab mod p 를 얻는다. 이것이 공통 비밀 키(의 재료)가 된다.
도청자는 g · p · A · B 는 볼 수 있지만 a · b 를 모른다. A 에서 a 를 구하는 것(이산대수 문제)이 p 가 충분히 크면 현실적으로 불가능하다는 것이 안전성의 근거다.
| 이름 | 내용 | 쓰는 곳 |
|---|---|---|
| DHE (finite field) | 위 절차 그대로. p 는 2048비트 이상 — RFC 7919 의 ffdhe2048 이상 그룹 |
TLS 1.2/1.3 · IPsec |
| ECDHE | 정수 곱셈 대신 타원곡선 점 연산. 같은 강도에 키가 짧고 빠르다. 곡선은 P-256 · P-384 · X25519 | TLS 1.3 기본 · SSH · WireGuard(X25519) |
| Static DH | 매번 같은 키를 쓴다. PFS 가 없어 새로 쓰지 않는다 | — |
OpenVPN 2.7 은 --dh none 이 기본이 되어 별도의 DH 매개변수 파일 없이 ECDH 를 쓴다. 옛 가이드의 easyrsa gen-dh 단계가 사라진 이유다.
빠른 이해를 위한 동영상 — https://youtu.be/U62S8SchxX4
RSA 는 디피-헬먼의 문제의식(공개키)을 잇는 알고리즘이지만 키 교환이 아니라 암호화 · 서명 알고리즘이다. RFC 8017 https://www.rfc-editor.org/rfc/rfc8017.html ↩︎
RFC 8446 — TLS 1.3, §4.2.7 Supported Groups · RFC 7919 — Negotiated Finite Field DHE. 2026-09-20 확인. https://www.rfc-editor.org/rfc/rfc8446.html ↩︎