迪菲-赫爾曼金鑰交換(英語:diffie–hellman key exchange,縮寫為d-h) 是一種安全協議。它可以讓雙方在完全沒有對方任何預先資訊的條件下通過不安全通道建立起乙個金鑰。這個金鑰可以在後續的通訊中作為對稱金鑰來加密通訊內容。
對稱加密的問題就是雙方使用同一把鑰匙加密解密,此鑰匙容易讓中間人獲取從而竊取資料,那麼,假設存在下面這樣一種可能:
如果a方、b方使用的鑰匙有這樣一種特點:
1.這把鑰匙可以由多把鑰匙組合而成:
2.即使拿到合成之後的鑰匙和任意一把合成之前的鑰匙也不可能得到另一把合成之前的鑰匙:
3.合成之後的鑰匙可以再與另一把鑰匙合成:
現在如果有了這樣一把鑰匙,我們就可以在這把鑰匙的基礎上構建出安全的金鑰交換過程了,至於這樣的鑰匙怎麼生成,下面我們會提到,我們先來看看我們有了這樣一種鑰匙之後怎麼構建一套安全的金鑰交換過程:
a方生成了自己的一把鑰匙,傳送給了b方,這把鑰匙是公開的:
然後,a方和b方又生成了自己各自的鑰匙sa和sb,這兩把鑰匙是私鑰,是不能被別人獲取的:
a方b方分別使用自己的私鑰和剛才的公鑰p進行組合,生成了新的兩把鑰匙p-sa和p-sb:
然後互換兩把組合鑰匙:
然後,a方和b方再分別用剛才自己的私鑰sa和sb與p-sb和p-sa組合成新的兩把鑰匙,此時我們發現,兩把鑰匙是相同的,都是p-sa-sb:
至此,a方和b方獲得了相同的鑰匙,現在他們可以使用這把共同的鑰匙進行對稱加密解密了,這就是迪菲-赫爾曼金鑰交換。
試想,我們現在想要攻擊這個金鑰交換系統,現在我們能夠攔截的鑰匙只有p,p-sb,p-sa,因此,無法靠這幾種鑰匙合成出想要的p-sa-sb鑰匙。
說的好聽,但是這種方法是要建立在我們能夠研究出這樣乙個鑰匙的基礎上的,這一點要感謝bailey whitfield diffie,martin edward hellman和ralph c. merkle,他們真的使用數學從無到有地創造出具有這樣特性的鑰匙出來了。
鑰匙的數學原理是這樣的:
首先,mod運算我們應該都清楚,就是取餘運算,例如:5 mod 3 = 2,3 mod 3=0,1 mod 3 = 1。
前文所說的開始的p鑰匙指的就是p,g兩個數,p是乙個非常大的素數,g是從素數p中的被稱為起源或者原始根的數字中選擇,現在,a方將這兩個數傳送給了b:
接下來,a方和b方分別準備了秘密數字x和y,並且x和y都要小於p-2:
接下來a和b分別計算g的x次冪對p取模,g的y次冪對p取模,這裡的x,y相當於鑰匙sa和sb,我們現在做的這一步相當於將p鑰匙分別與sa和sb鑰匙進行合成:
a方和b方將計算結果互相傳送給對方:
接下來,a和b分別將得到的計算結果使用自己的私有x,y值進行冪運算,再進行取模,前面提到冪運算+取模運算相當於合成鑰匙,這裡也是如此:
至此,非常神奇的時,我們突然發現,a方的計算結果和b方的計算結果相同,這個相同的結果,就是我們進行對稱加密時使用的鑰匙了!而且,在這個結果的產生過程中,攻擊人難以拼湊所有的資訊來得到這個鑰匙,也就實現了我們前文所說的安全性了,這還要感謝三位機智的密碼學家。
迪菲 赫爾曼金鑰交換
迪菲 赫爾曼金鑰交換 diffie hellman key exchange,簡稱 d h 是一種安全協議。它可以讓雙方在完全沒有對方任何預先資訊的條件下通過不安全通道建立起乙個金鑰。這個金鑰可以在後續的通訊中作為對稱金鑰來加密通訊內容。迪菲 赫爾曼通過公共通道交換乙個資訊,就可以建立乙個可以用於在...
迪菲 赫爾曼金鑰交換
迪菲 赫爾曼金鑰交換是一種可以再通訊雙方之間安全地交換金鑰的方法。按步驟進行 通訊方a 通訊方b 生成 金鑰p 金鑰p 生成 金鑰sa 生成 金鑰sb 金鑰p 金鑰sa 合成 金鑰p sa 金鑰p 金鑰sb 合成 金鑰p sb 金鑰p sa 金鑰p sb 金鑰p sb 金鑰sa 合成 金鑰p sb ...
最優二叉樹 赫爾曼樹(學習記錄)
注意vector儲存的記憶體位址可能會變,所以如果用vector來儲存所有節點的話,需要先resize好容器,保證期間不進行節點的增減。multiset是允許關鍵字重複的容器 include include include include using namespace std struct nod...