DH 키 합의와 타원곡선 기초
DH의 공유 비밀 계산과 중간자 위험, ECDH·ECDSA의 차이를 이해합니다.
1. DH는 양쪽의 비밀값으로 공통값을 만든다
Diffie–Hellman은 완성된 비밀키를 그대로 보내지 않고 양쪽이 같은 공유 비밀을 계산하는 키 합의 방식이다. 학습용 유한체 DH에서는 소수 p와 생성원 g를 공개하고, 각자의 비밀 지수 a·b를 숨긴다.
Alice 공개값: A = g^a mod p
Bob 공개값: B = g^b mod p
Alice 계산: Z = B^a mod p
Bob 계산: Z = A^b mod p
공통 결과: g^(ab) mod p
p·g와 A·B가 공개되어도 적절한 파라미터에서는 비밀 지수를 알아내기 어렵다는 성질을 이용한다. 실제 환경에서는 검증된 파라미터와 공개값 검증이 필요하다.
2. 작은 수로 계산하기
p = 23, g = 5
Alice 비밀값 a = 6 → A = 5^6 mod 23 = 8
Bob 비밀값 b = 15 → B = 5^15 mod 23 = 19
Alice: 19^6 mod 23 = 2
Bob: 8^15 mod 23 = 2
서로 공개값 8과 19를 받아 동일한 공유 비밀 2를 만든다. 실제 보안에는 사용할 수 없는 작은 수의 계산 예시다. p·g·공개값을 보고 비밀 지수를 역으로 찾는 문제를 이산대수 문제라고 한다.
3. 공개값 교환과 상대 인증은 다르다
인증 없이 A와 B를 교환하면 공격자가 중간에서 자신의 공개값으로 바꿀 수 있다. 이때 Alice–공격자, 공격자–Bob 사이에 각각 다른 비밀이 만들어진다. DH 계산에 성공했다는 사실만으로 상대방의 신원이 인증되지는 않는다.
서명·인증서·사전 공유 인증키 등으로 공개값과 상대 신원을 연결해야 한다. 합의 결과로 얻은 공유 비밀 Z에는 KDF를 적용하여 암호화키·인증키 등 목적별 키를 유도한다.
임시 DH 비밀값을 세션마다 만들고 적절히 폐기하는 인증된 프로토콜은 순방향 비밀성에 기여한다. 장기 인증키가 나중에 유출되어도 과거의 세션키가 곧바로 복구되지 않는 성질이다. 모든 DH 사용이 자동으로 이 성질을 갖는 것은 아니다.
4. 타원곡선 암호의 핵심
ECC는 유한체 위 타원곡선 점의 연산을 이용한다. 대표적인 학습 표현은 y² = x³ + ax + b (mod p)이며 실수 곡선 그림의 좌표를 그대로 암호키로 사용하는 것이 아니다.
공개 기준점: G
개인 스칼라: d
공개점: Q = dG
스칼라 곱 dG는 점의 연산을 반복하는 의미다. G와 Q만으로 d를 찾기 어려운 문제를 타원곡선 이산대수 문제(ECDLP)라고 한다. 점 덧셈·배점의 좌표 공식 전개는 여기서 다루지 않는다.
5. ECDH·ECDSA·ElGamal의 구분
| 기술 | 기능 | 핵심 |
|---|---|---|
| DH | 유한체 기반 키 합의 | 공개값 g^a, g^b를 교환 |
| ECDH | 타원곡선 기반 키 합의 | aG, bG로 공통점 abG 계산 |
| ECDSA | 타원곡선 기반 전자서명 | 개인키로 생성, 공개키로 검증 |
| ElGamal | 이산대수 계열 공개키 방식 | 암호화 방식과 서명 방식이 각각 존재 |
ECDH도 상대 인증을 별도로 갖추어야 한다. ECC와 RSA의 키 길이를 숫자만 비교해 같은 안전성이라고 단정하지 않는다. 관련 공개키의 신뢰 검증은 인증서·PKI·신뢰와 폐지 확인에서 연결한다.
개념 확인 문제
문제를 누르면 바로 아래에서 정답과 해설을 확인할 수 있습니다.
01p=23, g=5, a=6, b=15이면 DH 공개값과 공유 비밀은?
공개값은 A=8, B=19이고 양쪽 공유 비밀은 2다. 한쪽은 19^6 mod 23, 다른 쪽은 8^15 mod 23을 계산한다.
02DH 공개값을 교환해 같은 비밀을 얻으면 상대 인증도 끝나는가?
아니다. 인증되지 않은 공개값을 공격자가 바꿔치기하면 양쪽과 별도의 비밀을 만들 수 있다. 서명·인증서·사전 공유 인증키 등으로 상대와 공개값을 연결해야 한다.