體制
分組密碼是將明文消息編碼表示后的數(shù)字序列劃分成長為n的組,每個組(可稱為長度為n的矢量)分別在密鑰控制下變換成等長的輸出數(shù)字序列。
其加密函數(shù)E:V_n × K → V_m。 其中V_n和V_m分別為n維和m維的矢量空間,K為密鑰空間。它與流密碼不同之處在于輸出的每一位數(shù)字不是只與相應時刻輸入的明文數(shù)字有關,而是與一組長為n的明文數(shù)字有關。這種密碼實質上是字長為n的數(shù)字序列的代換密碼。
混淆和擴散
- 混淆(Confusion) 是一種加密操作,使得密鑰與密文之間的關系變得模糊(通過代換器來完成,即S盒)
- 擴散(Diffusion) 是一種加密操作,使得一個明文符號能夠分散為多個密文符號,其目的是隱藏明文字符出現(xiàn)次數(shù)的統(tǒng)計概率。
Feistel密碼結構
Feistel提出利用乘積密碼可獲得簡單的代換密碼,乘積密碼指順序地執(zhí)行兩個或多個基本密碼系統(tǒng),使得最后的密碼強度高于每個基本密碼系統(tǒng)產(chǎn)生的結果。其思想實際上是Shannon提出的利用乘積密碼實現(xiàn)混淆和擴散思想的具體應用。
Feistel加密結構
加密算法的輸入是分組長為2w的明文和一個密鑰k,將每組明文分成左右兩半L和R,在進行完n輪迭代后,左右兩半再合并到一起產(chǎn)生密文分組。第i輪迭代的前一輪輸出的函數(shù):
L_i = R_{i-1}
R_i = L_{i-1} xor F(R_{i-1}, k_i)
Feistel解密結構
解密過程本質上和加密過程是一樣的,算法使用密文作為輸入,但使用子密鑰K_i的次序與加密過程相反。這一特征保證了解密和加密可采用同一算法。
DES算法描述
明文分組長度為64比特,密鑰長度為56比特。在加密過程中將有三個階段:
- 一個初始置換IP,用于重新排列明文分組的64比特數(shù)據(jù)。
- 進行具有相同功能的16輪變換,每輪變換中都有置換和代換運算,在第16輪變換的輸出后,將結果分成左右兩半,并交換次序。
- 最后再經(jīng)過一個逆初始置換逆IP從而產(chǎn)生64比特密文。
這里需要注意的是,無論是初始置換還是最終的逆初始置換,都不能增減DES的安全性。其設計的初衷并不被人所知,但是看起來其目的是將明文重新排列,使之適應8-bit寄存器。其映射規(guī)則如下:矩陣為8×8矩陣,自左至右,自上至下依次排位,矩陣中的某次位數(shù)目即為明文中該次位的比特值映射到buffer的偏移量。
f函數(shù)
f函數(shù)在DES的安全性中起到了至關重要的作用,f函數(shù)的作用是將上一輪的右半邊的結果,以及該輪所獲得的密鑰作為輸入數(shù)據(jù),輸出結果是通過異或操作來加密。
在f函數(shù)最開始