基於離散對數的密碼學-Diffie-Hellman算法


一、概述

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⩽g⩽p−1。這兩個數是可以不經過加密地由一方發送到另一方,至於誰發送給並不重要,其結果只要保證雙方都得知p和g即可。

 

2)然后Alice產生一個私有的隨機數A,滿足1⩽A⩽p−1,然后計算gAmodp=Ya,將結果Ya通過公網發送給Bob;與此同時,Bob也產生一個私有的隨機數B,滿足1⩽B⩽p−1,計算gBmodp=Yb,將結果Yb通過公網發送給Alice。

 

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

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

Alice通過計算Ka=(Yb)Amodp得到秘鑰Ka,同理,Bob通過計算Kb=(Ya)Bmodp得到秘鑰Kb,此時可以證明,必然滿足Ka=Kb。因此雙方經過協商后得到了相同的秘鑰,達成秘鑰協商的目的。

證明:

對於Alice有:

Ka=(Yb)Amodp=(gBmodp)Amodp=gB×Amodp
對於Bob有:

Kb=(Ya)Bmodp=(gAmodp)Bmodp=gA×Bmodp
可見,Alice和Bob生成秘鑰時其實是進行相同的運算過程,因此必然有Ka=Kb。"相同的運算過程"是雙方能夠進行秘鑰協商的本質原因,類似的利用橢圓曲線進行秘鑰協商也是與之相同的原理。

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

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

 

那么竊聽者Eve能否破解秘鑰呢?首先要知道Eve能夠得知哪些信息,顯然Eve能夠竊聽到的信息只能有p,g,Ya,Yb,現在的問題是Eve能夠通過以上信息計算出Ka或者Kb嗎?要計算Ka或者Kb需要知道A或者B。

以計算A為例,Eve能根據條件gAmodp=Ya計算出A嗎?實際上當p是大質數的時候,這是相當困難的,這就是離散對數問題。實際上在論文發表的當時,計算該問題的最有效的算法的時間復雜度大約是O(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,計算Ya=315mod17=14348907mod17=6,將6發送給Bob;同時Bob也選定一個私有的數字,假設B=13,計算Ya=313mod17=1594323mod17=12,將12發送給Alice。

3)Alice計算秘鑰Ka=1215mod17=2147483647mod17=8,Bob計算秘鑰Kb=613mod17=2147483647mod17=8。雙方經過協商后,8最終成為雙方的協商的秘鑰。

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

五、存在的問題


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

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

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

2)此時Alice計算Ya=gAmodp,然而在將Ya發送給Bob的過程中被Mallory攔截,Mallory自己選定一個隨機數S,計算Ysb=gSmodp,然后將Ysb發送給了Bob。

 

3)同時Bob計算Yb=gBmodp,然而在將Yb發送給Alice的過程中被Mallory攔截,Mallory自己選定一個隨機數T,計算Yta=gTmodp,然后將Yta發送給了Alice。

 

由於通訊消息被替換,Alice計算出的秘鑰實際上是Alice和Mallory之間協商秘鑰:Kam=gA×Tmodp;Bob計算出的秘鑰實際上是Bob與Mallory之間協商的秘鑰:Kbm=gB×Smodp。如果之后Alice和Bob用他們計算出的秘鑰加密任何信息,Mallory截獲之后都能夠解密得到明文,而且Mallory完全可以偽裝成Alice或者Bob給對方發消息。

 

 

https://www.cnblogs.com/qcblog/p/9016704.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM