Hmac

使用 DSA 或 MAC 和加密哪個更好?

  • April 5, 2018

我想向客戶端驗證伺服器消息。客戶端和伺服器之間的通信是單播的。據我所知,我可以使用使用過的 MAC 或 DSA。

  1. 通過使用MAC,我需要客戶端和伺服器之間的共享密鑰,可以通過向客戶端分發公鑰來進行,客戶端可以生成共享密鑰,使用公鑰加密並發送到伺服器。所以我需要加密和MAC算法。
  2. 通過使用數字簽名,我只需要向客戶分發公鑰。

那麼使用 DSA 或 MAC 和加密哪個更好?

哪個更好取決於上下文。

選擇 1 的原因(MAC 的密鑰由客戶端生成並在伺服器的公鑰下加密發送)

  • 從伺服器到客戶端的消息更短(MAC 至少比 DSA 簽名短 4 倍)。
  • 客戶端對消息的驗證速度更快(DSA 簽名驗證很慢;可以使用 ECDSA 改進,使用 RSA 簽名而不是 DSA 可以改進;MAC 是速度之王)。
  • 在初始密鑰建立之後,伺服器上的消息準備速度要快得多(與 MAC 相比,DSA 簽名生成速度較慢;可以通過 ECDSA 改進,RSA 往往會使情況變得更糟;再次,MAC 是速度之王)。

選擇 2 的原因(DSA 簽名消息)

  • 不需要從客戶端到伺服器的任何通信。
  • 概念簡單。
  • 客戶端不需要 CSPRNG(這些很難保證安全)。
  • 客戶沒有任何秘密(保持秘密和不改變比保持公共資訊不改變更難)。
  • 根本不需要加密(這比簽名驗證更難獲得安全)。
  • 伺服器上的秘密更少(選項 1 要求伺服器對客戶端唯一的 MAC 密鑰保密)。
  • 可以將相同的簽名消息發送給所有客戶端(對於多播最有用,但對於單播來說沒有太多爭論)。

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