HMAC 是否提供任何 AEAD 不提供的功能?
愛麗絲和鮑勃必須通過夏娃交談。(伺服器到設備通過不可信的第三方中繼消息,沒有可用的 TLS)
假設一個安全密鑰。超出範圍。例如,ECDH 與 HKDF 的密鑰交換。
每個有效載荷都有相關的數據。時間、版本、類型等。用於向 Alice 或 Bob 中的正確函式獲取消息的數據。傳輸協議的設計中沒有這些。
消息認證很重要,所以HMAC。消息有效負載加密有時很重要,因此至少偶爾會在有效負載上使用 AES-GCM128。大多數情況下,有效載荷數據不是機密的。AES-GCM128 AEAD 可以涵蓋這兩個案例。
受約束的設備。nonce、keyid、time、time 的成本很明顯。兩種算法的編譯大小也是一個因素。
- 如果我有時需要支持 AEAD,那麼一直使用 AEAD 並完全跳過 HMAC 是否合理?
- HMAC 應該更快,但要快多少?我需要對此進行測試,但懷疑差異可能不會很大。
- 除了速度和能夠調試以明文形式保留的數據之外,HMAC 還有其他優勢嗎?我知道的唯一另一件事是較小的未填充有效負載數據。
- 稍微撇開一點,但 HMAC 或 AEAD 是否會從將它們的 nonce 包含在散列/附加數據中受益?我的重放攻擊預防主要圍繞每條消息中包含的連接傳遞到設備的伺服器時間。
如果我有時需要支持 AEAD,那麼一直使用 AEAD 並完全跳過 HMAC 是否合理?
是的,如果您只需要消息的完整性/真實性,那麼您可以將所有消息放入關聯數據中。
HMAC 應該更快,但要快多少?我需要對此進行測試,但懷疑差異可能不會很大。
它通常不會比 GMAC 快,但如果您包含 CTR 模式加密,那麼您可能會看到差異。這太依賴於系統配置,無法合理地回答這個問題。
一些設置或
openssl speed
可能會幫助您。在我的情況下,AES-GCM 甚至比 HMAC-MD5 更快,後者通常相當快 - 儘管 OpenSSL 中的 MD5 速度不是那麼好(但speed
不幸的是,它是該命令唯一支持的 HMAC 版本)。並且 SHA-256 也可能有硬體加速。這是一片泥濘的田野……除了速度和能夠調試以明文形式保留的數據之外,HMAC 還有其他優勢嗎?我知道的唯一另一件事是較小的未填充有效負載數據。
HMAC 是一種非常強大的算法,不會突然失敗。如果身份驗證標籤太小或重複 IV,AES-GCM 可能會發生災難性的失敗。我會說 HMAC 不如 AES-GCM 脆弱:後者是安全的,但它不會彎曲 - 它會斷裂。
稍微撇開一點,但 HMAC 或 AEAD 是否會從將它們的 nonce 包含在散列/附加數據中受益?我的重放攻擊預防主要圍繞每條消息中包含的連接傳遞到設備的伺服器時間。
不,HMAC 不包含隨機數(儘管您可能需要特定於消息的隨機數以避免重放攻擊)。AES-GCM 在驗證身份驗證標籤的過程中總是自動包含隨機數,因此單獨添加它是沒有用的。