非對稱加密演算法 Diffie Hellman演算法

2021-09-12 08:34:26 字數 4228 閱讀 7350

之前寫的乙個文章,現在發上來....

:

非對稱加密演算法又稱公開金鑰加密演算法,非對稱加密是相對於對稱加密而言的,對稱加密指的是通訊雙方使用的金鑰是一致的,而非對稱加密就是演算法使用的金鑰不一致。非對稱加密的好處是當通訊雙方沒有事先協商金鑰的情況下也能進行安全通訊,而在網際網路普及的今天,很多通訊雙方往往在事先是無法協商好金鑰的,從而非對稱加密演算法得到了廣泛應用,本文主要闡述diffie-hellman金鑰交換這一非對稱加密演算法。

傳統的加密通訊需要通訊雙方共享乙個金鑰,即用於加密和解密的金鑰,此種方法的乙個問題就是雙方必須就共享金鑰達成一致,但是共享金鑰的傳輸又需要通訊,從而該金鑰有著被攻擊者竊取的風險。在網際網路普及的今天,在網路世界中通訊各方之間可能從來沒有接觸過,即需要一種在沒有預先共享金鑰的情況下能進行安全通訊的方法,即所謂的非對稱加密算

法[1]。

假設a要和b

之間需要通訊,但是a與

b並未共享乙個金鑰,在此情況下他們之間如何進行安全通訊呢?為了方便闡述非對稱加密的概念,假定通訊者a與

b共享乙個公鑰,這個公鑰是公開的,任何人都可以獲得(對於攻擊者來說也是如此),該公鑰用

kpublic

表示。a

可以持有乙個私鑰

kprivatea,

a基於這個私鑰

kprivate

a進行某種運算f即

f(kprivatea,

kpublic)。

b也隨機生成私鑰

kprivate

b進行運算f即

f(kprivateb,

kpublic

),緊接著a,

b以明文方式交換他們的運算結果(入侵者可以擷取到該資訊),即此時

a獲得了f(k

privateb,

kpublic)記為

fb,b

獲得了f(

kprivatea,

kpublic)記為

fa。然後a與b

進行運算g,即

a運算得到g(f

b,kprivatea,

kpublic),

b運算得到g(f

a,kprivateb,

kpublic

),分別記做ga

和gb,並且存在著這樣的運算f和

g使得ga

=gb,此時ga

和gb分別是a與

b的新的私鑰,即通訊中加密

/解密的私鑰

。從上面的過程來看a,

b之間任何一方都無須分發任何敏感的私鑰(初始的私鑰是各自持有的,無須在通道上傳輸)。假定在a,

b通訊的過程中有乙個攻擊者

c截獲了他們之間的報文,顯然入侵者只能獲取

kpublic,f(

kprivateb,

kpublic)與

f(kprivatea,

kpublic

),而無法獲得真正的私鑰ga

和gb,因此無法解密報文,保證了通訊的安全性。下面我們將介紹應用這一過程的演算法

-diffie-hellman

金鑰交換演算法。

diffie-hellman金鑰交換演算法基於數論知識,最初由whitefield與martin hellman在2023年提出[2] ,該演算法本質上是乙個確保共享的私鑰穿越不安全網路的方法,它基於單向函式這樣乙個概念,單向函式的基本思想就是單向函式計算起來相對容易,但求逆運算卻非常困難。也就是說,已知x, 我們很容易計算f(x), 但已知f(x), 卻很難計算出x。diffie-hellman演算法運用的單向函式是模運算,如下所示:f(x) = x mod p,已知x與p很容易計算f(x),但是已知f(x)與p卻很難準確計算出x,因為x的取值非常多,特別是當x和p取很大的值時[3] 。

為了方便敘述,假設a和b需要進行安全通訊,需要安全地生成乙個金鑰,而中間有乙個攻擊者c在竊聽,其基本步驟如下:

1.a和

b公開乙個數

a和素數模

p,假設分別為5和

23,即公鑰,這個資訊是a,

b和攻擊者c

都掌握的。

2.a隨機選擇乙個數,記為s1

,假設為

29,即

a的私鑰,計算單向函式f(s

1) = 5s

1mod 23

的值,記為f1

(此處計算得

17),然後將計算得到的值傳送給

b。在這個過程中

, b得到單項函式的值

17,攻擊者c

