Diffie-Hellman密鑰交換
阿新 • • 發佈:2019-02-06
密鑰 man uri dtp noi napt dig 算法 sdg
Diffie-Hellman密鑰交換
加密過程
有全局兩個公開的參數:
p,g p是一個大素數,g是p的一個本原根
現在有Alice和Bob兩個人要交換密鑰。
① Alice選定一個小於p的數a作為Alice私鑰,並且計算Alice的公鑰A=g^a mod p,公開Alice的公鑰A ② 與此同時Bob選定一個小於p的數b作為Bob私鑰,並且計算Bob的公鑰B=g^b mod p,公開Bob的公鑰B ③ Alice獲得Bob的公鑰B後,計算共享的私鑰s=B^a mod p ④ Bob獲得Alice的公鑰A後,計算共享的私鑰s=A^b mod p ⑤ 推導:s=A^b mod p=(g^a mod p)^b mod p=g^ab mod p
公式推導後,兩人計算的s是相等的,並且雙方各自的私鑰沒有被泄露,就協商出了共享的私鑰。
攻擊方法
1.假設Eve為攻擊者,Eve能夠截取A發往B的數據包(包括A和B公鑰)
Eve可以獲取p,g,A,B Eve可以自己選定個私鑰c,並且公布公鑰C Eve攔截alice和bob之間的信息,偽造數據並且互相轉發,這樣A實際和C通信,但是A認為是和B通信。B也這麽認為,這樣就控制了Alice和Bob之間的通信。
2.解密通信過程中數據
這裏以安恒月賽的一個題目為例子:
Alice和Bob正在進行通信,作為中間人的Eve一直在竊聽他們兩人的通信。 Eve竊聽到這樣一段內容,主要內容如下: p = 37 A = 17 B = 31 U2FsdGVkX1+mrbv3nUfzAjMY1kzM5P7ok/TzFCTFGs7ivutKLBLGbZxOfFebNdb2 l7V38e7I2ywU+BW/2dOTWIWnubAzhMN+jzlqbX6dD1rmGEd21sEAp40IQXmN/Y0O K4nCu4xEuJsNsTJZhk50NaPTDk7J7J+wBsScdV0fIfe23pRg58qzdVljCOzosb62 7oPwxidBEPuxs4WYehm+15zjw2cw03qeOyaXnH/yeqytKUxKqe2L5fytlr6FybZw HkYlPZ7JarNOIhO2OP3n53OZ1zFhwzTvjf7MVPsTAnZYc+OF2tqJS5mgWkWXnPal +A2lWQgmVxCsjl1DLkQiWy+bFY3W/X59QZ1GEQFY1xqUFA4xCPkUgB+G6AC8DTpK ix5+Grt91ie09Ye/SgBliKdt5BdPZplp0oJWdS8Iy0bqfF7voKX3VgTwRaCENgXl VwhPEOslBJRh6Pk0cA0kUzyOQ+xFh82YTrNBX6xtucMhfoenc2XDCLp+qGVW9Kj6 m5lSYiFFd0E= 分析得知,他們是在公共信道上交換加密密鑰,共同建立共享密鑰。 而上面這段密文是Alice和Bob使用自己的密值和共享秘鑰,組成一串字符的md5值的前16位字符作為密碼使用另外一種加密算法加密明文得到的。 例如Alice的密值為3,Bob的密值為6,共享秘鑰為35,那麽密碼為: password = hashlib.md5("(3,6,35)").hexdigest()[0:16]
解密過程:
① 第一步是獲取共享密鑰,題目中給出的參數p,A,B。 ② p=37,計算p的本原根=2 ③ 計算a,17=2^a mod 37,a=7 ④ 計算b,31=2^b mod 37,b=9 ⑤ 計算s=g^ab mod p=6 ⑥ 計算password = hashlib.md5("(7,9,6)").hexdigest()[0:16]=a7ece9d133c9ec03
猜測password為密文的密鑰,密文的加密方式未知,挨個嘗試:
https://www.alpertron.com.ar/DILOG.HTM
Diffie-Hellman密鑰交換