Mac

如何將 MAC 截斷為 32 位?

  • July 29, 2017

我想使用 MAC 作為 UDP 伺服器免受 DoS 攻擊的額外保護。我更喜歡保持 MAC 盡可能短,並且我認為 32 位足以滿足此目的。

我將根據一些眾所周知的 MAC(例如 KECCAK 消息驗證碼)來製作它

,使用這個 MAC 的 CRC32 是不是壞主意?

或者最好使用 MAC 的前 4 個字節?

通常的做法是使用 MAC 最左邊的四個字節。我不會在 MAC 上使用 CRC32。它不是更安全,如果你不走運,它就不太安全。除此之外,這是不必要的操作。

請注意,32 位不會給您太多安全性。我只會將它用於實時完整性/身份驗證,或者以防有其他原因阻止暴力攻擊。

不要截斷一次性 MAC(例如 GHash 或 Poly1305),因為成功的偽造會洩露部分密鑰。如果接收器確保 nonce 唯一性並且您從 nonce(即乘數和遮罩)派生完整的 Poly1305 密鑰,Poly1305 可能會很好。

另一方面,截斷 HMAC 或基於 CBC-MAC(例如 CMAC)的 MAC 很好(我認為它甚至可以避免普通 CBC-MAC 的前綴弱點)。

我不會考慮 CRC32,它是無密鑰的,我想不出一個容易從中建構安全 MAC 的方法(GHash 可能是最接近安全 CRC 的東西)。

我建議使用截斷的 HMAC。它被設計為 PRF,並且由於截斷的 PRF 仍然是 PRF,您可以確定它沒有明顯的弱點 $ 2^{-32} $ 偽造機會。

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