데이터 암복호화를 위한 키를 송/수신자가 안전하게 교환하기 위한 알고리즘으로, 일련의 과정을 통해 송/수신자가 동일한 키(대칭키)를 가지게 된다.
기본 원리
통신 주체
앨리스, 밥
재료
- 공용값(시작값): g
- 앨리스의 비밀값: a
- 밥의 비밀값: b
절차
공용값 g를 사전에 앨리스와 밥이 공유한다. (노출 또는 탈취되어도 무관)
앨리스는 자신의 비밀값 a를 공용값 g와 섞어 (g+a)를 만들고, 이를 밥에게 전송한다. (노출 또는 탈취되어도 무관)
밥도 마찬가지로 (g+b)를 앨리스에게 전송한다. (노출 또는 탈취되어도 무관)
앨리스는 밥에게 받은 (g+b)에 자신의 비밀값 a를 섞어 (g+a+b)를 만든다.
밥도 마찬가지로 (g+a+b)를 만든다.
앨리스와 밥 모두 동일한 (g+a+b)라는 값을 가지며, 이 과정에서 서로의 비밀값은 주고받지 않았으므로 (g+a+b)라는 값은 앨리스와 밥만 알게 된다.
이 (g+a+b)값을 재료로 대칭키를 만들고, 데이터 암복호화에 사용한다.

수학적 수식
모듈러 연산(= 나머지 연산)이 핵심적으로 사용된다.
- 소수 p와 시작값 g를 정한다.
이 때 g를 정하기 위해 위수, 원시원소(위수근)에 대한 내용이 나오지만 더 깊이 알아보지 않기로함.
마찬가지로, 왜 p가 소수여야 하는지도 알아보지 않기로함.
- 앨리스가 밥에게 건낼 (g+a)의 실제 값 =
g^a mod p, (g+b)의 실제 값 =g^b mod p.
즉, 시작값을 a제곱 혹은 b제곱한 값을 p로 나눈 나머지.
앨리스가 건낸 값을 A,
밥이 건낸 값을 B라고 가정하고 아래 과정 진행.
- 앨리스가 만드는 최종값 (g+a+b)의 실제 값 =
B^a mod p, 밥이 만드는 최종값 =A^b mod p
이 때B^a mod p와A^b mod p는 같은 값이 된다.
A^b mod p = (g^a mod p)^b mod p = g^ab mod p가 되는데, 이 과정에서 (g^a mod p)^b 가 g^ab로 정리되는데 그게 모듈러 연산의 성질이라고 한다.
B^a mod p에서도 결국 g^ba mod p로 수식이 정리되고, 지수는 순서가 상관없으므로 g^ab == g^ba가 된다.
이렇게 앨리스와 밥 모두 g^ab mod p라는 동일한 값을 얻게 되고, 일련의 과정에서 서로의 비밀값 a, b는 외부로 노출되지 않는다.
이렇게 얻은 값은 SHA256 알고리즘으로 해싱하고, 해시값을 데이터 암복호화(AES) 시 키로서 사용하게 된다.