分組密碼
分組密碼是將明文消息編碼后的數(shù)字序列劃分成長為N的分組(長為N的矢量),,分別在密鑰k=(k0,k1,...kt-1)的控制下變換成等長的輸出數(shù)字序列(這個(gè)序列是長為M的向量,,即輸入和輸出分組的長度可以不同)。它與流密碼的不同在于輸出的每一位數(shù)字不僅與相應(yīng)時(shí)刻輸入的明文數(shù)字有關(guān),,而是與一組長為n的明文數(shù)字有關(guān),。分組密碼的本質(zhì)實(shí)際上是字長為n的數(shù)字序列的代換密碼。
為保證安全性,,設(shè)計(jì)的算法應(yīng)當(dāng)滿足以下要求:
1.分組長度n要足夠大,,防止明文窮舉攻擊奏效。
2.密鑰量要足夠大(即向量k要足夠長),,并且盡可能消除弱的密鑰,,使所有密鑰同等的好,防止密鑰窮舉攻擊奏效,。但密鑰本身又不能過長,,否則難以管理。
3.由密鑰確定置換的算法要足夠復(fù)雜,,以抵抗差分攻擊和線性攻擊,。
4.加解密運(yùn)算簡單且易于實(shí)現(xiàn)。
5.數(shù)據(jù)擴(kuò)展和差錯(cuò)傳播盡可能小,。
代換
如果明文和密文分組的長都為n比特,,則顯然每個(gè)明文分組都對(duì)應(yīng)有2^n個(gè)可能的取值。為了保證加密運(yùn)算可逆(否則無法解密,,因?yàn)榉纸M密碼是單鑰密碼),,明文的每個(gè)分組在特定加密算法作用之后應(yīng)當(dāng)產(chǎn)生唯一的一個(gè)密文分組,稱明文分組到密文分組的可逆變換為代換,??梢钥闯觯煌赡孀儞Q的個(gè)數(shù)有(2^n),!個(gè),,顯然,這也就意味著密鑰的長度為(2^n),!比特,。
從實(shí)現(xiàn)的角度看,分組長度很大的可逆代換是不實(shí)際的,。即便分組長度僅為64比特,,對(duì)應(yīng)的密鑰長度也將約為10^21比特,非常難以處理,;然而長度太小又不能滿足上述關(guān)于算法安全性的第一條要求,。因此,實(shí)際中常將分組分為較小的子段,,例如可將n長向量的代換變?yōu)樵O(shè)計(jì)m個(gè)較小的子代換,,稱每個(gè)子代換為代換盒,簡稱為S盒,。例如,,對(duì)于48比特輸入的DES密碼,用8個(gè)S盒來實(shí)現(xiàn),,這樣每個(gè)S盒的輸入僅為6比特,。
擴(kuò)散和混淆
擴(kuò)散和混淆的目的是抗擊敵手對(duì)密碼系統(tǒng)的統(tǒng)計(jì)分析。如果敵手知道明文的某些統(tǒng)計(jì)特性(如不同字母出現(xiàn)的頻率,,特定的單詞或短語),,而這些統(tǒng)計(jì)特性如果以某種方式在密文中反映了出來,,那么敵手就有可能得到加密密鑰的一部分或一個(gè)可能的密鑰集合。因此需要引入擴(kuò)散和混淆的方法,。
所謂擴(kuò)散,,就是將明文的統(tǒng)計(jì)特性擴(kuò)散到密文中去,實(shí)現(xiàn)方式是使得密文的每一位由明文中的多位產(chǎn)生,。這樣明文的統(tǒng)計(jì)特性就被散布開了,,因而在密文中每一字母出現(xiàn)的概率將更接近于相等,使敵手難以通過統(tǒng)計(jì)分析得到有用的信息,。
所謂混淆,,就是使密文和密鑰之間的統(tǒng)計(jì)關(guān)系變得盡可能復(fù)雜,使敵手無法得到密鑰,。這樣敵手即便得到了密文之間的某些統(tǒng)計(jì)關(guān)系,,也難以得到密鑰。
Feistel密碼結(jié)構(gòu)
大多數(shù)分組密碼的結(jié)構(gòu)本質(zhì)上都是基于Feistel網(wǎng)絡(luò)結(jié)構(gòu),,因此,,了解Feistel密碼結(jié)構(gòu)對(duì)于學(xué)習(xí)分組密碼算法是非常有幫助的。
Feistel加密結(jié)構(gòu)
Feistel加密算法的輸入是長為2w的明文和一個(gè)密鑰K=(K1,,K2...,Kn),。將明文分組分成左右兩半L和R,然后進(jìn)行n輪迭代,,迭代完成后,,再將左右兩半合并到一起以產(chǎn)生密文分組。其第i輪迭代的函數(shù)為:
Li=Ri-1
Ri=Li-1+F(Ri-1,Ki)
其中Ki是第i輪的子密鑰,,“+”表示異或運(yùn)算,,F(xiàn)表示輪函數(shù)。一般地,,各輪子密鑰彼此各不相同,,且輪函數(shù)F也各不相同。代換過程完成后,,在交換左右兩半數(shù)據(jù),,這一過程稱為置換。Feistel網(wǎng)絡(luò)的結(jié)構(gòu)如下:
顯然,,F(xiàn)eistel網(wǎng)絡(luò)的安全性與以下參數(shù)有關(guān):
1.分組大小
2.密鑰大小
3.子密鑰產(chǎn)生算法 該算法復(fù)雜性越高,,則密碼分析越困難(注意:并非加密算法,F(xiàn)eistel網(wǎng)絡(luò)結(jié)構(gòu)本身就是加密算法或其重要組成部分,,是無需保密的),。
4.輪數(shù) 單輪結(jié)構(gòu)遠(yuǎn)不足以保證安全,一般輪數(shù)取為16。
5.輪函數(shù) 結(jié)構(gòu)越復(fù)雜越難分析
Feistel解密結(jié)構(gòu)
本質(zhì)上與加密過程一樣,,將密文作為輸入,,以相反次序使用子密鑰,保證加密和解密可以采用同一算法,。以16輪加密為例,,在加密過程中,,LE16=RE15,,那么在解密過程中,LD1=RD0=LE16=RE15,其中E表示加密(Encode),,D表示解密(Decode),。
|