디피-헬먼 키 교환 알고리즘(Diffie-Hellman key exchange algorithm)

디피-헬먼 키 교환 알고리즘(Diffie-Hellman key exchange algorithm)에 대해서 알아보겠습니다.


디피-헬먼 키 교환 알고리즘은 비밀키와 공개키를 활용하여 암호 키를 교환 방식입니다.


우선 철수와 가희로 설명하겠습니다.

철수와 가희는 소수인 'ㅅ'을 선택합니다.

철수와 가희는 'ㅅ'의 원시근인 'ㅇ'을 선택합니다.(원시근의 경우 ㅅ-1과 같거나 작습니다.)

철수와 가희는 'ㅅ'과 'ㅇ'의 값을 알고 있습니다.


철수는 임의의 정수 'ㅊ'을 몰래 선택합니다.

가희도 임의의 정수 'ㄱ'을 몰래 선택합니다.

철수는 철 = ㅇ^ㅊ (mod ㅅ)를 구합니다.

가희는 가 = ㅇ^ㄱ (mod ㅅ)를 구합니다.

철수와 가희는 '철'과 '가'의 값을 공유합니다.


철수는 가희로부터 받은 '가'를 이용하여 비밀 값 'ㅂ'을 구합니다.

ㅂ = 가^ㅊ (mod ㅅ)


가희는 철수로부터 받은 '철'을 이용하여 비밀 값 'ㅂ'을 구합니다.

ㅂ = 철^ㄱ (mod ㅅ)


'ㅂ'의 값이 같은 이유는 가^ㅊ (mod ㅅ) = ㅇ^ㄱㅊ (mod ㅅ) = 철^ㄱ (mod ㅅ)이기 때문입니다.


철수와 가희가 서로 공유하는 과정을 우리는 엿볼 수 있기 때문에, 'ㅅ', 'ㅇ', '철', '가'는 우리가 알 수 있습니다.

하지만, 'ㅊ'과 'ㄱ'은 각자 개인만 알기 때문에, 'ㅂ' 값을 찾기가 어렵습니다.



영어 p, g, a, b, A, B로 설명되어 있는 것을 보니 볼 때마다 헷갈려서 한글로 한 번 수식을 만들어보았습니다.

영어로 보고 싶으신 분은 다음과 같이 보면 됩니다.

'철수' = Bob, '가희' = Alice, 'ㅇ' = g, 'ㅅ' = p, 'ㅊ' = b, 'ㄱ' = a, '철' = B, '가' = A, 'ㅂ' = s


끝.



카테고리: network

댓글

이 블로그의 인기 게시물

Python OpenCV 빈 화면 만들기

Python urllib.parse.quote()

Python bytes.fromhex()

Android AVD Ram size change

Forensics .pyc 파일 .py로 복구하기

Android Minimum touch target size

KiCad 시작하기 7 (FreeRoute 사용하기 2)

Android Notification with Full Screen

C++ OpenCV 모폴로지 침식, 팽창

KiCad 시작하기 2 (PCB 만들기)