密鑰交換之DH算法


密鑰交換/協商機制的幾種類型

依靠非對稱加密算法

原理:拿到公鑰的一方先生成隨機的會話密鑰,然后利用公鑰加密它;再把加密結果發給對方,對方用私鑰解密;於是雙方都得到了會話密鑰。

舉例:RSA

依靠專門的密鑰交換算法

原理:見下圖

舉例:DH 算法及其變種(ECDH算法)

DH算法

DH算法解決了密鑰在雙方不直接傳遞密鑰的情況下完成密鑰交換,這個神奇的交換原理完全由數學理論支持

1. Alice選擇1個素數p,比如509,底數g 比如5,隨機數a比如123
    然后計算 然后計算A=g^a mod p=bcmod(bcpow(5,123),509)=215
    Alice現在有[p=509,g=5,a=123,A=215], 把p,g,A發送給Bob
    
2. Bob收到p=509,g=5后,選擇一個隨機數b=456
    計算 B=g^b mod p=bcmod(bcpow(5,456),509)=181
    同時計算s=A^b mod p=bcmod(bcpow(215,456),509)=121
    
    Bob現在有[p=509,g=5,b=456,B=181,s=121,A=125]
    Bob把B=181發送給Alice
    
3.
    Alice現在有[p,g,a,A,B]

    Alice計算s=B^a mod p=bcmod(bcpow(181,123),509)=121

所以最終雙方協商出的密鑰s是121。注意到這個密鑰s並沒有在網絡上傳輸。而通過網絡傳輸的p,g,A和B是無法推算出s的,因為實際算法選擇的素數是非常大的。

所以,更確切地說,DH算法是一個密鑰協商算法,雙方最終協商出一個共同的密鑰,而這個密鑰不會通過網絡傳輸。

如果我們把a看成甲的私鑰,A看成甲的公鑰,b看成乙的私鑰,B看成乙的公鑰,DH算法的本質就是雙方各自生成自己的私鑰和公鑰,私鑰僅對自己可見,然后交換公鑰,並根據自己的私鑰和對方的公鑰,生成最終的密鑰secretKey,DH算法通過數學定律保證了雙方各自計算出的secretKey是相同的

但是DH算法並未解決中間人攻擊,即甲乙雙方並不能確保與自己通信的是否真的是對方。消除中間人攻擊需要其他方法

  • DH算法是一種密鑰交換協議,通信雙方通過不安全的信道協商密鑰,然后進行對稱加密傳輸。
  • DH算法沒有解決中間人攻擊。

但是 DH 算法本身也有缺點——它不支持認證。

也就是說:它雖然可以對抗“偷窺”,卻無法對抗“篡改”,自然也就無法對抗“中間人攻擊/MITM”(缺乏身份認證,【必定會】遭到“中間人攻擊/MITM”)

ECDHE

  • 1.客戶端隨機生成隨機值Ra
    計算Pa(x, y) = Ra * Q(x, y),
    Q(x, y)為全世界公認的某個橢圓曲線算法的基點
    將Pa(x, y)發送至服務器

  • 2.服務器隨機生成隨機值Rb
    計算Pb(x,y) = Rb * Q(x, y)
    Pb(x,y)發送至客戶端

  • 3.客戶端計算Sa(x,y) = Ra * Pb(x,y)
    服務器計算Sb(x,y) = Rb *Pa(x,y)

  • 4.算法保證了Sa = Sb = S,提取其中的S的x向量作為密鑰(預主密鑰)


免責聲明!

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



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