디피-헬만 키 교환 시연기
소수와 생성원, 양쪽의 비밀 값으로 공개값과 공유 비밀을 계산해 서로 다른 길로 같은 값에 닿는 과정을 보여 줍니다. 작은 소수에서는 비밀 값이 전수조사로 실제로 드러나는 것까지 확인할 수 있습니다.
모두에게 공개되는 값입니다.
p의 원시근을 쓰는 것이 원칙입니다.
둘만 아는 공유 비밀
2
앨리스와 밥이 서로 다른 길로 같은 값에 닿았습니다
사용 방법
- 1공개 소수 p와 생성원 g를 고릅니다. 예시 조합을 눌러도 됩니다.
- 2앨리스와 밥의 비밀 값을 각각 넣습니다.
- 3양쪽이 보내는 공개값과, 서로 다른 길로 닿은 공유 비밀이 같은지 확인합니다.
- 4전수조사로 비밀 값이 몇 번 만에 드러나는지 보고 키 길이의 뜻을 가늠합니다.
자주 묻는 질문
공개된 소수 p와 생성원 g에 대해 앨리스는 A = g^a mod p를, 밥은 B = g^b mod p를 보냅니다. 그다음 앨리스는 B^a mod p를, 밥은 A^b mod p를 계산하면 둘 다 g^(a·b) mod p라 같은 값이 됩니다. p = 23, g = 5, a = 6, b = 15이면 A = 8, B = 19, 공유 비밀은 2입니다.
오가는 것이 p·g·A·B뿐이라 비밀 a를 알려면 g^a ≡ A (mod p)를 푸는 이산로그 문제를 풀어야 하기 때문입니다. mod p 위에서는 값이 마구 튀어 «크면 지수도 크다» 같은 실마리가 없어, 실수의 로그처럼 바로 계산할 방법이 없습니다. p가 충분히 크면 하나씩 넣어 보는 것이 불가능해집니다.
원시근이면 g^1부터 g^(p−1)까지가 1부터 p−1까지를 한 번씩 모두 훑어 공유 비밀의 후보가 최대가 되기 때문입니다. 원시근이 아니면 더 작은 집합만 돌아 후보가 줄고 그만큼 추측이 쉬워집니다. p = 23에서 g = 2는 11개 값만 돌아 후보의 절반이 날아갑니다.
그 자체로는 안전하지 않습니다. 중간에 낀 사람이 양쪽과 따로 키를 맺으면 둘 다 모른 채 모든 대화를 읽고 고칠 수 있습니다. 디피-헬만은 비밀을 함께 만드는 방법일 뿐 상대가 누구인지 확인하는 방법이 아니어서, 실제로는 서명이나 인증서로 신원을 먼저 확인합니다.
RSA는 공개키로 잠그고 개인키로 여는 암호화이고, 디피-헬만은 양쪽이 함께 같은 대칭키를 만드는 방법입니다. 실제 통신에서는 디피-헬만으로 만든 대칭키로 본문을 암호화하며, 그 키를 매번 새로 만들면 나중에 개인키가 털려도 지난 대화는 못 읽는 순방향 비밀성을 얻습니다.
전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.
알아두면 좋은 점
- 교육용 시연입니다. 여기서 만든 값을 실제 통신에 쓰면 안 됩니다.
- 소수는 100,003 이하만 받습니다. 이산로그를 전수조사로 풀어 보이는 것이 이 도구의 목적이라 그보다 크면 느려집니다.
- 실제 구현은 RFC 3526 등에 정해진 2048비트 이상의 군을 쓰거나, 더 짧은 키로 같은 강도를 내는 타원곡선 방식(ECDH)을 씁니다.
- 비밀 값은 1 이상이면 되지만 p−1의 배수만큼 차이 나는 값은 같은 공개값을 만듭니다. 지수가 p−1을 주기로 돌기 때문입니다.
- 실제로는 비밀 값을 사람이 고르지 않고 암호학적으로 안전한 난수로 뽑습니다. 예측 가능한 값을 쓰면 소수를 아무리 키워도 소용이 없습니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.