디피헬만 공개키 암호화 알고리즘

여기서 g와 p는 공개키, a와 b는 비밀키다. 둘 간의 자료를 교환할 때 A=g^a mod p, B=g^b mod p. 

둘은 A와 B값을 교환. 둘이 비밀키를 직접 교환하지 않는다. A와 B의 값을 누군가가 스니핑 하더라도 공개키의 값이 충분히 크면 비밀키인 a와 b의 값을 유추하기 어렵다. 

서로가 교환된 값을 A는 S1=B^a mod p, B는 S2=A^b mod p와 같이 계산. S1과 S2의 값은 일치한다. 

아래는 파이썬으로 정리해본 디피헬만 알고리즘 

g=221185 
p=1340 

a=323 
b=61 

print("공개키 두개 : ",g,",",p) 
print("Ann의 비밀키 :",a) 
print("John의 비밀키 :",b) 
print("") 

A=g**a % p 
B=g**b % p 

print("Ann은 자신의 개인키와 공개키가 결합된 수치인 A=",A,"를 John에게 전달") 
print("John은 자신의 개인키와 공개키가 결합된 수치인 B=",B,"를 Ann에게 전달") 
print("") 

S1=B**a%p 
print("Ann은 받은 B와 자신의 비밀키, 공개키를 결합하여 숫자를 조합하는데 그 숫자가 ",S1) 

S2=A**b%p 
print("John은 받은 A와 자신의 비밀키, 공개키를 결합하여 숫자를 조합하는데 그 숫자가 ",S2) 

print("") 
print("## 두 숫자는 정확히 일치한다! ##") 

 

반응형