那麼,AES-256 到底比 AES-128 更安全還是更不安全?
似乎有些攻擊在 AES-256 上比 AES-128 更有效,這在某些情況下使其安全性降低。但另一方面,更大的密鑰大小應該會增加一些安全裕度,例如使其不受量子電腦的影響。我聽說有些人說更多輪次會降低安全性,而另一些人則說它會更安全。
問題是您正試圖對 AES-128 和 AES-256 進行通用安全比較。我會爭辯說,如果你要更深入地探勘——就像你目前所做的那樣——那麼我認為存在“通用安全級別”的想法是有缺陷的。
正如你所說,有一個相關的密鑰攻擊只對 AES-256 有效,主要與密鑰調度有關。然而,這種相關的密鑰攻擊只有在非常特定的情況下才有可能,例如當 AES-256 將用作創建雜湊算法的原語時。AES-256 為這個特定案例提供了約 99 位的安全性,這確實低於您對 AES-128 所期望的約 128 位的安全性。這已經表明 AES-128有時比 AES-256 更安全,儘管通常應該認為 AES-256 更安全。然而,這是一個利基案例,因為 128 位塊大小首先不會使 AES 成為一個好的候選者。Whirlpool 散列函式(以及其他)例如是建立在從 AES派生的函式之上,而不是 AES 本身。
密鑰時間表在某種程度上與輪數有關,但一般來說,擁有更多輪數只會使密碼更安全,而不是更少。
簡而言之,AES-256 優於 AES-128。使用黃金標準 AES-256;
密碼分析
對 AES-256 的攻擊實際上並沒有使其不安全,即使在 20 年後,最好的攻擊也具有以下複雜性: $ 2^{254.3} $ 對於 AES-256 和 $ 2^{126.0} $ 用於 AES-128
- 2015 Improving the Biclique Cryptanalysis of AES , Biaoshuai Tao and Hongjun Wu.
眾所周知的相關密鑰攻擊(正如 Maarten 所提到的),與加密無關,如果您使用 AES 啟動 Merkle-Damgard 構造的壓縮功能,這一點很重要。這些攻擊會產生可被利用的內部衝突。實際上,我們不需要這個,因為它的塊太小了。
如果您查看上述攻擊,相比之下,AES-128 的安全性較低,在 128 中失去 2 位與在 256 中失去 2 位。
128 位加密在各種方面都不太安全;
- 多目標攻擊,攻擊者獲得具有不同密鑰的明文-密文對。在這種情況下,他們可以比蠻力更快地找到一些密鑰。為一個 $ t $ 目標尋找密鑰的預期成本是 $ 2^{128}/t $ . 如果攻擊者獲得十億個目標,那麼他們將能夠找到遠低於 128 位安全性的第一個密鑰。費用將低於 $ 2^{100} $ 時間會低於 $ 2^{70} $ . 這種攻擊不僅適用於 AES,而且適用於所有分組密碼。
此攻擊已使用Oechslin 的彩虹表的並行版本執行,或在我們的規範 Q/A中閱讀。
- 量子攻擊:可以具有二次速度的 Grover 搜尋算法將使任何 128 位分組密碼不安全, $ \approx 2^{64} $ -時間。這種粗略的計算忽略了重要的細節;
Grover 對 AES-128 的攻擊需要大約 $ 2^{64} $ 連續的AES評估。目前尚不清楚如何實現這一點,即使我們假設每次評估一秒鐘,時間也將是巨大的——平均 5.846×10^11 公曆年。這是一個非常大的數字,並且有類似的論點,我們可以談論 AES-192 和 AES-256 肯定無法實現。
另外,請注意 Grover 的算法也是可並行化的,即 $ k $ 並行 Grover 算法只能提供 $ \sqrt{k} $ 改進。收穫不大!。
忘記 AES-128,使用 256 位加密作為黃金標準。無所畏懼
- 密碼分析,
- 多目標攻擊,或
- 量子攻擊。
使用 AES-256-GCM(也可以使用 SIV)或 ChaCha20-Poly1305(更好地使用 xChaCha20-Poly1305 以獲得更好的隨機數安全性 192 位隨機數)
更圓更安全
即使是簡單的Tiny Encryption 算法在 32 輪之後也是安全的。這項工作簡單地告訴我們,即使是簡單的輪次,我們也可以在多次輪次之後獲得;Twofish: A 128-Bit Block Cipher Schneier et al., 1998;
然而,如果有足夠的輪次,即使是糟糕的輪次函式也可以變得安全。
在第 3 屆 AES 會議上,Rose Anderson (很可能)希望獲得 32 輪 Rijndael。多輪更安全,這是常識。