簡介
分組密碼算法(Block Cipher Algorithm)是將輸入數據划分成固定長度的組進行加密和解密的一類對稱密碼算法。其安全性主要以來於密鑰,通信雙方使用相同的密鑰加密和解密。其優勢有速度快,易於標准化和便於軟硬件實現等特點。
下標集:
₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ⁻ ¹ ₋ ₖ
DES加密算法
DES簡介
於1977年公布的第一個被廣泛應用的商用數據加密算法,在抵抗了二十余年的密碼分析后,其安全性已無法得到保障。所以在1998年12月以后就不再使用DES加密算法。但是其衍生的三重DES加密算法目前還有其應用場景。
加密過程
算法總覽
DES加密算法就如下圖所示。
其輸入為64位(bit)的明文,使用56位(bit)的密鑰,但是附加了8位奇偶校驗位(位於8,16,...,64位)組合成64位密鑰。在64位密鑰的控制下,最終產生了64(bit)的密文。
在下圖中X=X₁X₂X₃...X₆₄
即為輸入明文,在經過初始轉換IP的換位處理后,得到一個亂序的明文組,並將其分為L₀
和R₀
兩部分,每部分各32位。而K₁K₂...K₁₆
則是生成由初始密鑰生成的輪密鑰,長度有48位。
其次進行如下圖所示與密鑰有關的16輪迭代變換。對R₀在進行子密鑰K₁控制下的f變換,其得到的結果與L₀作逐位異或后,作為下一輪的R₁,而R₀則作為下一輪的L₁。在經過16輪如上步驟,最后經過逆初始置換P⁻¹處理后得到密文Y=Y₁Y₂Y₃...Y₆₄
初始置換IP與逆初始置換IP⁻¹
IP操作是對原明文的位次順序進行打亂,而逆初始置換IP⁻¹是IP操作的一個逆操作,其目的是為了撤銷之前的初始置換操作。其實這兩種操作對密碼方面的作用並不大。
其具體操作正如表格中所示,在如下表格中依次填入該順序位次下的bit位,最終組成新的位次順序。如第一位的的內容即為原明文中第58位處的內容。
輪密鑰的產生
初始密鑰K在經過選擇置換PC_1后同樣分為兩個部分C₀
和D₀
,每部分各28位(bit),該選擇置換實際是在除去了奇偶校驗位的置換。隨后分別對C₀
和D₀
進行循壞移位操作LSᵢ
而LSᵢ到底循壞左移幾位,取決於i的值,i=1,2,9和16時移動一個位置,否則移動兩位。
Kᵢ = PC_2(CᵢDᵢ),而子密鑰Kᵢ則是對CᵢDᵢ進行固定置換PC_2后得到,置換PC_2就是真正的選擇函數了。只會選出其中的48位,所以得到的子密鑰是48位的。
在經過16輪的迭代,就可以生成16組子密鑰。至i=16時,剛好左旋了28比特,所以C₀=C₁₆且D₀=D₁₆。
⭐⭐⭐加密函數f
加密函數f是整個DES算法的核心,是其中最重要的部分,也是其安全性的主要體現。
其過程如下所示,第一個輸入是長度為32位的比特串Rᵢ₋₁
,在經過位選擇函數E的次序置換后,與第二個輸入48位的比特串Kᵢ
按模2加運算得到P,即P=Kᵢ+Rᵢ₋₁
,將得到的結果寫成連續的8個6比特串,再對每個6比特串使用S盒輸出,經S盒輸出后6比特串變為4比特串,組合為32位比特串再經過置換運算P,就是得到的結果。
8個6比特串,每個比特串都會對應一個S盒,一共有八個S盒,S盒是整個DES算法中唯一的非線性部件,當然也是整個算法的安全性所在。
那么這個s盒是如何使用的呢,我們舉個例子,加入S₁
輸入的6比特串為011001
,設為b₀b₁b₂b₃b₄b₅
,所以行選為01(第一個和第六個字符b₀b₅),也就是1,列選為1100(第二三四五個字符b₁b₂b₃b₄),也就是12。查找S盒中的S₁
結果為9,轉換為二進制1001,也就得到了我們的結果。
也就是說,對於輸入b₀b₁b₂b₃b₄b₅
,b₀b₅作為行值,b₁b₂b₃b₄作為列值
解密過程
DES的解密過程和加密過程大致相同,只不過在16次迭代中使用子密鑰的次序正好相反。第一次就是使用子密鑰K₁₆
三重DES
當DES的密鑰長度已被證明已經不能滿足當前安全的要求,但為了充分利用DES軟硬件資源,人們開始對DES提出各種改進措施。一種簡單方案就是使用多重DES。
多重DES就是使用多個密鑰利用DES對明文進行多次加密。采納較多的是三重DES。
假設k₁k₂k₃是3個長度為56bit的密鑰,明文給定為x,則密文y為
y = DESₖ₃(DESₖ₂⁻¹(DESₖ₁(x)))
加入密文為y,解密出x為
x = DESₖ₁⁻¹(DESₖ₂(DESₖ₃⁻¹(y)))