1. 程式人生 > >Diffie-Hellman密鑰協商算法

Diffie-Hellman密鑰協商算法

關聯性 正是 兩種方法 mar htm public 技術分享 不同 過程

一、概述

Diffie-Hellman密鑰協商算法主要解決秘鑰配送問題,本身並非用來加密用的;該算法其背後有對應數學理論做支撐,簡單來講就是構造一個復雜的計算難題,使得對該問題的求解在現實的時間內無法快速有效的求解(computationally infeasible )。

理解Diffie-Hellman密鑰協商的原理並不困難,只需要一點數論方面的知識既可以理解,主要會用到簡單的模算術運算、本原根、費馬小定理、離散對數等基礎數論的知識。在現代密碼學中的基礎數論知識梳理中已經對這些知識做了必要的總結。

二、從何而來

DH密鑰協商算法在1976年在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^{A}\;mod\;p=Y_{a}$,將結果$Y_{a}$通過公網發送給Bob;與此同時,Bob也產生一個私有的隨機數$B$,滿足$1 \leqslant B\leqslant p-1$,計算$g^{B}\;mod\;p=Y_{b}$,將結果$Y_{b}$通過公網發送給Alice。

技術分享圖片

3)此時Alice知道的信息有$p,g,A,Y_{a}$,其中數字$A$是Alice私有的,只有她自己知道,別人不可能知道,其他三個信息都是別人有可能知道的;Bob知道的信息有$p,g,A,Y_{A}$,其中數字$B$是Bob私有的,只有他自己知道,別人不可能知道,其他都是別人有可能知道的。

到目前為止,Alice和Bob之間的秘鑰協商結束。

Alice通過計算$K_{a}=(Y_{b})^A\;mod\;p$得到秘鑰$K_{a}$,同理,Bob通過計算$K_{b}=(Y_{a})^B\;mod\;p$得到秘鑰$K_{b}$,此時可以證明,必然滿足$K_{a}=K_{b}$。因此雙方經過協商後得到了相同的秘鑰,達成秘鑰協商的目的。

證明:

對於Alice有:

$K_{a}=(Y_{b})^A\;mod\;p=(g^B\;mod\;p)^{A}\;mod\;p=g^{B\times A}\;mod\;p$

對於Bob有:

$K_{b}=(Y_{a})^B\;mod\;p=(g^{A}\;mod\;p)^{B}\;mod\;p=g^{A\times B}\;mod\;p$

可見,Alice和Bob生成秘鑰時其實是進行相同的運算過程,因此必然有$K_{a}=K_{b}$。"相同的運算過程"是雙方能夠進行秘鑰協商的本質原因,類似的利用橢圓曲線進行秘鑰協商也是與之相同的原理。

更嚴密地考慮,$A$和$B$不應該選擇$p-1$,也就是說只能在集合$\left \{ 1,2,3,...,p-2 \right \}$中選擇。這是因為如果選擇$p-1$,那麽由費馬小定理可知,情況就退化成了$g^{p-1}\equiv1\;(mod\;p)$的情況,對秘鑰協商的機密性構成威脅。

所以總結起來,整個流程串起來大概就是這樣:

技術分享圖片

那麽竊聽者Eve能否破解秘鑰呢?首先要知道Eve能夠得知哪些信息,顯然Eve能夠竊聽到的信息只能有$p,g,Y_{a},Y_{b}$,現在的問題是Eve能夠通過以上信息計算出$K_{a}$或者$K_{b}$嗎?要計算$K_{a}$或者$K_{b}$需要知道$A$或者$B$。

以計算$A$為例,Eve能根據條件$g^{A}\;mod\;p=Y_{a}$計算出$A$嗎?實際上當$p$是大質數的時候,這是相當困難的,這就是離散對數問題。實際上在論文發表的當時,計算該問題的最有效的算法的時間復雜度大約是$O(\sqrt{p})$。也正是求解該問題在計算上的困難程度保證了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_{a}=3^{15}\;mod\;17=14348907\;mod\;17=6$,將6發送給Bob;同時Bob也選定一個私有的數字,假設$B=13$,計算$Y_{a}=3^{13}\;mod\;17=1594323\;mod\;17=12$,將12發送給Alice。

3)Alice計算秘鑰$K_{a}=12^{15}\;mod\;17=2147483647\;mod\;17=8$,Bob計算秘鑰$K_{b}=6^{13}\;mod\;17=2147483647\;mod\;17=8$。雙方經過協商後,8最終成為雙方的協商的秘鑰。

實際上,當指數和模數的位數都比較大的時候,存在一種快速計算冪取模的算法叫做“反復平方算法”,實現取來也比較簡單,在算法導論中第三十一章有相應的解釋。

五、存在的問題

是否DH秘鑰協商算法就一定安全呢?應該說也不是,因為存在一種偽裝者攻擊(或者稱為中間人攻擊)能夠對這種秘鑰協商算法構成威脅。

假設秘鑰協商過程中,在Alice和Bob中間有一個稱為Mallory的主動攻擊者,他能夠截獲Alice和Bob的消息並偽造假消息,考慮如下情況。

1)Alice和Bob已經共享一個素數$p$及其該素數$p$的本原根$g$,當然Mallory監聽到報文也得知了這兩個消息。

2)此時Alice計算$Y_{a}=g^{A}\;mod\;p$,然而在將$Y_{a}$發送給Bob的過程中被Mallory攔截,Mallory自己選定一個隨機數$S$,計算$Y_{sb}=g^{S}\;mod\;p$,然後將$Y_{sb}$發送給了Bob。

技術分享圖片

3)同時Bob計算$Y_{b}=g^{B}\;mod\;p$,然而在將$Y_{b}$發送給Alice的過程中被Mallory攔截,Mallory自己選定一個隨機數$T$,計算$Y_{ta}=g^{T}\;mod\;p$,然後將$Y_{ta}$發送給了Alice。

技術分享圖片

由於通訊消息被替換,Alice計算出的秘鑰實際上是Alice和Mallory之間協商秘鑰:$K_{am}=g^{A \times T}\;mod\;p$;Bob計算出的秘鑰實際上是Bob與Mallory之間協商的秘鑰:$K_{bm}=g^{B \times S}\;mod\;p$。如果之後Alice和Bob用他們計算出的秘鑰加密任何信息,Mallory截獲之後都能夠解密得到明文,而且Mallory完全可以偽裝成Alice或者Bob給對方發消息。

六、References

1、New Directions in Cryptography

2、密碼編碼學與網絡安全原理與實踐

3、圖解密碼技術

Diffie-Hellman密鑰協商算法