Integrity

DH 共享密鑰可以提供完整性嗎?

  • October 27, 2016

假設 A 和 B 事先交換了他們的公鑰。現在,A 和 B 希望通過不安全的通道進行通信,並希望提供消息的完整性和機密性。A 使用使用 DH 計算的共享密鑰使用對稱密碼對消息進行加密。如果 B 可以解密該消息,B 是否可以確定該消息是由 A 編寫和加密的?

一般來說,答案是否定的。

首先,您需要確保您的 DH 密鑰協議經過身份驗證。否則,您根本無法保證您正在與 A 交談。

其次,您使用的對稱密碼需要提供真實性,因此您應該使用一些 AEAD 方案。否則有人可以更改對稱加密的消息。

您的設置是:

  • Alice 和 Bob 擁有彼此的公鑰
  • 他們使用 DH 進行密鑰交換
  • 他們想要保密性和完整性

在其原始形式中,DH 密鑰交換不使用公鑰,也沒有身份驗證。您想要在兩方之間進行雙向通信的是相互身份驗證,例如使用經過身份驗證的 DH,但還有其他選擇。TLS 通常只在一側進行身份驗證,因此這不起作用。

現在使用來自 kex 交換的密鑰,您可以使用KDF來獲取兩個密鑰:一個用於加密,一個用於MAC

現在出現了一個難題:MAC-then-encrypt vs encrypt-then-MAC?(連結到關於 crypto-SE 的問題

從連結中的 asnwers 中,如果您想使用其中之一,建議將是encrypt-then-MAC 。

像這樣的結構通常稱為身份驗證加密,重點是操作模式以及 MAC 是如何包含在其中的。其他例子是 GCMEAX

如果你想使用數字簽名來保證完整性,那麼還有簽密

最後一點:雖然不是問題,但在您的協議中獲取前向保密屬性可能會很有趣。這通常通過使用匹配的密鑰交換協議來解決。

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