最近在複習安全的時候就在想,對於 DH 就有兩個問題:
- 既然非對稱加密算法可以實現帶身份認證的、安全的密鑰的交換,為什麼還需要沒有身份認證的 DH 算法呢?
- 非對稱加密算法體系的身份認證實際上是依靠三方 CA 的權威性實現的,那可不可以構建一套 DH 的 CA 呢?
這篇文章就用來回答這兩個問題。
〇、DH 算法概述#
對安全算法有所了解的都知道,DH 算法是一個應用非常廣的密鑰交換算法,經常被用於協商的第一階段,比如 TLS、IPsec 等。很多人有個誤區,認為 DH 算法屬於非對稱加密算法,但我們應該知道,DH 算法並沒有加解密的功能,所以並不能認為是非對稱加密算法,它只能用於協商密鑰。
一、DH 算法原理#
先上 DH 算法原理圖,Wikipedia 經典圖:
DH 算法的密鑰協商過程如下:
- Alice 取一個大的隨機整數 $x$ 並發送給 Bob:$X = g^x mod p$
- Bob 取一個大的隨機整數 $y$ 並發送給 Alice:$Y = g^y mod p$
- Alice 計算 $k=Y^x mod p = (g^y mod p)^x mod p = g^{xy} mod p$
- Alice 計算 $k'=X^y mod p = (g^x mod p)^y mod p = g^{xy} mod p$
在協商過程中,g、p 公開,X、Y 在網絡中傳輸,要想計算 x、y,需要計算離散對數問題
優點#
- 計算簡單
- 動態的,易於生成密鑰對,每次協商都會重新生成
- 容易擴展到多方 $g^{xyz} mod p$
缺點#
- 沒有身份認證的能力,所以不能解決中間人攻擊的問題
二、與非對稱加密算法的對比#
非對稱加密算法採用公私鑰對的方式,公鑰加密私鑰解密,私鑰加密公鑰解密。相對於 DH 來說,非對稱加密算法的特點有:
- 公私鑰對一旦生成就無法修改
- 可用於身份認證
- 可構建身份認證體系 —— 數字證書體系
- 不具有前向安全性(PFS),私鑰一旦洩露,歷史所有消息都可被解密
其帶有身份認證的屬性,所以經常用於密鑰交換(信息加密)、數字簽名、身份認證。
我們為什麼需要 DH#
讓我們回到問題上:
- 既然非對稱加密算法可以實現帶身份認證的、安全的密鑰的交換,為什麼還需要沒有身份認證的 DH 算法呢?
因為非對稱加密算法的靜態、不具有前向安全性的问题很大,這意味著一旦私鑰洩露,歷史的所有消息都將會被破解。而 DH 動態的特點可以彌補這一點,使用 DH 算法每隔一段時間進行 rekey,這樣通信雙方的共享密鑰時周期性變更的,即使破解了其中一個密鑰,也無法得到完整的通信數據。
但是由於 DH 不具有身份認證的能力,所以經常需要結合數字證書體系來防止中間人攻擊。
- 非對稱加密算法體系的身份認證實際上是依靠三方 CA 的權威性實現的,那可不可以構建一套 DH 的 CA 呢?
這個問題還是比較好回答的,根本原因是 DH 不具有身份認證功能。在 PKI 體系中,CA 使用私鑰簽發證書,用戶系統 / 瀏覽器中保存有 CA 公鑰,可以輕易對證書的有效性進行驗證。這個驗證過程還是基於非對稱加密算法的身份認證屬性實現的,而 DH 無法做到。
Done!
此文由 Mix Space 同步更新至 xLog 原始鏈接為 https://www.vikifish.com/posts/security/why-we-need-dh-group