DH密鑰交換


密鑰交換

密鑰交換簡單點來說就是允許兩名用戶在公開媒體上交換信息以生成“一致”的、可以共享的密鑰。也就是由甲方產出一對密鑰(公鑰、私鑰),乙方依照甲方公鑰產生乙方密鑰對(公鑰、私鑰)。它可以讓雙方在完全沒有對方任何預先信息的條件下通過不安全信道建立起一個密鑰。這個密鑰可以在后續的通信中作為對稱密鑰來加密通訊內容。

離散對數問題( Discrete logarithm problem,DLP)

如果p 是一個素數,g 和x 是整數,計算 \(y = g^x mod p\) 非常快。但是相反的過程:先知道 p, g 和y,要求某個x(離散對數),滿足等式\(y = g^x mod p\),通常十分困難。此相反求離散對數的過程稱為“離散對數問題”。例如:如果\(15 = 3^xmod 17\), 則x = 6。

g和p的選擇對此類系統的安全性影響很大。為了保證無法求解離散對數問題,p應該是一個很大的素數,例如1024bit的,而且 (p-1)/2也應該是素數。g要求是p的primitive root,也就是講整數序列: \(g^0 mod p,g^1 mod p, g^2 mod p, …., g^{p-1} mod p\)中的p個元素均是不同的整數。

DH協議

問題

Alice和Bob 想共有一個密鑰,用於對稱加密。但是他們之間的通信渠道是不安全的。所有經過此渠道的信息均會被敵對方:Eve看到。哪他們要如何交換信息,才能不讓Eve知道這個密鑰呢?

方法

DH 算法的安全性依賴於計算離散對數問題,DH協議的方案:

1、Alice和Bob先對p 和g達成一致,而且公開出來。Eve也就知道它們的值了。
2、Alice取一個私密的整數a,不讓任何人知道,發給Bob 計算結果:\(A=g^a mod p\). Eve 也看到了A的值。
3、類似,Bob 取一私密的整數b,發給Alice計算結果\(B=g^b mod p\).同樣Eve也會看見傳遞的B是什么。
4、Alice 計算出\(K'=B^a mod p=(g^b)^a mod p=g^{ab} mod p\).
5、Bob 也能計算出\(K=A^b mod p=(g^a)^b mod p=g ^{ab} mod p\).
6、Alice 和 Bob 現在就擁有了一個共用的密鑰K/K'.
7、雖然Eve看見了p,g, A and B, 但是鑒於計算離散對數的困難性,她無法知道a和b 的具體值。所以Eve就無從知曉密鑰K/K' 是什么了。

中間人攻擊

簡單描述為:一個中間人“丙”在信道的中間進行兩次DH密鑰交換,一次和甲,另一次和乙,就能夠成功的向甲假裝自己是乙,反之亦然。

而攻擊者可以解密(讀取和存儲)任何一個人的信息並重新加密信息,然后傳遞給另一個人。因此通常都需要一個能夠驗證通訊雙方身份的機制來防止這類攻擊。

有很多種安全身份驗證解決方案使用到了DH密鑰交換。例如當甲和乙共有一個公鑰基礎設施時,可以將他們的返回密鑰進行簽名。

參考

1、DH 密鑰交換算法
2、Diffie–Hellman 密鑰交換協議簡介


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM