Authentication
為什麼不從 GCM 中的密鑰和隨機數生成身份驗證密鑰?
在 Galois/counter 模式下,認證密鑰 $ H $ 如果兩個不同的消息使用相同的 nonce 加密,則會洩露。如果有人最終這樣做了,那麼他們將需要重新輸入密鑰以獲得新的 $ H $ 作為 $ H $ 僅源自 $ K $ . 那麼,為什麼不導出 $ H $ 從 $ K $ 和 $ N $ (隨機數)。
那麼,為什麼不導出 $ H $ 從 $ K $ 和 $ N $ (隨機數)。
好吧,如果您問為什麼最初的 GCM 設計者做出了特定的設計決定(CodesInChaos 點是有效的,但在原始設計中實際上並未考慮軟體實現):
- GCM 設計的一個關鍵目標是它對硬體管道友好。也就是說,您可以在 10-14 階段的管道中處理消息(其中每個 AES 輪是一個單獨的管道階段),並且浪費的步驟最少。在處理初始 AAD 數據之前進行一些額外的計算會導致管道中斷,因此違反了這個目標。
- 它沒有幫助。如果 $ H $ 值來自於 $ N $ 和 $ K $ 對,那麼如果你重複一個 $ N $ 值,你仍然重複 $ H $ 值(因此洩漏 $ H $ 價值)。您的想法意味著攻擊者將不得不重複 $ N $ 偽造價值(因為攻擊者不知道 $ H $ 任何其他的價值 $ N $ ); 然而這對於攻擊者來說不是一個實際問題,他們可以自由選擇 $ N $ 他們的偽造品的價值。