diffie-hellman金鑰協商演算法主要解決秘鑰配送問題,本身並非用來加密用的;該演算法其背後有對應數學理論做支撐,簡單來講就是構造乙個複雜的計算難題,使得對該問題的求解在現實的時間內無法快速有效的求解(computationally infeasible
)。理解diffie-hellman金鑰協商的原理並不困難,只需要一點數論方面的知識既可以理解,主要會用到簡單的模算術運算、本原根、費馬小定理、離散對數等基礎數論的知識。在現代密碼學中的基礎數論知識梳理
中已經對這些知識做了必要的總結。
dh金鑰協商演算法在2023年在whitfield diffie和martin hellman兩人合著的**new directions in cryptography(section ⅲ public key cryptography)中被作為一種公開秘鑰分發系統(public key distribution system)被提出來。原文的敘述過程比較簡單,但基本闡述了演算法的原理以及其可行性。
在該**中實際上提出了一些在當時很有創新性的思想。原**重點討論兩個話題:
(1)在公網通道上如何進行安全的秘鑰分派。
(2)認證(可以細分為訊息認證和使用者認證)。
為了解決第乙個問題,原文提出兩種方法:公鑰加密系統(public key cryptosystem
)和秘鑰分發系統(public key distribution system)。對於公鑰加密系統,原文只是勾畫了一種比較抽象的公鑰加密系統的概念模型,重點是加解密採用不同的秘鑰,並總結了該系統應該滿足的一些特性,相當於是一種思想實驗,並沒有給出具體的演算法實現途徑,但這在當時應該來說已經足夠吸引人。後來rsa三人組(ron rivest、adi shamir 和 leonard adleman)受此啟發,經過許多輪失敗的嘗試後,於第二年在**a method for obtaining digital signatures and public-key cryptosystems中提出了切實可行且很具體的公鑰加密演算法--rsa公鑰加密演算法。而對於秘鑰分發系統,就是本文的dh秘鑰協商演算法。
為了解決第二個問題,原文通過單向函式(one-way function)來解決,這就是單向認證的問題。另外作者還討論了這些密碼學問題之間的關聯性以及如何相互轉化。比如乙個安全的密碼系統(可以防禦明文攻擊)可以用來生成乙個的單向函式、公鑰加密系統可以用來作為單向認證、陷門密碼系統可以用來生成乙個公鑰加密系統。數學難題的計算複雜度被當成一種保障密碼學安全問題的有效工具被利用起來,這一重要思想貫穿現代密碼學的許多加密演算法。
按照慣例,以alice和bob這兩個密碼學中的網紅為角色,述闡dh演算法的流程。
假設alice需要與bob協商乙個秘鑰(秘鑰本質上就是乙個位元序列,從計算的角度看就是乙個大數)。
1)首先alice與bob共享乙個素數$p$以及該素數$p$的本原根$g$(geneator),當然這裡有$2\leqslant g\leqslant p-1$。這兩個數是可以不經過加密地由一方傳送到另一方,至於誰傳送給並不重要,其結果只要保證雙方都得知$p$和$g$即可。
2)然後alice產生乙個私有的隨機數$a$,滿足$1 \leqslant a\leqslant p-1$,然後計算$g^\;mod\;p=y_$,將結果$y_$通過公網傳送給bob;與此同時,bob也產生乙個私有的隨機數$b$,滿足$1 \leqslant b\leqslant p-1$,計算$g^\;mod\;p=y_$,將結果$y_$通過公網傳送給alice。
3)此時alice知道的資訊有$p,g,a,y_$,其中數字$a$是alice私有的,只有她自己知道,別人不可能知道,其他三個資訊都是別人有可能知道的;bob知道的資訊有$p,g,b,y_$,其中數字$b$是bob私有的,只有他自己知道,別人不可能知道,其他都是別人有可能知道的。
到目前為止,alice和bob之間的秘鑰協商結束。
alice通過計算$k_=(y_)^a\;mod\;p$得到秘鑰$k_$,同理,bob通過計算$k_=(y_)^b\;mod\;p$得到秘鑰$k_$,此時可以證明,必然滿足$k_=k_$。因此雙方經過協商後得到了相同的秘鑰,達成秘鑰協商的目的。
證明:對於alice有:
$k_=(y_)^a\;mod\;p=(g^b\;mod\;p)^\;mod\;p=g^\;mod\;p$
對於bob有:
$k_=(y_)^b\;mod\;p=(g^\;mod\;p)^\;mod\;p=g^\;mod\;p$
可見,alice和bob生成秘鑰時其實是進行相同的運算過程,因此必然有$k_=k_$。"相同的運算過程"是雙方能夠進行秘鑰協商的本質原因,類似的利用橢圓曲線進行秘鑰協商也是與之相同的原理。
更嚴密地考慮,$a$和$b$不應該選擇$p-1$,也就是說只能在集合$\left \$中選擇。這是因為如果選擇$p-1$,那麼由費馬小定理可知,情況就退化成了$g^\equiv1\;(mod\;p)$的情況,對秘鑰協商的機密性構成威脅。
所以總結起來,整個流程串起來大概就是這樣:
那麼竊聽者eve能否破解秘鑰呢?首先要知道eve能夠得知哪些資訊,顯然eve能夠竊聽到的資訊只能有$p,g,y_,y_$,現在的問題是eve能夠通過以上資訊計算出$k_$或者$k_$嗎?要計算$k_$或者$k_$需要知道$a$或者$b$。
以計算$a$為例,eve能根據條件$g^\;mod\;p=y_$計算出$a$嗎?實際上當$p$是大質數的時候,這是相當困難的,這就是離散對數問題。實際上在**發表的當時,計算該問題的最有效的演算法的時間複雜度大約是$o(\sqrt)$。也正是求解該問題在計算上的困難程度保證了dh演算法的安全性。如果能夠找到對數時間複雜度的演算法,那麼該演算法即容易被攻破。
1)假設alice和bob共享的$p$和$g$分別是$p=17,g=3$,顯然這裡$g=3$是$p=17$的乙個本原根,實際上$3,5,6,7,10,11,12,14$都是17的本原根。
2)然後alice選定乙個私有數字,假設$a=15$,計算$y_=3^\;mod\;17=14348907\;mod\;17=6$,將6傳送給bob;同時bob也選定乙個私有的數字,假設$b=13$,計算$y_=3^\;mod\;17=1594323\;mod\;17=12$,將12傳送給alice。
3)alice計算秘鑰$k_=12^\;mod\;17=2147483647\;mod\;17=8$,bob計算秘鑰$k_=6^\;mod\;17=2147483647\;mod\;17=8$。雙方經過協商後,8最終成為雙方的協商的秘鑰。
實際上,當指數和模數的位數都比較大的時候,存在一種快速計算冪取模的演算法叫做「反覆平方演算法」,實現取來也比較簡單,在演算法導論中第三十一章有相應的解釋。
是否dh秘鑰協商演算法就一定安全呢?應該說也不是,因為存在一種偽裝者攻擊(或者稱為中間人攻擊)能夠對這種秘鑰協商演算法構成威脅。
假設秘鑰協商過程中,在alice和bob中間有乙個稱為mallory的主動攻擊者,他能夠截獲alice和bob的訊息並偽造假訊息,考慮如下情況。
1)alice和bob已經共享乙個素數$p$及其該素數$p$的本原根$g$,當然mallory監聽到報文也得知了這兩個訊息。
2)此時alice計算$y_=g^\;mod\;p$,然而在將$y_$傳送給bob的過程中被mallory攔截,mallory自己選定乙個隨機數$s$,計算$y_=g^\;mod\;p$,然後將$y_$傳送給了bob。
3)同時bob計算$y_=g^\;mod\;p$,然而在將$y_$傳送給alice的過程中被mallory攔截,mallory自己選定乙個隨機數$t$,計算$y_=g^\;mod\;p$,然後將$y_$傳送給了alice。
由於通訊訊息被替換,alice計算出的秘鑰實際上是alice和mallory之間協商秘鑰:$k_=g^\;mod\;p$;bob計算出的秘鑰實際上是bob與mallory之間協商的秘鑰:$k_=g^\;mod\;p$。如果之後alice和bob用他們計算出的秘鑰加密任何資訊,mallory截獲之後都能夠解密得到明文,而且mallory完全可以偽裝成alice或者bob給對方發訊息。
1、new directions in cryptography
2、密碼編碼學與網路安全原理與實踐
3、**密碼技術
Diffie Hellman金鑰交換
最近在看網課的時候了解了diffie hellman金鑰交換演算法,這裡記錄下來。在公共網路中傳輸資料,很容易被第三方擷取。為了加強資料安全需要使用加密演算法。dh金鑰就是其中一種。dh金鑰就是很好的一種演算法是一種安全協議。能允許雙方在不安全的通道上建立只有彼此知曉的金鑰,其他人即使能看到傳輸的資...
Diffie Hellman金鑰交換
diffie hellman金鑰交換 dhke 是由whitfield diffie和martin hellman在1976年提出的。金鑰交換方案提供了實際中金鑰分配問題的解決方案,即允許雙方通過不安全的通道進行交流獲得乙個共同金鑰。許多公開和商業密碼協議中都實現了這種基本的金鑰協議技術,比如安全外...
Diffie Hellman 金鑰交換協議
設p 是乙個素數,gf p 上的離散對數是困難的,設 g為其生成元,為達到通訊雙方共享金鑰的目的,通訊雙方a和 b分別進行如下操作。1 a 進行如下兩步操作 隨機選取乙個整數 xa,0 xa 計算ya gxa mod p,將ya 傳送給b 2 b進行如下兩步操作 隨機選取乙個整數xb,0 xb傳送給...