DH演算法初探

2021-09-27 15:16:51 字數 2381 閱讀 5806

剛接觸dh演算法,寫下此部落格以記之,如有不足之處請指正

在https協議中,client端和server端需要三個引數才能生成sessionkey來加密資訊。

三個引數分別是

client random(客戶端隨機數) 假設是c

server random(服務端隨機數) 假設是s

premaster random(待加密隨機數) 假設是p

前兩個都是通過明文的方式傳輸,即c從客戶端以明文的方式傳送給服務端,s從服務端以明文的傳送傳送給客戶端

而p則是最重要,也是最關鍵的資訊了,預設通過rsa演算法對其加密,再傳輸到服務端,服務端再用私鑰對密文進行解密,得到p。

如果被而已的第三方擷取了p加密後的密文,是否有p資訊洩露的危險呢?

我們知道rsa演算法的公鑰是對外公開的。假設公鑰對(e,n),金鑰對(d,n)那麼從客戶端傳送到服務端關於p的密文 m = p^e mod n

假設密文m被攻擊者攔截,如果要求得明文,必須求得

(log§m) mod n = e 的底數p,然而解除p是十分複雜的過程,所以攻擊者一般無法獲得p的值。或者說要獲得私鑰的話,ed = k f(n)[f = 尤拉函式] + 1, 而f(n) = f(p*q) = f§f(q) = (p-1)(q-1),而對n進行大素數分解的計算過程是十分難的。也不能通過m^d mod n 來獲得p

第二種演算法是dh演算法,假設dh演算法的數對為(p,q)

客戶端選取【1 ~ q - 1】中的乙個隨機數rc,通過計算得出乙個引數 pc

pc = (p ^ rc) mod q

服務端同樣選取【1 ~ q - 1】中的乙個隨機數rs,通過計算得出乙個引數 ps

ps = (p ^ rs) mod q

客戶將自己的pc引數交給服務端

服務端將自己的ps引數交給客戶端

服務端計算 pc ^ rs mod q = a

客戶端計算 ps ^ rc mod q = b

實際上a = b,下面來證明一下,

首先 要用到乙個定理

((w ^ x) mod y) ^ z mod y = w ^ (x * z) mod y

為什麼呢,設 u = (w ^ x) mod y , 那麼 u + ky = w^x (k為正整數)

即 : u = w^x - ky

(w^x - ky)^z 的中間的項和最後一項都含有y 而只有第一項w^(xy)

不含有y 所以

((w ^ x) mod y) ^ z mod y = w^(x*z) mod y

a = pc ^ rs mod q =

((p ^ rc) mod q) ^ rs mod q = p ^ (rc * rs) mod q

b = ps ^ rc mod q =

((p ^ rs) mod q) ^ rc mod q = p ^ (rc * rs) mod q

證明完畢,客戶端和服務端交換引數後計算得到的最終數字a 和 b是相等的,聰明的你應該猜到了, a = b 就是服務端和客戶端需要達成一致的premaster隨機數!

其實兩者交換的引數實際上是帶有他們各自生成的隨機數的資訊的,因為,傳輸的引數公式為 ,引數p = (p ^ 各自隨機數) mod q 當 p 和 q是已知的時候,攔截了p的話,要算出各自隨機數,則要算出

(log( p)p) mod q = 各自隨機數,對數運算複雜,但我沒有實際想辦法實際計算過大數的對數運算,先暫不做解析。

另外就是(p,q)對的選取,

p^x mod q = l (x = 1, 2 , 3, 4 …)

當l從1開始向上逐一遞增,l的取值不能週期性變化,

假設l以6為週期變化

那麼p^1 mod q = p^7 mod q = p^13 mod q = …

假如我們是攻擊者

假設我們知道了

pc = (p ^ rc) mod q 中 pc的值

ps = (p ^ rs) mod q 中ps的值

因為p^x mod q = l是呈週期性變化的,我們就能輕易找到乙個數 o

讓 ps = (p ^ o) mod q

假設週期是6,那麼 o 和原來服務端隨機數rs的差值就是6*k(k為整數)

那麼我們只要計算ans = pc ^ o mod q = p ^ (rc * o) mod q =

p ^ (rc * (rs + 6*k)) mod q = p ^ (rc * rs + 6 *k *rc )) mod q

因為p^x mod q = l是以6為週期變化的,又因為6 *k *rc是6的整數倍,所以p ^ (rc * rs + 6 *k *rc )) mod q = p ^ (rc * rs) mod q

我們盜取premaster成功!

所以(p,q)對的分布要滿足p^x mod q = l,x取【1~ q -1】的時候,l的取值是無序不重複的

DH 演算法原理

dh 演算法原理 一 背景 dh演算法全稱為diffie hellman演算法。這種方法可以在不安全的網路環境中協商金鑰。二 原理 步驟1 傳送方和接收方設定相同的大數數n和g,這兩個數不是保密的,他們可以通過非安全通道來協商這兩個素數。步驟2 傳送方選擇乙個大隨機整數x,計算 x g x mod ...

DH金鑰交換演算法

迪菲 赫爾曼金鑰交換 diffie hellman key exchange,簡稱 d h 是一種安全協議。它可以讓雙方在完全沒有對方任何預先資訊的條件下通過不安全通道建立起乙個金鑰。這個金鑰可以在後續的通訊中作為對稱金鑰來加密通訊內容。1 演算法描述 離散對數的概念 原根 如果a是素數p 的乙個原...

openssl中dh演算法Demo

原文 參考 下面程式利用openssl庫,實現了dh演算法,產生金鑰以及計算sessionkey include include int main 檢查金鑰引數 ret dh check d1,i i先被置0,然後通過或等於,得到出錯資訊型別 if ret 1 金鑰大小 size dh size d...