給定兩條消息的 MAC,通過創建一條新消息來偽造 CBC-MAC
這個問題與這個問題非常相似:Forge CBC-MAC given the MAC of two messages and of their concatenations
但我仍然無法完全理解它,這是我的問題:給定兩條具有已知 MAC 的消息:
CBC-MAC(a||b)= x
CBC-MAC(d||e)= y
因此,根據給定的消息,我可以偽造這樣的新消息:
CBC-MAC(a || b || (d XOR x) || e) = y(就像我讀過的文章一樣)。
但是,如果我想偽造這樣的消息怎麼樣:
CBC-MAC(a || b || c || d || e) = z
“c”可能是根據這兩條消息及其 MAC 計算得出的,但我不確定。
有可能實現這一目標嗎?
這看起來不太可能。
給定 $ \text{CBC-MAC}(d||e) = y $ ,我們知道,在初始 IV 狀態 $ 0 $ ,然後處理塊 $ d $ 和 $ e $ 給我們 $ y $ ; 這並沒有說明我們最終處於任何其他起始狀態。
如果 $ c $ 是一個單獨的塊,我們需要做的是讓它將狀態重置為 0(然後 $ d $ 和 $ e $ 將按預期處理)。也就是說,我們需要設置 $ c $ 以便 $ \text{Encrypt}_k( c \oplus x ) = 0 $ ,或者換句話說, $ c = x \oplus \text{Decrypt}_k(0) $ .
這就是我們陷入困境的地方;我們可以用 $ \text{CBC-MAC} $ 作為加密預言機(給定一個塊 $ t $ , 什麼是 $ \text{Encrypt}_k(t) $ ?),但不能作為解密預言機;沒有我們可以告訴我們的查詢,給定 $ t $ , 的值是多少 $ \text{Decrypt}_k(t) $ .