混淆和擴散誤解
我正在閱讀題為“密碼學家的代數”的書。作者將混淆和擴散定義如下:
混淆:混淆一方面是為了使明文和/或密鑰之間的關係,另一方面使密文之間的關係盡可能複雜,或者如 JL Massey 所說:“密文統計應取決於明文統計數據過於復雜,密碼分析員無法利用。” 從這個角度來看,一個簡單的替換密碼,本質上只是一個排列 $ \pi $ 明文字母 {a,b,c, . . . , z} 不能令人滿意:比如說,英語的頻率分佈是由密文繼承的——英語中字母 e 的壓倒性頻率現在反映在相同的頻率上 $ \pi (e) $ 在密文中。擴散:為了避免這種弱點,需要擴散的第二個屬性。密鑰和/或明文的每個符號都應該影響盡可能多的密文符號。
然而,在名為《理解密碼學》的書中,
混淆是一種加密操作,其中密鑰和密文之間的關係是模糊的。擴散是一種加密操作,其中一個明文符號的影響分散到許多密文符號上,目的是隱藏明文的統計屬性。
請注意,第一本書在兩個定義中都使密鑰/明文和密文之間的關係與第二本書不同。
問題:這些定義是否不受限制,並且可能因作者而異?哪本書更準確?“密碼學家的代數”這本書適合作為數學/密碼閱讀嗎?
兩者都不是很清楚,尤其是如果您不了解所涉及的數學,儘管兩者的描述非常相似。我想說第一本書對混淆有更好的描述,但第二本書更適合擴散,儘管它是以“令人困惑”的方式擴散到明文中以製作密文的關鍵,這樣你就不能“不擴散” " 要麼出密文。
事實上,有了足夠大的“混淆”層,就不需要“擴散”層了。混淆是指非線性運算,擴散是線性運算。大型非線性運算在計算上非常昂貴,這就是為什麼將小型非線性運算與線性運算結合以完成工作的原因。
線性和非線性混合的組合所做的是使密文和密鑰之間以及密文和明文之間的關係成為一個極其複雜的數學問題。如果有人知道明文和密文,你不希望他們找到密鑰,如果他們只知道密文,你不希望他們找到密鑰或明文。
有助於了解這些如何應用於像 AES 這樣的通用密碼。AES 使用 128 位塊、8 位非線性 sbox,以及在 4 個並行路徑中對塊的 32 位進行操作的有限域中的線性矩陣乘法。
在 AES 中,混淆來自 s-box(Sub Byte 層),它用於輪函式以及密鑰調度。擴散來自矩陣運算(混合列層)與行移位相結合,以便所有輸入位在 2 輪過程中完全混合,並結合密鑰調度中輪子密鑰的生成方式。
有了足夠多的輪次,解決數學問題的工作變得比暴力破解密鑰更難,而 AES 幾乎在相同的水平上擁有這些。當然它比這更複雜,但那是懸崖筆記。
我投票贊成第一本書的定義,因為
- 秘密對手可能尋求的任何事物以及他們可能擁有的任何相關事物之間的混淆和擴散問題。明文和密鑰都屬於第一類。
- 混淆和擴散不是密碼操作。它們是此類操作的屬性。