分組密碼是將明文消息編碼表示后的數(shù)字序列劃分成長(zhǎng)為n的組,每個(gè)組(可稱(chēng)為長(zhǎng)度為n的矢量)分別在密鑰控制下變換成等長(zhǎng)的輸出數(shù)字序列。
其加密函數(shù)E:V_n × K → V_m。 其中V_n和V_m分別為n維和m維的矢量空間,K為密鑰空間。它與流密碼不同之處在于輸出的每一位數(shù)字不是只與相應(yīng)時(shí)刻輸入的明文數(shù)字有關(guān),而是與一組長(zhǎng)為n的明文數(shù)字有關(guān)。這種密碼實(shí)質(zhì)上是字長(zhǎng)為n的數(shù)字序列的代換密碼。
混淆和擴(kuò)散
混淆(Confusion) 是一種加密操作,使得密鑰與密文之間的關(guān)系變得模糊(通過(guò)代換器來(lái)完成,即S盒)
擴(kuò)散(Diffusion) 是一種加密操作,使得一個(gè)明文符號(hào)能夠分散為多個(gè)密文符號(hào),其目的是隱藏明文字符出現(xiàn)次數(shù)的統(tǒng)計(jì)概率。
Feistel密碼結(jié)構(gòu)
Feistel提出利用乘積密碼可獲得簡(jiǎn)單的代換密碼,乘積密碼指順序地執(zhí)行兩個(gè)或多個(gè)基本密碼系統(tǒng),使得最后的密碼強(qiáng)度高于每個(gè)基本密碼系統(tǒng)產(chǎn)生的結(jié)果。其思想實(shí)際上是Shannon提出的利用乘積密碼實(shí)現(xiàn)混淆和擴(kuò)散思想的具體應(yīng)用。
Feistel加密結(jié)構(gòu)
加密算法的輸入是分組長(zhǎng)為2w的明文和一個(gè)密鑰k,將每組明文分成左右兩半L和R,在進(jìn)行完n輪迭代后,左右兩半再合并到一起產(chǎn)生密文分組。第i輪迭代的前一輪輸出的函數(shù):
L_i = R_{i-1}
R_i = L_{i-1} xor F(R