S盒基本問題
我正在嘗試了解 DES 和一堆其他使用 S-Boxes 的加密系統。
我現在有一個關於 Sbox 一般如何工作的非常基本的問題。對於 DES,Sbox 將 6 位輸入替換為 4 位輸出。我很清楚使用合適的替換錶是如何工作的。我不明白的是密碼系統如何處理“資訊失去”(至少在我看來是資訊失去,但我可能錯了)。
如果將 6 位映射到 4 位,則會失去資訊。因此,可能有多個 6 位組合映射到相同的 4 位組合。因此,在 S-box 操作之後,對我來說似乎不可能從 4 位結果中再次獲得原始的 6 位。那麼怎麼可能再次解密你的密文呢?
好問題,是的,看起來數據失去了。從技術上講,某些東西顯然必須消失,因為 6 不會變成 4。但是考慮 DES 的整體架構:
跟踪單個數據塊的左半部分和右半部分的流動。您會看到 2 個完整的 32 位字通過 Feistel 網路暢通無阻地流動。那裡沒有資訊失去,它只是異或,保持寬度。所以 64 位進入塊,64 位出現。
您實際上指的是 DES 密碼函式的內部結構,如下所示:-
並且您可以辨識 s 框。它們確實接受 6 位並輸出 4,因此由於鴿子原理而失去了一些東西。但是看一下s盒上面的擴展盒。由於排列 P 會創建額外的位。因此,失去的東西從未真正存在過,而是在密碼函式中創建(並本地化到)。因此,對於密碼功能類似,32 位輸入和 32 位輸出。
之所以如此,可以類比考慮,但不要太過分。考慮單輪。DES 的密碼功能作為一個小型偽隨機數生成器執行,該生成器以子密鑰(輪密鑰)和塊的另一半 32 位數據為密鑰。然後將其與原始數據進行異或以對其進行加密。然後流交換並且循環函式重複。因此,作為(一種)偽隨機數生成器,密碼函式不必是可逆的。
您實際上可以使用現成的散列函式(如 MD5 或 SHA1(均截斷為 32 位))重新設計 DES,以查看轉碼仍然是可能的。將散列函式視為密碼的基礎是密碼學中的一個常見主題,可以通過使用散列函式構造加密算法的問題找到更多見解。(我不知道如何處理 3 路重複。)
這些東西的設計者傾向於用主算法來反映關鍵調度。漩渦同樣是對稱的。我懷疑這是設計人員可以想到的唯一方法,可以使用與主要部分相似的幾何形狀輕鬆擴展 64 位密鑰,並且仍然與 32 位半塊進行異或。因此他們發明了 48 位子密鑰。地球上沒有特定的理由擁有 48 位圓形密鑰。它們可能是 32 位的,這將使非對稱的 6 到 4 位的盒子變得不必要。
DES 使用 Feistel 網路。S-box 結果與另一半進行異或運算,因此不會失去任何資訊。它不需要是可逆的。