AES 或 SPN 背後的直覺是什麼?
我是密碼學新手,剛剛遇到過 AES 和 SPN。我想知道 S-box、排列步驟和MixColumn步驟如何幫助提高安全性。在我看來(可能是錯誤的)安全性僅由密鑰提供,替換、排列和MixColumn步驟是多餘的。
我知道我一定是錯的,但不能指望它。
另外,是否有一個可以手動實現的 AES 小例子?
我認為看到它有助於我理解這個概念。
如果 AES 只用於加密每個密鑰的 128 位(即,如果您為每個 128 位塊更改密鑰),那麼 s-box 和線性輪操作將完全是多餘的。因為那樣您將擁有一次性密碼本,只需將密鑰與消息進行異或操作即可。
然而,像 AES 這樣的密碼基於計算複雜性(而不是資訊論安全性),並且旨在安全地加密大大超過密鑰長度的明文。安全性的主張是,現實的對手,使用現實數量的計算資源,恢復任何關於明文或密鑰的資訊的機會很小。或者換句話說,恢復已經用 AES 和未知密鑰加密的未知明文資訊應該是一個計算上的難題。
如果 AES 沒有高度非線性的 s-box,那麼問題將非常簡單,正如丹尼爾在他的回答中指出的那樣。這是因為 AES 將是一個完全線性的系統(在特徵 2 的伽羅瓦有限域中是線性的),並且給定少量的明文(只需一兩個塊就足夠了),我們可以使用 Gauss-Jordan 消元法來解決系統,從而恢復未知密鑰(或至少足以解密和加密我們喜歡的任何內容)。
如果 AES 沒有線性操作(字節置換步驟和 MixColumns 步驟),那麼由於不同的原因它會很容易。這些步驟提供了“擴散”,即有關 128 位塊的一部分的資訊與來自該塊的其他部分的資訊“混合”。如果沒有混合,則 128 位塊的每個 8 位部分(字節)將與其他每個字節“隔離”。因此,輸入明文中一個字節的差異只會導致輸出密文的同一字節的差異(這可以揭示有關明文的資訊)。此外,您只需猜測與單個字節互動的那一小部分密鑰即可“解密”該字節,並且通過暴力猜測密鑰的一小部分而不是整個鑰匙。
與 s-box 一起,這種擴散意味著在幾輪之後,輸出的每一位都是輸入的每一位和整個密鑰的非常複雜、高度非線性的函式。高度非線性方程組比線性方程組更難求解。
也就是說,AES 使用特定 s-box 和特定線性步驟的原因與設計時使用的密碼分析方法有關。AES 被精心設計以抵抗兩種非常強大的攻擊類型,稱為差分密碼分析和線性密碼分析(以及一些相關變體),它們在 AES 之前的一代中破壞了許多塊密碼。要“直覺地了解”為什麼 AES 會這樣,您需要了解這兩種攻擊。