보안에는 명품 3대장이라고 불리는 기법이 있다.
RSA, PGP, 그리고 이번시간에 배워보고자 하는 Diffie Hellman이 있다.
Diffie-Hellman
두 사용자가 공개적으로 통신하면서 안전하게 비밀 대칭키를 만드는 알고리즘.
기밀성은 보장하고, 무결성과 인증은 다른 기법과 연계해야한다.
Diffie-Hellman은 이산대수의 문제를 이용한 알고리즘 기법이다.
기본적인 알고리즘은 물통의 색으로 이해할 수 있다.
#실제로 p,q는 엄청 큰 소수 값
p = 23
q = 5
a = 5
b = 15
#Begin
print("공개 값들 : ")
print("p :", p)
print("q :", q)
#Alice Send to Bob
A = (q**a) % p
print("\nAlice sends : " ,A)
#Bob send to Alice
B = (q**b) % p
print("/nBob send : ", B)
print("--------------")
print("비밀키 계산")
alice_share_secret = (B**a) % p
bob_share_secret = (A**b) % p
if alice_share_secret == bob_share_secret:
print("성공")
Diffie-Hellman은 중간자 공격에 취약할 수 있다.
중간에서 주고받는 데이터를 훔쳐서 Alice에게는 bob인척, bob에게는 Alice인 척을 하는 것이다. 이는 사용자 인증을 하지 않아서 발생하는 문제기 때문에 전자서명 혹은 인증 기법을 합쳐서 보완할 수 있다.
이 경우 앨리스와 밥은 제 3자와 공유한 키를 서로간의 공유한 키로 생각
Diffie-Hellman은 서로간의 정보를 주고받지 않고, 비밀 대칭키를 교환하는 알고리즘으로 기밀성을 보장하지만, 무결성, 인증은 보장하지 못한다. 또한 중간자 공격에 취약하기 때문에 신원확인, 무결성 검사를 위해 전자 서명과 함께 사용하는 것이 좋아보임