對稱密鑰算法中的可逆解密
我目前正在學習對稱密鑰算法的內部工作,例如 DES、AES、BlowFish、IDEA 等等。
這些都是相當複雜的加密算法,需要對Plain Text進行大量的混淆和擴散才能產生相應的Cipher Text。
但是其中大多數(如果不是全部)的共同點是它們的解密算法與用於加密它們的加密算法有點相反。
例如:-
DES 解密需要以相反的順序顯示密鑰部分(例如,如果使用 K1、K2、K3 …… ..K1)
IDEA 解密需要在密鑰生成和子密鑰模式方面進行一些修改。並且解密子密鑰實際上是加密子密鑰的逆。
BlowFish 解密過程需要反轉 P 數組值
AES 解密需要反向加密過程(inv Sbox、inv CMatrix 等)
問題是,為什麼加密和解密如此相似。
1)這些算法是在牢記解密過程(無需任何額外算法/硬體的簡單可逆性)的同時製作的嗎?
2)或者這是對稱密鑰算法通常表現出的屬性?
為什麼加密和解密如此相似?
分組密碼的設計考慮了可逆性。當然,為了維護數據隱私,它們只能通過正確的密鑰來恢復。這是因為具有給定密鑰的分組密碼是一個排列。它是所有可能的塊大小的輸入到所有可能的塊大小的輸出的雙射。這使得逆轉成為可能。確切的排列由密鑰選擇,因此給定輸入映射到的密文塊取決於密鑰。它們的設計考慮到這一點,以保持解密簡單。
對一組四個不同的元素進行以下排列,隨機選擇:
$ \pmatrix{0&1&2&3\1&3&2&0} $
因為它是雙射,所以總是存在逆:
$ \pmatrix{0&1&2&3\3&0&2&1} $
如您所見,排列圖 $ 1 $ 至 $ 3 $ , 所以逆排列映射 $ 3 $ 回到 $ 1 $ . 分組密碼就是這樣做的,只是排列不是固定的。相反,它是由鑰匙“選擇”的。每個鍵從所有可能的排列中選擇不同的排列。此外,還有不止四個元素。AES 加密置換了一組 $ 2^{128} $ 不同的元素,由鍵選擇。解密只是給你逆向,讓你恢復明文。分組密碼背後的所有復雜數學都是必要的,因為不可能儲存每個雙射( $ 2^{128}! \times 2^{128} $ ) 在表格中。
這是所有對稱密碼的屬性嗎?
分組密碼不是唯一的對稱密碼。流密碼不需要是可逆的,因為它們所做的只是生成一個偽隨機數據流,稱為密鑰流,它與明文進行異或。解密不需要反向執行流密碼,而是生成相同的密鑰流(通過選擇相同的密鑰)並將其與密文進行異或。
有趣的是,可以通過使用計數器模式或 CTR等操作模式將正常分組密碼轉換為流密碼,該操作模式通過加密不斷增加的計數器來生成密鑰流。使用 CTR 模式進行解密實際上涉及在加密方向上使用分組密碼,因此可以實現 CTR(或將分組密碼轉換為流密碼的任何其他模式),而無需實施解密。參見維基百科的下圖:
這是所有對稱排列的屬性嗎?
也沒有!儘管將分組密碼設計為易於實現逆排列是很常見的,但並非所有排列都能做到這一點,即使它們在技術上是可逆的。這對於公共排列很常見。這是一個固定的排列,不需要知道密鑰就可以反轉。它們在海綿結構中很常見,通過確保對排列的大部分輸入是保密的,從而減輕對密鑰的需求,從而獲得了高安全性。公共排列的一個例子是Gimli,它僅在正向設計:
像 Keccak、Ascon
$$ 15 $$等,我們只評估前向的性能,我們只考慮前向模式;也使用逆排列的模式需要額外的硬體空間,並且似乎沒有提供任何明顯的優勢。
除了更容易實現之外,不需要對其逆進行密碼分析。雖然它可能不直覺,但事實是,有時逆排列不如正向排列安全。FROG分組密碼就是這種情況。它是 NIST AES 競賽期間的 AES 候選者,但未能通過第一輪。它在解密方向(給定密鑰的逆排列)上顯示出比在加密方向上更慢的擴散。