為什麼我們需要在分組密碼中經歷多個循環
根據Computer Networking: a top down approach,第 8 章(第 6 版),分組密碼涉及將輸入消息分成大小為k的塊,其中通常k = 64。但是由於k = 64 意味著我們需要創建一個表輸入大小 2 k或 2 64在我們的例子中,因此我們模擬隨機排列的表。為了模擬,我們使用以下過程。該函式首先將一個 64 位塊分成 8 個塊,每個塊由 8 位組成。每個 8 位塊由一個 8 位到 8 位的表處理,該表具有可管理的大小。例如,第一個塊由 T 1 表示的表處理。接下來,8 個輸出塊被重新組合成一個 64 位塊。然後對塊中 64 位的位置進行加擾(置換)以產生 64 位輸出。該輸出被回饋到 64 位輸入,從那裡開始另一個週期。在n 個這樣的循環之後,該函式提供一個 64 位的密文塊。
問題來了:為什麼我們需要通過n 個這樣的循環來處理文本?書中指出
輪次的目的是使每個輸入位影響大多數(如果不是全部)最終輸出位。(如果只使用一輪,一個給定的輸入位將只影響 64 個輸出位中的 8 個。)
這個分組密碼算法的關鍵是八個排列表(假設加擾函式是眾所周知的)。
*個人評論 - 但是,如果輸入文本經過了一個循環,那麼所有輸入都會受到影響,因為每個塊都經過了基於相應表 T j表的映射。因此,我們不應該被要求通過n個循環來循環它。
首先,我不會依賴那本書來獲取有關現代密碼學的資訊。一般來說,這可能是網路的一個很好的參考,但是根據他們給出的例子,他們似乎真的不知道他們的加密貨幣。他們給出的範例密碼感覺像是 90 年代的東西。
現代分組密碼使用 $ k=128 $ ; 的問題 $ k=32 $ 是您在使用相同的密鑰加密幾千兆字節後傾向於洩漏有關明文的資訊;使用現代網路,您可以輕鬆達到幾 GB。此外,依賴鍵的 sbox 已經過時了。它們在硬體上有點貴,它們傾向於在軟體中洩漏定時數據(由於記憶體),並且 sbox 有時對差分或線性密碼分析不是特別強。
至於你的問題:
為什麼我們需要通過n個這樣的循環來處理文本?
考慮以下情況 $ n=1 $ ,並且您有兩個不同的明文,它們在一個位上有所不同。然後,如果您查看兩個並行加密,七個 sbox 的輸入完全相同(因為它們只依賴於未更改的輸入),因此只有一個 sbox(例如, $ T_0 $ ) 改變了它的輸出。那個 sbox 有 8 個輸出位,所以當你通過 64 位加擾器時,你有 56 個輸出位總是相同的,而 8 個可能會改變。這與“任何輸入位都可能影響任何輸出位”相去甚遠。
我們可以為更大的事情做更複雜的事情 $ n $ ; 這個簡單的推理表明 $ n=1 $ 案例只是沒有削減它……
考慮一下當我們對一輪版本進行已知明文攻擊時會發生什麼。我知道每個 Ti 的輸入,通過撤消打亂,我可以確定相應的輸出。所以現在我在每個 Ti 中都有一個條目。每條額外的消息都可以讓我確定 Ti 表中的更多條目,因此有了足夠多的消息(可能有幾千條,因為會有重複的 Ti 輸入),我可以確定 Ti 表的全部內容。
現在考慮一個 2 輪版本,再次使用已知明文攻擊。我知道第一輪 Ti 表的輸入,但從第二輪得到輸出。所以現在我必須將第一輪的輸入映射到第一輪的(未知)輸出,從而將輸入映射到第二輪。因此,雖然這仍然很弱,但它仍然比一輪版本強得多。
因此,添加額外的輪次意味著我必須將整個密碼作為一個整體進行攻擊,而不是能夠將其分解為單獨的表。