也能截獲。

3.b也選擇乙個數,記為s2

,假設為

33,即

b的私鑰

, 計算單向函式f(s

2) =  5s

2mod 23

的值,記為f2

(此處為

22),然後將計算得到的值傳送給

a。在這個過程中,

a得到單向函式的值

22,竊聽者

c也能截獲。 4.

定義函式g1

(x)=f2

xmod p,a

計算g1(

s1)的值作為金鑰,此例中為g1

(29) =

2229

mod 23=22。

5.定義函式g2

(x)=f1

xmod p

,b計算g2

(s2)

的值作為金鑰,此例中為g2

(33) =

1733

mod 23=22。

上述整個過程如下圖

1所示:

圖1  a,b

通訊過程

可以發現g1

(x)=g2

(x),即(as2

mod p)s

1mod p= (as1

mod p)s

1mod p 。事實上根據數論理論可以證明對任意整數,有上式成立。通訊雙方只需知道公鑰a,p以及交換非敏感資訊f1,f2就可以完成金鑰交換這一工作,從而在後續的通訊中使用生成的金鑰來加密/解密資訊。

使用python進行簡單的程式設計驗證,**如下圖2:(執行1000次輸出結果為success)

圖2  python驗證**

輸出結果如下圖3:

圖3  **輸出結果

diffie-hellman演算法的有效性依賴於計算離散對數的難度[4] ,即此時竊聽者儘管能截獲f1,

f2以及獲知所用的公鑰,但是想從f1

、f2、

a與p計算出指數s1

,s2是十分困難的,進而也就無法計算出私鑰g1

,g2。

diffie-hellman

演算法讓通訊雙方在完全沒有對方任何預先資訊的條件下通過不安全通道建立起乙個金鑰,這個金鑰一般作為對稱加密的金鑰而被雙方在後續資料傳輸中使用。

diffie-hellman

演算法僅當需要時才生成金鑰,減小了將金鑰儲存很長一段時間而致使遭受攻擊的機會,除對全域性引數即公鑰的約定外,金鑰交換不需要事先約定其它引數,這也是非對稱加密的優勢所在。然而

diffie-hellman

演算法也有著以下一些缺

點[5]:

通訊時沒有提供雙方身份的任何資訊;

該演算法是計算密集性的,因此容易遭受阻塞性攻擊,即對手請求大量的金鑰時本機會花費了相對多的計算資源來求解引數而不是在做真正的工作;

沒辦法防止重演攻擊,即攻擊者截獲了先前的整個過程的通訊報文,然後來重演這一過程,向本機重發一模一樣的報文;

容易遭受中間人的攻擊,即攻擊者c在和

a通訊時扮演

b,在和

b通訊時扮演a。

a和b都與

c協商了乙個金鑰,然後

c就可以監聽a,

b的通訊過程;

以上的一些缺點並沒有阻止

diffie-hellman

演算法在實際工程中的廣泛應用,通常可以採用一些輔助技術來彌補上述缺點,如數字簽名技術、鑑別協議與

mac(

message authentication code

)技術等。

對稱加密演算法 非對稱加密演算法

對稱加密演算法 對稱加密演算法是應用較早的加密演算法,技術成熟。在對稱加密演算法中,資料發信方將明文 原始資料 和加密金鑰一起經過特殊加密演算法處理後,使其變成複雜的加密密文傳送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的金鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文...

非對稱加密演算法

非對稱加密演算法非 對稱加密演算法 是一種金鑰的保密方法。非對稱加密演算法需要兩個金鑰 公開金鑰 publickey 和私有金鑰 privatekey 公開金鑰與私有金鑰是一對,如果用公開金鑰對資料進行加密,只有用對應的私有金鑰才能解密 如果用私有金鑰對資料進行加密,那麼只有用對應的公開金鑰才能解密...

非對稱加密演算法

使用非對稱加密加密演算法生成一對公鑰和私鑰,可以使用公鑰加密明文然後私鑰解密,也可以使用私鑰加密然後公鑰進行解密.核心是公鑰加密私鑰解密.甲方把公鑰交給要通訊的乙方,乙方使用甲方的公鑰進行加密資訊,然後把加密結果傳送給甲方,甲方收到加密資訊後使用私鑰進行解密.這樣就算第三者知道了公鑰和加密資訊也無法...