1. 程式人生 > 實用技巧 >DH金鑰交換和ECDH原理

DH金鑰交換和ECDH原理

DH金鑰交換和ECDH原理

在這裡插入圖片描述上述的就是DH金鑰互動的圖表:
可以這麼理解,A與B想要生成只有彼此知道的金鑰,而使得自己本地產生的私鑰,不被對方知道,包括第三方的Eve。
此時的Alice 和Bob 彼此約定生成兩個引數p,g,和自己的一個金鑰a,b。因為p,g 是公開的,所以此時的Eve也是能夠獲悉p,g的。
第二步,經過 A = g a m o d p A =g^a mod p A=gamodp B = g b m o d 23 B= g^b mod 23 B=gbmod23 運算之後,Alice將A傳送給Bob,Bob同樣將B傳送給Alice。此時的Eve同樣是可以獲得A,B值的,畢竟這個不是祕密。

由於橢圓曲線的離散對數問題是難題,所以攻擊者不可以通過A、g計算出a。
第三步,Alice通過 s = B a m o d 23 s = B^a mod 23 s=Bamod23,Bob通過 s = A b m o d 23 s=A^b mod 23 s=Abmod23獲得獲得雙發達成的金鑰。
如下圖:
在這裡插入圖片描述桐言的

ECDH金鑰交換:

ECDH:

ECC演算法和DH結合使用,用於金鑰磋商,這個金鑰交換演算法稱為ECDH。交換雙方可以在不共享任何祕密的情況下協商出一個金鑰。ECC是建立在基於橢圓曲線的離散對數問題上的密碼體制,給定橢圓曲線上的一個點P,一個整數k,求解Q=kP很容易;給定一個點P、Q,知道Q=kP,求整數k確是一個難題。ECDH即建立在此數學難題之上。金鑰磋商過程:

假設金鑰交換雙方為Alice、Bob,其有共享曲線引數(橢圓曲線E、階N、基點G)。

  1. Alice生成隨機整數a,計算A=a*G。 #生成Alice公鑰

  2. Bob生成隨機整數b,計算B=b*G。 #生產Bob公鑰

  3. Alice將A傳遞給Bob。A的傳遞可以公開,即攻擊者可以獲取A。

    由於橢圓曲線的離散對數問題是難題,所以攻擊者不可以通過A、G計算出a。

  4. Bob將B傳遞給Alice。同理,B的傳遞可以公開。

  5. Bob收到Alice傳遞的A,計算Q =b*A#Bob通過自己的私鑰和Alice的公鑰得到對稱金鑰Q

  6. Alice收到Bob傳遞的B,計算Q`=a*B#Alice通過自己的私鑰和Bob的公鑰得到對稱金鑰Q’

Alice、Bob雙方即得Q=bA=b(aG)=(ba)G=(ab)G=a(bG)=aB=Q’ (交換律和結合律),即雙方得到一致的金鑰Q。

目前Openssl裡面的ECC演算法的套件支援是ECDSA/ECDH。在國密的SSL套件中,可以使用ECDSA/ECC(金鑰加密傳輸),ECDSA/ECDH(金鑰磋商)兩種套件