分組密碼是將明文消息編碼表示后的數(shù)字序列劃分成長為n的組,每個組(可稱為長度為n的矢量)分別在密鑰控制下變換成等長的輸出數(shù)字序列。
其加密函數(shù)E:V_n × K → V_m。 其中V_n和V_m分別為n維和m維的矢量空間,K為密鑰空間。它與流密碼不同之處在于輸出的每一位數(shù)字不是只與相應(yīng)時刻輸入的明文數(shù)字有關(guān),而是與一組長為n的明文數(shù)字有關(guān)。這種密碼實質(zhì)上是字長為n的數(shù)字序列的代換密碼。

混淆和擴(kuò)散

  1. 混淆(Confusion) 是一種加密操作,使得密鑰與密文之間的關(guān)系變得模糊(通過代換器來完成,即S盒)

  2. 擴(kuò)散(Diffusion) 是一種加密操作,使得一個明文符號能夠分散為多個密文符號,其目的是隱藏明文字符出現(xiàn)次數(shù)的統(tǒng)計概率。

Feistel密碼結(jié)構(gòu)

Feistel提出利用乘積密碼可獲得簡單的代換密碼,乘積密碼指順序地執(zhí)行兩個或多個基本密碼系統(tǒng),使得最后的密碼強度高于每個基本密碼系統(tǒng)產(chǎn)生的結(jié)果。其思想實際上是Shannon提出的利用乘積密碼實現(xiàn)混淆和擴(kuò)散思想的具體應(yīng)用。

Feistel加密結(jié)構(gòu)

加密算法的輸入是分組長為2w的明文和一個密鑰k,將每組明文分成左右兩半L和R,在進(jìn)行完n輪迭代后,左右兩半再合并到一起產(chǎn)生密文分組。第i輪迭代的前一輪輸出的函數(shù):

L_i = R_{i-1}
R_i = L_{i-1} xor F(R