一輪 AES-128
也許這是一個愚蠢的問題,我對僅針對一輪 AES-128 的最知名/選擇的明文攻擊感興趣。更具體地說,允許我們以高機率恢復密鑰的已知/選擇的明文/密文對的最小數量是多少?時間與對數之間的關係是什麼?
讓 $ (m,c) $ 是一對明文及其密文,並且 $ k_0={k_{0,1},\ldots, k_{0,16}} $ 和 $ k_1={k_{1,1}, \ldots, k_{1,16} } $ 是兩個未知子鍵( $ k_0 $ 實際上是萬能鑰匙)。
包括
MixColumns
步驟,那麼加密就是 $$ c = \mathrm{MC}(\mathrm{SR}(\mathrm{SB}(m \oplus k_0))) \oplus k_1 $$
MC
如果我們應用and的逆SR
,那麼它變成 $$ \mathrm{SR}^{-1}(\mathrm{MC}^{-1}(c)) = \mathrm{SB}(m \oplus k_0) \oplus \mathrm{SR}^{-1}(\mathrm{MC}^{-1}(k_1)) $$ 為便於記號,令 $ c’ = \mathrm{SR}^{-1}(\mathrm{MC}^{-1}(c)) $ 和 $ k’_1 = \mathrm{SR}^{-1}(\mathrm{MC}^{-1}(k_1)) $ ,那麼我們有 $$ c’ = \mathrm{SB}(m \oplus k_0) \oplus k’_1 $$假設你知道兩個明文 $ m_1 $ 和 $ m_2 $ 以及它們各自的密文 $ c_1 $ 和 $ c_2 $ . 獲取字節 $ k_{0,i} $ , 你猜 $ \tilde{k}{0,i} $ 併計算 $$ \tilde{k}’{1,i} = c’{1,i} \oplus \mathrm{SB}(m{1,i} \oplus \tilde{k}{0,i}) $$ 您可以通過替換為 $ m_2 $ 和 $ c’2 $ ( $ m_1 $ 和 $ m_2 $ 每個字節都應該不同),如果獲得的值 $ \tilde{k}’{1,i} $ 重合,那麼猜測可能是正確的 $ \tilde{k}{0,i} $ 是候選人 $ k_{0,i} $ .
其他明文/密文可用於過濾候選,直到每個字節都剩下一個,或者以詳盡的搜尋結束。