為什麼使用 32 位標籤的 HMAC 不容易受到生日攻擊?
為什麼使用 32 位標籤的 HMAC 不容易受到生日攻擊?
我已經讀到,如果*輸出大小不夠大,*生日攻擊實際上是不可能的,這與事實有關。但是,這就提出了一個問題,即它在多大程度上變得有效並且可以進行實際攻擊?
如果它不容易受到生日攻擊,那麼對於像 32 位長度這樣弱的東西猜測有效標籤值的機率是多少?
單個雜湊衝突的機率
$$ \frac{1}{2^{32}} $$ 然而,生日悖論在數學上表明這個機率應該是 n^32/2…
或者我在這裡錯過了什麼?
**更新:**攻擊的目標只是猜測標籤可能是什麼。
“生日攻擊”與通俗地稱為生日問題的數學現像有關,它指出如果你在一個大小的空間中生成隨機值 $ N $ ,您希望在第一次碰撞後產生一個您之前已經產生的值 $ \sqrt{N} $ 價值觀。在某些情況下,這可能會導致實際攻擊。碰巧 HMAC 的正常使用上下文不是這些上下文之一。
HMAC 是關於檢查完整性的:它是一個在給定消息上計算的鍵控函式。在最通用的模型中,攻擊者被允許送出 $ n $ 消息 $ m_i $ 自己選擇,得到對應的HMAC值 $ h_i $ ; 而他的目標是實現偽造,即一條新資訊。 $ m $ 不同於所有送出的 $ m_i $ , 以及對應的 HMAC 值 $ h $ .
HMAC 就是這樣,它作為一個隨機預言機執行:從攻擊者的角度來看,每次他送出一條新消息 $ m_i $ , 得到的 HMAC 值 $ h_i $ 與新生成的隨機值無法區分。因此,在考慮尚未送出的消息時 $ m $ ,攻擊者預測 HMAC 值的機會基本上是 $ 1/2^r $ , 在哪裡 $ r $ 是 HMAC 輸出的長度(以位為單位)。在你的情況下, $ r = 32 $ ,所以任何時候攻擊者試圖預測一條消息的 HMAC 輸出,要麼他已經送出了那個確切的消息,因此他可以用機率進行預測 $ 1 $ ,或者他之前沒有送出過確切的消息,所以他的預測很有可能是真的 $ 2^{-32} $ 只要。
這裡的生日問題是指一旦攻擊者觀察(或送出)超過大約 $ 2^{16} $ 消息,他可以預期衝突,即映射到相同 HMAC 值的兩個不同消息。但這不會改變攻擊者的任何事情,因為他仍然不知道任何給定(新)消息的下一個 HMAC 值是什麼。
事實上,可以說生日問題真的體現了多少碰撞對攻擊者沒有幫助。如果您想像一個 MAC 系統注意從不產生與以前相同的 MAC 值(例如,通過在數據庫中記住所有產生的 MAC 值),那麼,一個又一個消息,剩餘可能的 MAC 值的空間變得越來越小。最終,有了這樣的系統,一旦 $ 2^{32}-1 $ 已經獲得消息+MAC,攻擊者可以有機率預測下一個MAC值 $ 1 $ ,因為那將是唯一尚未生成的 MAC 值。但 HMAC 不是這樣的系統,它會像隨機源一樣產生碰撞,因此不會產生這種“空間變薄”效應。