도구스개발

디피-헬만 키 교환 시연기

소수와 생성원, 양쪽의 비밀 값으로 공개값과 공유 비밀을 계산해 서로 다른 길로 같은 값에 닿는 과정을 보여 줍니다. 작은 소수에서는 비밀 값이 전수조사로 실제로 드러나는 것까지 확인할 수 있습니다.

교육용입니다. 실제 보안에 쓰지 마세요. 여기 쓰는 소수는 너무 작아 비밀 값이 전수조사로 바로 드러나고, 상대가 누구인지 확인하는 절차(인증)가 없어 중간자 공격에 그대로 뚫립니다.

모두에게 공개되는 값입니다.

p의 원시근을 쓰는 것이 원칙입니다.

둘만 아는 공유 비밀

2

앨리스와 밥이 서로 다른 길로 같은 값에 닿았습니다

앨리스가 보내는 값 A = g^a mod p8
밥이 보내는 값 B = g^b mod p19
앨리스의 계산 B^a mod p2
밥의 계산 A^b mod p2
두 값이 같은가
거듭제곱의 순서를 바꿔도 같습니다. 앨리스는 (g^b)^a를, 밥은 (g^a)^b를 계산하는데 둘 다 g^(a·b)라 같은 값이 됩니다. 서로 비밀을 주고받은 적이 없는데도 같은 수에 닿는다는 것이 이 방법의 전부입니다. 지금은 g^(6×15) mod 23 = 2입니다.
오가는 것은 p · g · A · B 넷뿐입니다. 비밀 a와 b는 어느 쪽도 보내지 않습니다. 엿듣는 사람이 A에서 a를 알아내려면 g^a ≡ A (mod p)를 푸는 이산로그 문제를 풀어야 하는데, mod p 위에서는 값이 마구 튀어 «크면 지수도 크다» 같은 실마리가 없습니다. 실수의 로그처럼 바로 계산할 방법이 없어 하나씩 넣어 보는 수밖에 없습니다.
전수조사로 되찾은 앨리스의 비밀6
그때 든 시도 횟수6번
p의 크기5비트
g가 도는 값의 개수 (위수)22개 · 원시근입니다
지금 p는 5비트라 6번 만에 비밀이 드러났습니다. g에 하나씩 곱해 가며 A와 같아지는 지점을 찾은 것뿐입니다. 실제로 쓰이는 군은 2,048비트이고, 비트가 하나 늘 때마다 후보가 두 배가 되므로 그 차이는 상상하기 어려울 만큼 큽니다. 더 짧은 키로 같은 강도를 내려고 타원곡선 방식(ECDH)을 쓰기도 합니다.
g = 5는 p = 23의 원시근입니다. g^1부터 g^(p−1)까지가 1부터 22까지를 한 번씩 모두 훑는다는 뜻이라, 공유 비밀이 될 수 있는 값이 22가지로 최대가 됩니다. 원시근이 아닌 g를 쓰면 도는 값이 줄어 그만큼 추측이 쉬워집니다.
인증이 없으면 중간자에게 그대로 뚫립니다. 중간에 낀 사람이 앨리스에게는 자기 공개값을, 밥에게도 자기 공개값을 보내면 양쪽과 따로 키를 맺게 되어 둘 다 모른 채 모든 대화를 읽고 고칠 수 있습니다. 디피-헬만은 «비밀을 함께 만드는» 방법일 뿐 «상대가 누구인지 확인하는» 방법이 아니어서, 실제로는 서명이나 인증서로 신원을 먼저 확인합니다.
RSA와는 하는 일이 다릅니다. RSA는 공개키로 잠그고 개인키로 여는 «암호화»이고, 디피-헬만은 양쪽이 함께 «같은 대칭키를 만드는» 방법입니다. 실제 통신에서는 이렇게 만든 대칭키로 본문을 암호화하고, 그 키를 매번 새로 만들어 쓰면 나중에 개인키가 털려도 지난 대화는 못 읽는 성질(순방향 비밀성)을 얻습니다.

사용 방법

  1. 1공개 소수 p와 생성원 g를 고릅니다. 예시 조합을 눌러도 됩니다.
  2. 2앨리스와 밥의 비밀 값을 각각 넣습니다.
  3. 3양쪽이 보내는 공개값과, 서로 다른 길로 닿은 공유 비밀이 같은지 확인합니다.
  4. 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일 · 결과는 참고용 추정치입니다.