迪菲 赫爾曼金鑰交換

2021-07-26 09:53:34 字數 1801 閱讀 3762

迪菲-赫爾曼金鑰交換(diffie–hellman key exchange,簡稱「d–h」) 是一種安全協議。它可以讓雙方在完全沒有對方任何預先資訊的條件下通過不安全通道建立起乙個金鑰。這個金鑰可以在後續的通訊中作為對稱金鑰來加密通訊內容。

迪菲-赫爾曼通過公共通道交換乙個資訊,就可以建立乙個可以用於在公共通道上安全通訊的共享秘密(shared secret)。

交換資訊的整個過程:

其中g、p、a、b是公開在網路中傳輸,a、b是秘密的。
最早提出這個協議使用乙個素數p的整數模n乘法群以及其原根g。下面展示這個演算法,綠色表示非秘密資訊,紅色表示秘密資訊。

愛麗絲和鮑勃最終都得到了相同的值,因為在模p下g^ab和g^ba相等,注意a,b和g^ab = g^ba mod p 是秘密的,其他所有的值-p,g,g^a mod p以及g^b mod p-都可以在公共通道上傳遞,一旦愛麗絲和鮑勃得出了公共秘密。他們就可以把它用作對稱金鑰,進行雙方的加密通訊,因為這個金鑰只有他們才能得到,當然,為了是這個例子變得安全,必須使用非常大的a,b以及p,否則以實驗所有g^ab mod 23的可能取值(總共有最多22個這樣的值,計算a和b很大也無濟於事)。如果p是至少300位的質數,並且a和b至少有100位長,那麼即使使用全人類所有的計算資源和當今最好的演算法也不可能從g,p和g^b mod p 中計算出a,這個問題就是著名的離散對數問題,注意g則不需要很大,並且在一般的實踐中通常是2或者5,ietf rfc3256文件中有幾個常用的大素數可供使用。

演算法理論證明:

設 a(alice)、b(bob)分別為愛麗絲和鮑勃兩人

1、a: g^a mod p = m (eg:g=5,p= 23;)

2、b: g^b mod p = n

之後a、b兩人交換m,n再次進行運算

3、a: n^a mob p = m^b mob p :b

下面對上式進行證明,先證明乙個引理

假設有 g mod p = c ,則 g^a mod p = c^a mod p

因為:g mod p = c ,則必然存在唯一整數x, 使 g = px +c

g^a = (px +c )^a = ………(二項式定理展開)

兩邊同時除以p 我們發現等式右邊(二項式展開部分)除去項c^a外,p的次數都大於0,所以除以p的餘數必然由c^a這一項產生。

所以: g^a mod p = c^a mod p

引理證明完畢。

所以 (g mod p)^a = c^a

於是 (g mod p)^a mod p = c^a mod p = g^a mod p

以上過程主要證明:

(g mod p) ^a mod p = g^a mod p

所有對於任意的a,b都有以下式成立

(g^a mod p)^b mod p = (g^a)^b mod p = (g^b mod p)^a mod p

注:二項式分解過程

(px+c)^a = c(a,0)(px)^a + c(a,1)(px)^(a-1)*c + c(a,2)(px)^(a-2)*c^2 + … +c(a,a-2)(px)^2*c^(a-2) + c(a,a-1)(px)*c(a-1) + c(a,a)n^a

參考:

迪菲 赫爾曼金鑰交換

迪菲 赫爾曼金鑰交換 英語 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...