Hmac
使用 DSA 或 MAC 和加密哪個更好?
我想向客戶端驗證伺服器消息。客戶端和伺服器之間的通信是單播的。據我所知,我可以使用使用過的 MAC 或 DSA。
- 通過使用MAC,我需要客戶端和伺服器之間的共享密鑰,可以通過向客戶端分發公鑰來進行,客戶端可以生成共享密鑰,使用公鑰加密並發送到伺服器。所以我需要加密和MAC算法。
- 通過使用數字簽名,我只需要向客戶分發公鑰。
那麼使用 DSA 或 MAC 和加密哪個更好?
哪個更好取決於上下文。
選擇 1 的原因(MAC 的密鑰由客戶端生成並在伺服器的公鑰下加密發送)
- 從伺服器到客戶端的消息更短(MAC 至少比 DSA 簽名短 4 倍)。
- 客戶端對消息的驗證速度更快(DSA 簽名驗證很慢;可以使用 ECDSA 改進,使用 RSA 簽名而不是 DSA 可以改進;MAC 是速度之王)。
- 在初始密鑰建立之後,伺服器上的消息準備速度要快得多(與 MAC 相比,DSA 簽名生成速度較慢;可以通過 ECDSA 改進,RSA 往往會使情況變得更糟;再次,MAC 是速度之王)。
選擇 2 的原因(DSA 簽名消息)
- 不需要從客戶端到伺服器的任何通信。
- 概念簡單。
- 客戶端不需要 CSPRNG(這些很難保證安全)。
- 客戶沒有任何秘密(保持秘密和不改變比保持公共資訊不改變更難)。
- 根本不需要加密(這比簽名驗證更難獲得安全)。
- 伺服器上的秘密更少(選項 1 要求伺服器對客戶端唯一的 MAC 密鑰保密)。
- 可以將相同的簽名消息發送給所有客戶端(對於多播最有用,但對於單播來說沒有太多爭論)。