- 區塊鏈架構之美:從比特幣、以太坊、超級賬本看區塊鏈架構設計
- 何昊編著
- 1566字
- 2021-07-23 17:31:09
1.8 ECDH密鑰協商
在TLS協議握手階段,為了可以不傳輸密鑰就完成共享密鑰的協商,需要一種密鑰協商算法。密鑰協商算法并不唯一,需要雙方協商決定,這里只介紹密鑰協商算法中的其中一種,即基于橢圓曲線的迪菲-赫爾曼密鑰交換算法,在TLS/SSL協議握手過程中交換的兩個隨機數random_C和random_S就是為了完成這個算法做準備的,通過這兩個隨機數和密鑰協商算法可以計算得到Pre-Master而最終確定共享密鑰。
基于橢圓曲線的迪菲-赫爾曼密鑰交換(Elliptic Curve Diffie–Hellman key Exchange,ECDH)算法,主要用來在一個不安全的通道中建立起安全的共有加密資料,一般來說加密資料都是共享密鑰,這個密鑰作為對稱加密的密鑰被雙方在進行后續數據傳輸時使用。
ECDH算法是建立在這樣一個前提之上的:給定橢圓曲線上的一個點P和一個整數K,求Q=KP很容易,但是通過Q或P求解K很難。
通過一個經典的場景來介紹ECDH算法流程,Alice和Bob要在一條不安全的網絡鏈路上協商共享密鑰,并且協商的密鑰不能被中間人知曉。
首先,雙方約定使用ECDH算法,這個時候雙方知道ECDH算法里的一個大素數P,這個大素數P可以看作ECDH算法中的常量。
P的位數決定了攻擊者破解的難度。
還有一個整數g用來輔助整個密鑰交換,g不用很大,一般是2或5,雙方知道g和P之后就開始了交換密鑰的過程。
Alice知道了公用參數P和g,生成私有整數a作為私鑰,公鑰算法一般是公鑰加密,私鑰解密。公鑰給對方來加密數據,對方拿到密文后再用私鑰解密查看內容的正確性。這個時候如果Alice直接通過網絡鏈路告訴Bob自己的私鑰a,這顯然既不合理,也是一件風險很大的事,所以要避免直接通過網絡鏈路傳輸私鑰a。
這個時候,Alice需要利用P和g作為輔助生成自己的公鑰A,公鑰A的生成公式為ga mod P=A,生成的公鑰A可以通過網絡鏈路傳輸。
Bob通過網絡鏈路收到Alice發來的P、g和公鑰A,知道了Alice的公鑰A。這個時候,Bob生成自己的私鑰b,同樣通過公式gb mod P=B生成自己的公鑰B。
在Bob發送自己的公鑰B前,Bob通過公式Ab mod P=K生成K作為共享密鑰,但是并不發送給Alice,只通過網絡鏈路發送自己的公鑰B。
Alice收到Bob發來的公鑰B以后,同樣通過Ba mod P=K生成共享密鑰K,這樣Alice和Bob就通過不傳遞各自私鑰a和b的方式完成了對共享密鑰K的協商。
可以通過代入具體數字的一個例子來重復一下上面的過程。
(1)Alice和Bob同意使用大素數P和整數g。
P=83,g=8
(2)Alice選擇密鑰a=9, 生成公鑰 ga mod P=A并發送。
89mod83=5
(3)Bob選擇密鑰 b=21, 生成公鑰Ab mod P=B并發送。
821mod83=18
(4)Alice計算 Ba mod P=K。
189mod83=24
(5)Bob計算Ba mod P=K。
521mod83=24
至此24就是雙方協商出來的共享密鑰,可以看到在整個過程中共享密鑰24都沒有通過網絡鏈路傳輸,保證了密鑰的安全性,在后續通信過程中Alice和Bob可以使用24作為Pre-Master繼續計算對稱加密的密鑰。
1)協議所面臨的問題
由于ECDH協議不會驗證公鑰發送者的身份,因此無法阻止中間人攻擊。如果監聽者Mallory截獲了Alice的公鑰,就可以替換為自己的公鑰,并將其發送給Bob。Mallory還可以截獲Bob的公鑰,替換為自己的公鑰,并將其發送給Alice。這樣,Mallory就可以輕松地對Alice與Bob之間發送的任何消息進行解密。Mallory可以更改消息,用自己的密鑰對消息重新加密,然后將消息發送給接收者。
為了解決此問題,Alice和Bob可以在交換公鑰之前使用數字簽名對公鑰進行簽名,有兩種方法可以實現此目的。
? 用安全的媒體(如語音通信或可信載運商)在雙方之間傳輸數字簽名密鑰。
? 使用第三方證書頒發機構向雙方提供可信數字簽名密鑰。
2)區塊鏈中的應用場景
在聯盟鏈中,當多個參與者共享同一條網絡鏈路時,若各參與者想要在同一條網絡鏈路上實現通信間的隔離,則可以使用ECDH算法將鏈路進行邏輯上的拆分,使得同一鏈路上的消息采用不同的密鑰進行加密,來達到物理鏈路隔離的目的。通過這樣的方式既可以實現通信連接的復用,避免頻繁建立大量通信連接,又可以保證同一鏈路不同參與者的通信隔離。
各參與者的身份在加入區塊鏈網絡前已經由MSP(Membership Service Provider)頒發過證書,并且進行過準入驗證,這樣就可以規避ECDH協議的缺陷。
- Implementing VMware Horizon 7(Second Edition)
- 手機安全和可信應用開發指南:TrustZone與OP-TEE技術詳解
- 算法精粹:經典計算機科學問題的Java實現
- JavaScript 網頁編程從入門到精通 (清華社"視頻大講堂"大系·網絡開發視頻大講堂)
- Raspberry Pi for Secret Agents(Third Edition)
- 從0到1:Python數據分析
- C語言程序設計教程
- JBoss:Developer's Guide
- PrimeFaces Blueprints
- Learning Splunk Web Framework
- Mastering HTML5 Forms
- Python Social Media Analytics
- R語言實戰(第2版)
- JavaEE架構與程序設計
- C語言程序設計教程