Authentication

驗證臨時密鑰交換

  • September 12, 2015

目前我正在為 VPN 伺服器設計一個加密系統。要求之一是完美前向保密,但我不確定如何在臨時密鑰交換上實施身份驗證。

如果雙方都擁有簽名的公鑰(由 CA 或共同信任方簽名)並交換,則可以通過 CA 的公鑰驗證彼此的身份。為了實現完美的前向保密,雙方必須生成一個臨時密鑰對並相互發送公鑰。由於這些密鑰沒有簽名,如何驗證另一個密鑰以保證密鑰沒有被更改/切換?即使密鑰是通過經過驗證的通道(例如使用簽名和受信任的公鑰)交換的,也不能自動確保臨時密鑰是由同一方生成的。此外,在公共臨時密鑰上計算 MAC 並不會導致安全的密碼方案,因為公共密鑰可能首先是由中間人創建的。

由於這些密鑰沒有簽名,如何驗證另一個密鑰以保證密鑰沒有被更改/切換?

他們必須簽字。由密鑰交換方使用他們的長期密鑰。

即使密鑰是通過經過驗證的通道(例如使用簽名和受信任的公鑰)交換的,也不能自動確保臨時密鑰是由同一方生成的。

密鑰保證由簽名方生成,除非:1)他們沒有遵循協議但簽署了其他人的密鑰(您必須假設情況並非如此)或 2)長期密鑰已被洩露(其中這就是為什麼它被稱為前向保密)。

此外,在公共臨時密鑰上計算 MAC 並不會導致安全的密碼方案,因為公共密鑰可能首先是由中間人創建的。

如果您可以安全地交換密鑰,MAC 就可以工作。例如,如果長期密鑰用於經過身份驗證的加密(而不僅僅是簽名),您可以生成一個臨時 MAC 密鑰來驗證臨時公鑰的交換。在這種情況下,不知道 MAC 密鑰的中間人無法為自己的公鑰偽造 MAC 值。

然而,這是不必要的複雜,因為您不妨直接使用經過身份驗證的加密來交換臨時公鑰。

引用自:https://crypto.stackexchange.com/questions/29118