Diffie-Hellman密鑰交換

DH密鑰交換是一種安全協議,它可讓雙方在不安全的信道上建立一個密鑰。雙方互相發送的數據就算被第三方知曉,也沒法知道加密信息的密鑰。安全

其解決問題的主要思想能夠用下圖來解釋: 微信

在這裏插入圖片描述

Alice和Bob想要協商出一個只有它們兩人知道的顏色,不能讓第三方知道,怎麼辦呢?解決辦法以下:加密

  1. 先從它們共同擁有的顏色(圖中爲黃色)開始,這個黃色是你們都知道的,第三方知道也沒有關係。
  2. Alice選了一個只有本身知道的顏色(圖中爲紅色),並將之混入你們知道的黃色中,造成新的顏色(圖中爲棕色)。
  3. Bob也選了一個只有本身知道的顏色(圖中爲淡綠色),並將之混入你們都知道的黃色中,造成新的顏色(圖中爲淺藍色)。
  4. Alice和Bob交換混合後的顏色。(這裏假定人們很難從混合顏色中找到是哪兩種顏色混合的,安全性保證取決於此,因此即便第三方知道了混合後的顏色也沒有用,由於它推斷不出來只有Alice和Bob本身掌握的紅色和淡綠色)
  5. Alice收到Bob發送過來的混合色後,再加入只有本身知道的紅色,獲得祕密顏色=黃色+紅色+淡綠色(圖中爲土色,在圖的最下方)。
  6. Bob收到Alice發送過來的混合色後,再加入只有本身知道的淡綠色,獲得祕密顏色=黃色+淡綠色+紅色。
  7. 至此,Alice和Bob各自擁有了只有它們兩人知道的祕密顏色,且祕密顏色是相同的。

這裏的關鍵是,混合後的顏色,人們沒法知曉是由哪兩種顏色混合而成的。由此,很容易想到數學難題,離散對數問題。數學描述以下: .net

在這裏插入圖片描述

這裏,a只有Alice知道,b只有Bob知道,g,p是公開的,K是最終計算出的共享密鑰。3d

通常描述以下:cdn

  1. Alice和Bob協商一個有限循環羣G和它的一個生成元g,一個大素數p;
  2. Alice生成一個隨機數a,計算A=g^a mod\ p,將A發送給Bob;
  3. Bob生成一個隨機數b,計算B=g^b mod\ p,將B發送給Alice;
  4. Alice計算K=B^a mod\ p=(g^b)^a mod\ p,獲得共享密鑰K
  5. Bob計算K=A^b\ mod\ p=(g^a)^b\ mod\ p,獲得共享密鑰K

(g^b)^a=(g^a)^b由於羣是乘法交換的,涉及到數論及代數的內容。Alice和Bob同時協商出K,做爲共享密鑰。blog

最後,安全性問題,DH密鑰交換能夠防竊聽(即,你知道咱們交換的數據也不要緊),可是DH自己並無提供通信雙方的身份驗證服務(正確交換的前提是,Alice必須確保對方是Bob),沒法抵禦中間人攻擊。圖片

參考文檔:Diffie–Hellman key exchangeip

歡迎關注微信公衆號,天天進步一點點,Let's go! 文檔

相關文章
相關標籤/搜索