Living Rough

Diffie - Hellman(디피-헬만 키 교환) 본문

System & Security/Security

Diffie - Hellman(디피-헬만 키 교환)

HJ호준 2023. 12. 10. 02:53

인터넷과 같은 장소에서는 대칭키 암호화를 사용하기가 힘들다.

사전에 키 공유가 필요한데, 공개된 공간인 인터넷에서는 키를 비밀스럽게 공유하기 힘들기 때문이다.

그렇다면 키 교환을 하는 방법에는 어떤 방법이 존재할까?

디피 - 헬만 키 교환 방식에 대해 알아보자.


디피 헬만 키 교환의 시작

 

디피 헬만 키 교환은 보안성 없는 매체(Internet)를 통한 Symmetric key 공유를 위해 고안되었다.

특히 지난 게시물에 언급했던 세션키를 이용하기 위해서는 이 키를 교환하고 합의하는 것이 필요한데, 이를 비밀스럽게 하는 것이 쉽지 않았다.

 

이에 디피, 헬만은 1975년 이산 대수 문제를 이용해 디피-헬만 키 교환 방식을 고안하였다.

이 키 교환 방식은 KDC보다 훨씬 빠르며, 순간적인 대칭키 생성과 교환이 가능하다.


기본 아이디어와 적용

 

Alice와 Bob이 있다.

Alice와 Bob은 기본 물감에 자신들만의 독특한 색을 섞어서 만든 다음, 이 색을 서로 주고 받게 된다.

주고 받은 물감에 처음 섞었던 독특한 색을 섞어버리면 결국 같은 색의 물감을 가질 수 있게 된다.

 

이제 기본 아이디어를 이해했다면, 실제로 어떻게 적용되는지 확인해보자 :

 

디피 헬만 키교환

과정을 위 그림을 바탕으로 정리해보면 :

1. 앨리스는 p,g의 큰 정수를 선택하고, 이는 Bob과 모든 사용자에게 공개되어 있다.

2. 앨리스는 임의로 숫자 x를 생성하고 R1 = g^x mod p를 계산한다.

3. 밥은 임의로 숫자 y를 생성하고 R2 = g^y mod p를 계산한다.(위에서는 R1으로 표시되어 있는데, 그냥 R2로 봐주시길)

 

이때 R1과 R2를 서로 교환하고, Alice와 Bob은 서로 K = g^xy mod p를 계산하게 된다.

 

이는 p,g가 서로 공개되어도 x나 y를 알지 못하는 이상 K를 알아내기는 쉽지 않기 때문이다.

Alice는 x만 알고, Bob은 y만 알고 있지만, p와 g는 Alice와 Bob을 포함한 모든 사용자에게 공개된다.

 

P = 7
Q = 3
a = 4
b = 4

print("공개 값들 :")
print("P :", P)
print("Q :", Q)

A = (Q**a) % P
print("\nAlice sends :",A)

B = (Q**b) % P
print("\nBob sends :",B)

print("\n----------\n")

print("비밀키로 계산")

aliceSharedSecret = (B ** a) % P
print("앨리스 :", aliceSharedSecret)

bobSharedSecret = (A ** b) % P
print("밥 :", bobSharedSecret)

 

위는 디피 헬만 과정을 나타낸 코드이다. 


이번 게시물에서는 디피-헬만을 어떻게 사용하는지 알아보고, 왜 필요한지도 알아보았다.

글을 마친다.

'System & Security > Security' 카테고리의 다른 글

Access Control이란?  (1) 2023.12.10
Kerberos(커보로스)란?  (0) 2023.12.10
KDC와 CA  (1) 2023.12.10
S/MIME이란 무엇일까?  (0) 2023.12.09
PGP(Pretty Good Privacy)란?  (1) 2023.12.09