Hero-oo

Hero-oo

email

我們為什麼需要 DH 演算法

最近在複習安全的時候就在想,對於 DH 就有兩個問題:

  1. 既然非對稱加密算法可以實現帶身份認證的、安全的密鑰的交換,為什麼還需要沒有身份認證的 DH 算法呢?
  2. 非對稱加密算法體系的身份認證實際上是依靠三方 CA 的權威性實現的,那可不可以構建一套 DH 的 CA 呢?

這篇文章就用來回答這兩個問題。

〇、DH 算法概述#

對安全算法有所了解的都知道,DH 算法是一個應用非常廣的密鑰交換算法,經常被用於協商的第一階段,比如 TLS、IPsec 等。很多人有個誤區,認為 DH 算法屬於非對稱加密算法,但我們應該知道,DH 算法並沒有加解密的功能,所以並不能認為是非對稱加密算法,它只能用於協商密鑰。

一、DH 算法原理#

先上 DH 算法原理圖,Wikipedia 經典圖:

DH 算法原理

DH 算法的密鑰協商過程如下:

  1. Alice 取一個大的隨機整數 $x$ 並發送給 Bob:$X = g^x mod p$
  2. Bob 取一個大的隨機整數 $y$ 並發送給 Alice:$Y = g^y mod p$
  3. Alice 計算 $k=Y^x mod p = (g^y mod p)^x mod p = g^{xy} mod p$
  4. Alice 計算 $k'=X^y mod p = (g^x mod p)^y mod p = g^{xy} mod p$

在協商過程中,g、p 公開,X、Y 在網絡中傳輸,要想計算 x、y,需要計算離散對數問題

優點#

  1. 計算簡單
  2. 動態的,易於生成密鑰對,每次協商都會重新生成
  3. 容易擴展到多方 $g^{xyz} mod p$

缺點#

  1. 沒有身份認證的能力,所以不能解決中間人攻擊的問題

二、與非對稱加密算法的對比#

非對稱加密算法採用公私鑰對的方式,公鑰加密私鑰解密,私鑰加密公鑰解密。相對於 DH 來說,非對稱加密算法的特點有:

  1. 公私鑰對一旦生成就無法修改
  2. 可用於身份認證
  3. 可構建身份認證體系 —— 數字證書體系
  4. 不具有前向安全性(PFS),私鑰一旦洩露,歷史所有消息都可被解密

其帶有身份認證的屬性,所以經常用於密鑰交換(信息加密)、數字簽名、身份認證。

我們為什麼需要 DH#

讓我們回到問題上:

  1. 既然非對稱加密算法可以實現帶身份認證的、安全的密鑰的交換,為什麼還需要沒有身份認證的 DH 算法呢?

因為非對稱加密算法的靜態、不具有前向安全性的问题很大,這意味著一旦私鑰洩露,歷史的所有消息都將會被破解。而 DH 動態的特點可以彌補這一點,使用 DH 算法每隔一段時間進行 rekey,這樣通信雙方的共享密鑰時周期性變更的,即使破解了其中一個密鑰,也無法得到完整的通信數據。

但是由於 DH 不具有身份認證的能力,所以經常需要結合數字證書體系來防止中間人攻擊。

  1. 非對稱加密算法體系的身份認證實際上是依靠三方 CA 的權威性實現的,那可不可以構建一套 DH 的 CA 呢?

這個問題還是比較好回答的,根本原因是 DH 不具有身份認證功能。在 PKI 體系中,CA 使用私鑰簽發證書,用戶系統 / 瀏覽器中保存有 CA 公鑰,可以輕易對證書的有效性進行驗證。這個驗證過程還是基於非對稱加密算法的身份認證屬性實現的,而 DH 無法做到。

Done!

此文由 Mix Space 同步更新至 xLog 原始鏈接為 https://www.vikifish.com/posts/security/why-we-need-dh-group

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。