Permutation

香農混淆和擴散概念

  • March 12, 2017

我從香農那裡閱讀了文件(不是整個文件),他談到了混淆和擴散的概念。我在很多地方(不是在文件中,而是在網際網路上)讀到,使用替換來強制混淆。使用置換/轉置來強制擴散。密碼必須同時使用它們,因為僅靠混淆或擴散是不夠的。我讀到替代密碼可以單獨應用混淆(僅)。置換/轉置本身適用於擴散(僅)。這正是困擾我的最後一個案例:置換/轉置密碼本身可以應用擴散嗎?

Shannon 將擴散解釋為一種屬性,它將文本的統計屬性傳播到整個文本中,從而防止統計分析。它經常被翻譯為:對明文符號的更改會影響許多密文符號。假設位或字元的排列,如何通過簡單排列實現擴散?我的意思是,如果您置換位,則不會有其他位受到影響。但是,如果您將符號視為一個字元並置換位,則字元的更改將影響許多其他字元。這是什麼是符號的問題。

我還閱讀了這個擴散概念的版本,其中的要點只是為了避免對文本進行模式分析而改變位順序。但是,簡單排列中的雪崩效應在哪裡?

那麼,擴散的正確定義和含義是什麼?

我希望你明白是什麼困擾著我。

再次感謝你

我認為您錯過了概念中的一個關鍵點,即用於組成安全 PRF(或 PRP)的小塊,即當您置換一位時,您實際上更改了該位的小塊的值,即整個小塊都受到影響,因此準備在下一輪混淆,這樣你會很快達到整個大塊的混淆。

我附上了對Lindell-Katz Book中描述的概念的一個很好的解釋

除了他在完全保密方面的工作外,香農還介紹了一種用於建構簡潔、隨機排列的基本範式。基本思想是構造一個隨機排列 $ F $ 具有來自許多較小隨機(或看起來隨機)排列的大塊長度 $ {f_i} $ 塊長度小。讓我們看看這在最基本的層面上是如何工作的。說我們想要 $ F $ 塊長度為 $ 128 $ 位。我們可以定義 $ F $ 如下:關鍵 $ k $ 為了 $ F $ 將指定 $ 16 $ 排列 $ f_1,\ldots, f_{16} $ 每個人都有一個 $ 8 $ -少量 ( $ 1 $ -byte) 塊長度。給定一個輸入 $ x\in{0, 1}^{128} $ ,我們將其解析為 $ 16 $ 字節 $ x_1,\ldots,x_{16} $ 然後設置(方程 6.2) $ F_k(x)=f_1(x)||\ldots||f_{16}(x_{16}) $ . 這些輪函式 $ {f_i} $ 據說會引起混亂 $ F $ . 然而,應該立即清楚的是,上面定義的 F 不會是偽隨機的。具體來說,如果 $ x $ 和 $ x’ $ 那麼只有他們的第一位不同 $ F_k(x) $ 和 $ F_k(x’) $ 將僅在它們的第一個字節上有所不同(無論密鑰 k 是什麼)。相反,如果 $ F $ 如果是真正的隨機排列,那麼改變輸入的第一位預計會影響輸出的所有字節。出於這個原因,引入了擴散步驟,從而使用混合置換對輸出的位進行置換或“混合”。這具有將局部變化(例如,第一個字節的變化)傳播到整個塊的效果。混淆/擴散步驟——統稱為一輪——重複多次。這有助於確保更改輸入的單個位將影響輸出的所有位。

例如,遵循這種方法的兩輪分組密碼將按如下方式執行。首先,通過計算中間結果引入混淆 $ f_1(x_1)||\ldots||f_{16}(x_{16}) $ 如公式(6.2)所示。然後將結果的位“打亂”或重新排序,以給出 $ x’ $ . 然後 $ f’1(x’1)||\ldots||f’{16}(x’{16}) $ 被計算(其中 $ x’= x’1,\ldots,x’{16} $ ),使用可能不同的功能 $ f’_i $ ,並且結果的位被置換以給出輸出 $ x’’ $ . 這 $ {f_i},{f’_i} $ ,並且混合排列可以是隨機的並且取決於密鑰,正如我們上面所描述的。然而,在實踐中,它們是專門設計和固定的,並且密鑰以不同的方式合併

我發現術語“混淆”和“擴散”有點模糊,可能導致過度簡化。

困惑

比如說“代入”負責“混淆”就不一定正確:“代入”其實只是對狀態的函式應用;該實現通常使用記憶函式,但您可以輕鬆 1. 在每個應用程序上顯式計算非線性函式,以及 2. 使用記憶線性函式僅提供擴散而不提供混淆。所以說替代提供了混淆是過於簡單化了。

現在,非線性函式經常用記憶表實現的原因是非線性函式計算起來很複雜。一般來說,函式越複雜,評估它所需的時間就越長。例如,AES S-Box利用有限域中元素的乘法模逆計算。這可以顯式計算,而不是使用表查找;這樣做會導緻密碼明顯變慢。

因此,這種混淆並不是源於替換本身,而是源於應用複雜的非線性函式,這些函式往往會產生最大程度的無用和復雜的方程。非線性函式越“線性”,就越容易進行密碼分析和破解(我們可以假設它在某些輸入/輸出中像線性函式一樣具有一定的真實機率)。對於什麼樣的非線性函式對密碼分析者最大的幫助,有大量的研究。

所以說非線性是造成“混亂”的原因可能更準確。在對稱密碼算法中總是需要非線性,因為否則可以很容易地操縱和求解所得到的表示密碼的方程組。

擴散

至於“擴散”,其他答案已經觸及。但更詳細地說,當你真正開始著手時,我們在嘗試加密任何東西時真正能做的就是對位應用 XOR 和 AND 門。是的,還有其他操作,比如整數加法;然而,這些實際上是由 XOR/AND 電路實現的,所以歸根結底,這就是我們真正有能力做的。(這不是絕對正確的;作為反例,您可以使用 NAND 作為您的基礎;這對目前的討論沒有真正的幫助。)

這與擴散有關,因為 XOR 和 AND 都是位切片操作。它們將兩位作為輸入,產生一位作為輸出。那麼如果將兩個 8 位字異或在一起會發生什麼?您實際上是在並行對 8 個獨立的數據組執行 8 個完全獨立的 XOR 門。XOR 和 AND(在任何大於 1 的字數上)實際上是一個 SIMD 操作。因此,索引處的位 $ i $ 在單詞中不影響單詞中任何其他索引處的位。實際上,我們只有 1 位寄存器,我們只是有很多並行的。

這就是為什麼需要“轉置”(旋轉和移位)來產生擴散:旋轉和移位確保新的位對被用作未來 XOR/AND 門的輸入。基本上,線性擴散層負責混合這些 1 位寄存器的內容。

更具體地說:線性擴散層的工作是確保非線性函式的每個連續輸入都由平衡且最大數量的疊加輸入位組成。如果您的非線性函式對 X 位字進行操作,那麼理想情況下,每個輸入位將有 X/2 個輸入位超級定位在每個索引中(每個輸入位的 50% 影響每個輸出位,也就是“雪崩效應”)。(注意:異或和是求和位的線性疊加)

簡而言之,擴散和混淆的結合意味著我們想要產生具有最大項數和最大代數複雜度的方程。然後,當然,我們重複這個過程,直到描述輸出的方程的結果系統甚至無法通過機率推理來處理。

引用自:https://crypto.stackexchange.com/questions/19000