第3章分組密碼-zhp_第1頁
第3章分組密碼-zhp_第2頁
第3章分組密碼-zhp_第3頁
第3章分組密碼-zhp_第4頁
第3章分組密碼-zhp_第5頁
已閱讀5頁,還剩163頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第3章分組密碼體制3.1分組密碼概述3.2數(shù)據(jù)加密標(biāo)準(zhǔn)3.3差分密碼分析與線性密碼分析3.4分組密碼的運行模式3.5IDEA3.6AES算法——Rijndael習(xí)題分組密碼的一般模型分組密碼是將明文消息編碼為二進制序列后,劃分成固定大小的塊(Block),每塊分別在密鑰的控制下變換成二進制序列。令明文編碼后的二進制序列為x0,x1,…,xi,…,將其劃分為若干固定長度的分組(Block,塊)??紤]某個分組x=(x0,x1,…,xn-1)。分組在密鑰k=(k0,k1,…,kt-1)的控制下變換為長度為q的密文分組y=(y0,y1,…,ym-1

)。其本質(zhì)是一個從明文空間(長度為p的比特串集合)M到密文空間(長度為q的比特串的集合)C的映射,該映射由密鑰確定。如果明文和密文的分組長都為n比特,則明文的每一個分組都有2n個可能的取值。為使加密運算可逆(使解密運算可行),明文的每一個分組都應(yīng)產(chǎn)生惟一的一個密文分組,這樣的變換是可逆的,稱明文分組到密文分組的可逆變換為代換。不同可逆變換的個數(shù)有2n!個。3.1.1代換

例:當(dāng)明文分組長度為p時,有多少種明文和密文間的可逆變換(置換)?有個可能的明文,同樣有個可能的密文,當(dāng)密鑰確定時,每個明文唯一對應(yīng)一個密文,這樣的可逆變換(置換)共有個。例如,則置換的個數(shù)為。

表示n=4的代換密碼的一般結(jié)構(gòu),4比特輸入產(chǎn)生16個可能輸入狀態(tài)中的一個,由代換結(jié)構(gòu)將這一狀態(tài)映射為16個可能輸出狀態(tài)中的一個,每一輸出狀態(tài)由4個密文比特表示。加密映射和解密映射可由代換表來定義,如表3.1所示。這種定義法是分組密碼最常用的形式,能用于定義明文和密文之間的任何可逆映射。(見33頁表3.1)理想分組密碼如果每個密鑰定義一個置換,則為理想分組密碼(Idealblockcipher)。從實現(xiàn)角度來說,當(dāng)分組長度大到一定程度時,理想分組密碼是在實際當(dāng)中是不可行的。當(dāng)分組長度為n時,理想分組密碼的密鑰長度將n×2

n

比特。例如,當(dāng)n=64時,需要的密鑰長度為,如此長的密鑰在實際應(yīng)用中難以管理和實現(xiàn)。實際中常將n分成較小的段,例如可選n=r·n0,其中r和n0都是正整數(shù),將設(shè)計n個變量的代換變?yōu)樵O(shè)計r個較小的子代換,而每個子代換只有n0個輸入變量。一般n0都不太大, 稱每個子代換為代換盒,簡稱為S盒。

Shannon提出了在設(shè)計密碼系統(tǒng)時抗擊統(tǒng)計分析的兩個基本原則,成為分組密碼設(shè)計的指導(dǎo)原則。它們是擴散(Diffusion)原則和混淆(Confusion)原則。 如果敵手知道明文的某些統(tǒng)計特性,如消息中不同字母出現(xiàn)的頻率、可能出現(xiàn)的特定單詞或短語,而且這些統(tǒng)計特性以某種方式在密文中反映出來,那么敵手就有可能得出加密密鑰或其一部分,或者得出包含加密密鑰的一個可能的密鑰集合。3.1.2擴散和混淆擴散原則擴散是指明文的每一位(比特)盡可能多地影響密文的比特位,以隱蔽明文的統(tǒng)計特征。密鑰的每一位(比特)也盡可能迅速地擴散到較多的密文比特中去。擴散的目的是希望密文中的任一比特都要盡可能與明文、密鑰相關(guān)聯(lián),或者說,明文和密鑰中任一比特的變化,都會在某種程度上影響到密文的變化,以防止統(tǒng)計分析攻擊。

例如對英文消息M=m1m2m3…的加密操作其中ord(mi)是求字母mi對應(yīng)的序號,chr(i)是求序號i對應(yīng)的字母。這時明文的統(tǒng)計特性將被散布到密文中,因而每一字母在密文中出現(xiàn)的頻率比在明文中出現(xiàn)的頻率更接近于相等,雙字母及多字母出現(xiàn)的頻率也更接近于相等。在二元分組密碼中,可對數(shù)據(jù)重復(fù)執(zhí)行某個置換,再對這一置換作用于一函數(shù),可獲得擴散?;煜瓌t混淆指在加密變換過程中明文、密鑰以及密文之間的關(guān)系盡可能地復(fù)雜,以使密碼分析者(敵手)無法分析出密鑰。防密碼分析者采用統(tǒng)計分析法進行破譯!執(zhí)行混淆的每一步都必須是可逆的簡單的線性函數(shù)得到的混淆效果不夠理想,通常需要復(fù)雜的代換關(guān)系(如非線性的函數(shù))達到比較好的混淆效果。 乘積密碼指順序地執(zhí)行兩個或多個基本密碼系統(tǒng),使得最后結(jié)果的密碼強度高于每個基本密碼系統(tǒng)產(chǎn)生的結(jié)果. Feistel還提出了實現(xiàn)代換和置換的方法。其思想實際上是Shannon提出的利用乘積密碼實現(xiàn)混淆和擴散思想的具體應(yīng)用。3.1.3Feistel密碼結(jié)構(gòu)圖3.3Feistel網(wǎng)絡(luò)示意圖1.Feistel加密結(jié)構(gòu)

輸入是分組長為2w的明文和一個密鑰K。將每組明文分成左右兩半L0和R0,在進行完n輪迭代后,左右兩半再合并到一起以產(chǎn)生密文分組。其第i輪迭代的輸入為前一輪輸出的函數(shù):其中Ki是第i輪用的子密鑰,由加密密鑰K得到。一般地,各輪子密鑰彼此不同而且與K也不同。置換代換Feistel網(wǎng)絡(luò)的實現(xiàn)與以下參數(shù)和特性有關(guān):①分組大小:分組越大則安全性越高,但加密速度就越慢。分組密碼設(shè)計中最為普遍使用的分組大小是64比特。②密鑰大?。好荑€越長則安全性越高,但加密速度就越慢?,F(xiàn)在普遍認(rèn)為64比特或更短的密鑰長度是不安全的,通常使用128比特的密鑰長度。③輪數(shù):單輪結(jié)構(gòu)遠不足以保證安全性,但多輪結(jié)構(gòu)可提供足夠的安全性。典型地,輪數(shù)取為16。④子密鑰產(chǎn)生算法:該算法的復(fù)雜性越大,則密碼分析的困難性就越大。⑤輪函數(shù):輪函數(shù)的復(fù)雜性越大,密碼分析的困難性也越大。在設(shè)計Feistel網(wǎng)絡(luò)時,還有以下兩個方面需要考慮:①快速的軟件實現(xiàn):在很多情況中,算法是被鑲嵌在應(yīng)用程序中,因而無法用硬件實現(xiàn)。此時算法的執(zhí)行速度是考慮的關(guān)鍵。②算法容易分析:如果算法能被無疑義地解釋清楚,就可容易地分析算法抵抗攻擊的能力,有助于設(shè)計高強度的算法。2.Feistel解密結(jié)構(gòu)

Feistel解密過程本質(zhì)上和加密過程是一樣的,算法使用密文作為輸入,但使用子密鑰Ki的次序與加密過程相反,即第1輪使用Kn,第2輪使用Kn-1,……,最后一輪使用K1。這一特性保證了解密和加密可采用同一算法。圖3.4Feistel加解密過程在加密過程中:在解密過程中所以解密過程第1輪的輸出為LE15‖RE15,等于加密過程第16輪輸入左右兩半交換后的結(jié)果。容易證明這種對應(yīng)關(guān)系在16輪中每輪都成立。一般地,加密過程的第i輪有因此數(shù)據(jù)加密標(biāo)準(zhǔn)(dataencryptionstandard,DES)是迄今為止世界上最為廣泛使用和流行的一種分組密碼算法,它的分組長度為64比特,密鑰長度為56比特,它是由美國IBM公司研制的,DES于1977年1月15日被正式批準(zhǔn)并作為美國聯(lián)邦信息處理標(biāo)準(zhǔn),即FIPS-46,同年7月15日開始生效。規(guī)定每隔5年由美國國家保密局(nationalsecurityagency,NSA)作出評估,并重新批準(zhǔn)它是否繼續(xù)作為聯(lián)邦加密標(biāo)準(zhǔn)。3.2數(shù)據(jù)加密標(biāo)準(zhǔn)251997年開始,RSA公司發(fā)起了一個稱作“向DES挑戰(zhàn)”的競技賽。用了96天時間,成功地破解了用DES加密的一段信息;一年之后,在第二屆賽事上,這一記錄41天;1998年7月,“第2-2屆DES挑戰(zhàn)賽(DESChallengeII-2)”把破解DES的時間縮短到了只需56個小時;1999年1月,“第三屆DES挑戰(zhàn)賽(DESChallengeIII)”把破解DES的時間縮短到了只需22.5小時。盡管AES取代它成為新的數(shù)據(jù)加密標(biāo)準(zhǔn),但使用諸如3重DES等方法加強DES密鑰強度仍然不失為一個安全的密碼系統(tǒng)。因此,DES算法的基本理論和設(shè)計思想仍有重要的參考價值。圖3.5DES加密算法框圖

1.初始置換將64位明文的位置進行置換,得到一個亂序的64位明文組。而后分成左右兩段,每段32位,用L0和R0表示

如下為64比特的輸入M:M1M2M3M4M5M6M7M8

M9M10M11M12M13M14M15M16 M17M18M19M20M21M22M23M24

M25M26M27M28M29M30M31M32

M33M34M35M36M37M38M39M40

M41M42M43M44M45M46M47M48

M49M50M51M52M53M54M55M56

M57M58M59M60M61M62M63M64其中Mi是二元數(shù)字。經(jīng)過置換后的數(shù)據(jù)變?yōu)閄=IP(M): M58M50M42M34M26M18M10M2 M60M52M44M36M28M20M12M4 M62M54M46M38M30M22M14M6 M64M56M48M40M32M24M16M8 M57M49M41M33M25M17M9M1 M59M51M43M35M27M19M11M3 M61M53M45M37M29M21M13M5 M63M55M47M39M31M23M15M7如果再取逆初始置換Y=IP-1(X)=IP-1(IP(M)),可以看出,M各位的初始順序?qū)⒈换謴?fù)。圖3.6DES加密算法的輪結(jié)構(gòu)2.輪結(jié)構(gòu)函數(shù)F(R,K)的計算過程擴展運算E選擇擴展運算E

功能:將一個32位的輸入塊擴展為48位的輸出塊,令s表示E原輸入數(shù)據(jù)比特(R)的原下標(biāo),則E的輸出是將原下標(biāo)s=0或者1(mod4)的各比特重復(fù)一次得到的,即對原第32,1,4,5,8,9,12,13,16,17,20,21,24,25,28,29各位重復(fù)一次,實現(xiàn)數(shù)據(jù)擴展。

將R0進行擴展換位:

E(R0)=100000000001011111111110100000001101010000000110R0=0000000011111111000001101000001133模2加法功能:將E(R)的各個位與密鑰k的各位逐位作模2加,以得到輸出bi

,具體運算如下:K1=111100001011111001101110011101010010100000110000E(R0)=100000000001011111111110

100000001101010000000110將E(R0)與K1進行異或運算得到A:A=01110000101010011001000011110101111111000011011034S盒代換48-位輸入32-位輸出S-盒1S-盒2S-盒3S-盒4S-盒5S-盒6S-盒7S-盒8

代換運算由8個不同的代替盒(S盒)完成。每個S盒有6位輸入,4位輸出。

48位的輸入被分為8個6位的分組,每一分組對應(yīng)一個S-盒代替操作。

經(jīng)過S盒代換,形成8個4位分組。37

例如,假設(shè)S-盒6的輸入(即異或函數(shù)的第31位到36位)為110011。第1位和最后一位組合形成了11(用來選擇Si盒中的行),它對應(yīng)著S-盒6的第3行。中間的4位組合形成了1001(用來選擇Si盒中的列),它對應(yīng)著S-盒6的第9列。

S-盒6的第3行第9列處的數(shù)是14(行列的交叉位置數(shù)),,得到輸出值為1110。S-盒612,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,

9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,

4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,1338

A=011100001010100110010000

111101011111110000110110將結(jié)果分為8組:

A1=011100,查S1盒坐標(biāo)(0,14),得B1=0;

A2=001010,查S2盒坐標(biāo)(0,5),得B2=11;

A3=100110,查S3盒坐標(biāo)(2,3),得B3=9;

A4=010000,查S4盒坐標(biāo)(0,8),得B4=1;

A5=111101,查S5盒坐標(biāo)(3,14),得B5=5;

A6=011111,查S6盒坐標(biāo)(1,15),得B6=8;

A7=110000,查S7盒坐標(biāo)(2,8),得B7=10;

A8=110110,查S8盒坐標(biāo)(2,11),得B8=13;39置換運算P

將八個S盒的輸出連在一起生成一個32位的輸出,輸出結(jié)果再通過置換P產(chǎn)生一個32位的輸出,可以下表為P盒置換。至此,密碼函數(shù)F的操作就完成了。40

合并B1B2…B8,得數(shù)據(jù)B:

B=00001011100100010101100010101101

對B進行P盒置換,得:

X0=11111100000011000100110100100001L0=11111111101110000111011001010111R0=00000000111111110000011010000011

將L0與X0按位異或,形成R1:

R1=00000011101101000011101101110110令L1=R0

=000000001111111100000110100000113.密鑰的產(chǎn)生42

DES算法由64位密鑰產(chǎn)生16輪的48位子密鑰。在每一輪運算過程中,使用不同的子密鑰。每一輪子密鑰生成過程可以表示如下:64位密鑰置換選擇1C0(28位)D0(28位)循環(huán)左移循環(huán)左移C1(28位)D1(28位)置換選擇2循環(huán)左移循環(huán)左移Ci(28位)Di

(28位)置換選擇256位k148位ki48位56位壓縮置換。將56位輸入置換為48位。不考慮每字節(jié)的第8位,將64位密鑰減至56位。經(jīng)過置換選擇1,各輪循環(huán)移動的次數(shù)由輪數(shù)決定。43具體的子密鑰生成過程描述如下:(1)輸入的密鑰k先經(jīng)過一個置換(稱為“置換選擇1”)進行重排。置換結(jié)果(56位)被分成兩個28位C0與D0,其中C0是置換結(jié)果的前28位,而D0是置換結(jié)果的后28位。57494133251791585042342618102595143352719113605244366355473931231576254463830221466153453729211352820124

密鑰置換PC–144

K=01110011011001010110001101110101

01110010011010010111010001111001K刪除第8,16,24,…,64位的奇偶校驗位后變成56位的K’K=01110011011001010110001101110101

01110010011010010111010001111001K’=01110010110010011000101110100111001011010001110100111100K‘經(jīng)過PC-1置換后得到的C0D0(注:通過變換去掉奇偶校驗位):

C0=0000000011111111111111111101D0=000101010100101010100000100145

C0=0000000011111111111111111101

D0=0001010101001010101000001001由于是第一次迭代,故左移1位C0D0,得到C1D1:C1=0000000111111111111111111010D1=0010101010010101010000010010(2)在計算第i輪迭代所需要的子密鑰時,首先對Ci-1與Di

-1進行循環(huán)左移,分別得到Ci與Di。循環(huán)的次數(shù)取決于i的值:如果i=1,2,9和16,循環(huán)左移的次數(shù)是1;否則循環(huán)左移的次數(shù)等于2。這些經(jīng)過移位的值將作為下一個循環(huán)的輸入。46(3)移動后,將兩部分合并成56位后通過壓縮置換PC–2后得到48位子密鑰,即Ki=PC-2(CiDi)。壓縮置換如表所示。1417112415328156211023191242681672720132415231374755304051453348444939563453464250362932壓縮置換PC–2C1=0000000111111111111111111010

D1=0010101010010101010000010010C1D1在經(jīng)過PC-2置換后,得到子密鑰K1:K1=1111000010111110011011100111010100101000001100004.解密 和Feistel密碼一樣,DES的解密和加密使用同一算法,但子密鑰使用的順序相反。DES的安全性:互補性弱密鑰和半弱密鑰密鑰搜索差分分析與線性分析二重DES是多重使用DES時最簡單的形式,其中明文為P,兩個加密密鑰為K1和K2,密文為C,解密時,以相反順序使用兩個密鑰:3.2.2二重DES 因此,二重DES所用密鑰長度為112比特,強度極大地增加。 假設(shè)對任意兩個密鑰K1和K2,能夠找出另一密鑰K3,使得已經(jīng)證明多重DES并不等價于使用一個56位密鑰的單重DES。二重DES的中途相遇攻擊二重DES的密鑰長度為112位,密鑰量本身可以抵御目前的窮舉攻擊,但是,二重DES不能抵御中間相遇攻擊如果有那么如果已知一個明文密文對(P,C),攻擊的實施步驟:

首先,用256個所有可能的K1對P加密,將加密結(jié)果存入一表并對表按X排序;

然后用256個所有可能的K2對C解密,在上述表中查找與C解密結(jié)果相匹配的項,如果找到,則記下相應(yīng)的K1和K2。最后再用一新的明文密文對(P′,C′)檢驗上面找到的K1和K2,用K1和K2對P′兩次加密,若結(jié)果等于C′,就可確定K1和K2是所要找的密鑰。對已知的明文P,二重DES能產(chǎn)生264個可能的密文,而可能的密鑰個數(shù)為2112,所以平均來說,對一個已知的明文,有2112/264=248個密鑰可產(chǎn)生已知的密文。而再經(jīng)過另外一對明文密文的檢驗,誤報率將下降到248-64=2-16。所以在實施中途相遇攻擊時,如果已知兩個明文密文對,則找到正確密鑰的概率為1-2-16。抵抗中途相遇攻擊的一種方法是使用3個不同的密鑰做3次加密,從而可使已知明文攻擊的代價增加到2112。然而,這樣又會使密鑰長度增加到56×3=168比特,因而過于笨重。 一種實用的方法是僅使用兩個密鑰做3次加密,實現(xiàn)方式為加密\解密\加密,簡記為EDE(encryptdecryptencrypt),即:3.2.3兩個密鑰的三重DES圖3.9兩個密鑰的三重DES三個密鑰的三重DES密鑰長度為168比特,加密方式為令K3=K2或K1=K2,則變?yōu)橐恢谼ES。三個密鑰的三重DES已在因特網(wǎng)的許多應(yīng)用(如PGP和S/MIME)中被采用。3.2.4三個密鑰的三重DES分組密碼在加密時,明文分組的長度是固定的,而實際應(yīng)用中待加密消息的數(shù)據(jù)量是不定的,數(shù)據(jù)格式可能是多種多樣的。為了能在各種應(yīng)用場合使用DES,美國在FIPSPUS74和81中定義了DES的4種運行模式,如表3.5所示。這些模式也可用于其他分組密碼,下面以DES為例來介紹這4種模式。3.4分組密碼的運行模式ECB(electroniccodebook)模式是最簡單的運行模式,它一次對一個64比特長的明文分組加密,而且每次的加密密鑰都相同。當(dāng)密鑰取定時,對明文的每一個分組,都有一個惟一的密文與之對應(yīng)。3.4.1電碼本(ECB)模式ECB的優(yōu)點是簡單高效,可以實現(xiàn)并行操作。ECB有良好的差錯控制,一個密文塊(或明文塊)的改變,在解密(或加密)時,只會引起相應(yīng)的明文塊(或密文塊)的改變,不會影響其他明文塊(或密文塊)的改變。ECB的最大特性是明文中相同的分組,在密文也是相同的。這也是其缺點,因為這樣在加密長消息時,敵手可能得到多個明文密文對,進行已知明文攻擊。因此,ECB特別適合加密的數(shù)據(jù)隨機且較短的情形,如加密一個會話密鑰。CBC(cipherblockchaining)模式:重復(fù)的明文分組產(chǎn)生不同的密文分組。 加密算法的輸入是當(dāng)前明文分組和前一次密文分組的異或,每次加密使用同一密鑰。因此加密算法的輸入不會顯示出與這次的明文分組之間的固定關(guān)系,所以重復(fù)的明文分組不會在密文中暴露出這種重復(fù)關(guān)系。3.4.2密碼分組鏈接(CBC)模式

但是,簡單的引入反饋,如果兩個消息前面部分的明文分組全部相同,則密文也還是會出現(xiàn)相同的前面部分,即密文的不同是從明文中首次出現(xiàn)不同的位置開始的。為了使得加密的結(jié)果一開始就出現(xiàn)不同,或者說使得相同的消息也有不同的密文,引入了初始向量(InitialVector,IV)。IV的不同,使得相同的消息有不同的密文。

IV對于收發(fā)雙方都應(yīng)是已知的,為使安全性最高,IV應(yīng)像密鑰一樣被保護,可使用ECB加密模式來發(fā)送IV。保護IV的原因如下:如果敵手能欺騙接收方使用不同的IV值,敵手就能夠在明文的第1個分組中插入自己選擇的比特值,這是因為: 如上所述,DES是分組長為64比特的分組密碼,但利用CFB(cipherfeedback)模式或OFB模式可將DES轉(zhuǎn)換為流密碼。流密碼不需要對消息填充,而且運行是實時的。因此如果傳送字母流,可使用流密碼對每個字母直接加密并傳送。 流密碼具有密文和明文一樣長這一性質(zhì),因此,如果需要發(fā)送的每個字符長為8比特,就應(yīng)使用8比特密鑰來加密每個字符。如果密鑰長超過8比特,則造成浪費。3.4.3密碼反饋(CFB)模式圖3.12CFB模式示意圖 解密時,將收到的密文單元與加密函數(shù)的輸出進行異或。注意這時仍然使用加密算法而不是解密算法,原因如下:設(shè)Sj(X)是X的j個最高有效位,那么因此可證明以后各步也有類似的這種關(guān)系。CFB模式除能獲得保密性外,還能用于認(rèn)證。OFB(outputfeedback)模式的結(jié)構(gòu)類似于CFB。不同之處如下:OFB模式是將加密算法的輸出反饋到移位寄存器,而CFB模式中是將密文單元反饋到移位寄存器。3.4.4輸出反饋(OFB)模式圖3.13OFB模式示意圖 OFB模式的優(yōu)點是傳輸過程中的比特錯誤不會被傳播。例如C1中出現(xiàn)1比特錯誤,在解密結(jié)果中只有P1受到影響,以后各明文單元則不受影響。而在CFB中,C1也作為移位寄存器的輸入,因此它的1比特錯誤會影響解密結(jié)果中各明文單元的值。 OFB的缺點是它比CFB模式更易受到對消息流的篡改攻擊,比如在密文中取1比特的補,那么在恢復(fù)的明文中相應(yīng)位置的比特也為原比特的補。因此使得敵手有可能通過對消息校驗部分的篡改和對數(shù)據(jù)部分的篡改,而以糾錯碼不能檢測的方式篡改密文。 來學(xué)嘉(X.J.Lai)和J.L.Massey提出的第1版IDEA(internationaldataencryptionalgorithm,國際數(shù)據(jù)加密算法)于1990年公布,當(dāng)時稱為PES(proposedencryptionstandard,建議加密標(biāo)準(zhǔn))。1991年,在Biham和Shamir提出差分密碼分析之后,設(shè)計者推出了改進算法IPES,即改進型建議加密標(biāo)準(zhǔn)。1992年,設(shè)計者又將IPES改名為IDEA。這是近年來提出的各種分組密碼中一個很成功的方案,已在PGP中采用。3.5IDEA 算法中明文和密文分組長度都是64比特,密鑰長128比特。其設(shè)計原理可從強度和實現(xiàn)兩方面考慮。1.密碼強度算法的強度主要是通過有效的混淆和擴散特性而得以保證?;煜和ㄟ^三種運算實現(xiàn)(DES主要靠異或運算及小的非線性S盒代替來實現(xiàn))按位模2加;模216加法;模216+1乘法整個運算過程全在16位子分組上進行,因此該算法對16位處理器尤其有效。3.5.1設(shè)計原理

IDEA算法中擴散是由稱為乘加(multiplication/addition,MA)結(jié)構(gòu)的基本單元實現(xiàn)的。該結(jié)構(gòu)的輸入是兩個16比特的子段和兩個16比特的子密鑰,輸出也為兩個16比特的子段。這一結(jié)構(gòu)在算法中重復(fù)使用了8次,獲得了非常有效的擴散效果。2.實現(xiàn)IDEA可方便地通過軟件和硬件實現(xiàn)。①軟件實現(xiàn)原則:使用子分組:密碼操作應(yīng)該在對于軟件來說很自然的子分組上進行,具有這些特性的子分組包括8,16,32比特,IDEA采用16比特子段處理使用簡單操作:密碼操作應(yīng)該容易使用加法、移位等基本操作編程實現(xiàn),種可以通過使用容易編程的加法、移位等運算實現(xiàn)IDEA的三種運算。②硬件由于加、解密相似,差別僅為使用密鑰的方式,因此可用同一器件實現(xiàn)。再者,算法中有規(guī)則的模塊結(jié)構(gòu),(IDEA重復(fù)使用兩種基本的模塊化構(gòu)件:變換子塊和加密子塊)可方便VLSI的實現(xiàn)。算法描述:分組長度:64比特密鑰長度:128比特迭代輪數(shù):8輪(每輪6個子密鑰),附加一個輸出變換(4個子密鑰)子密鑰長度:16比特。52個子密鑰由128比特初始密鑰通過密鑰生成算法生成。使用三種基本運算:按位模2加;模216加法;模216+1乘法圖3.15IDEA的加密框圖圖3.16IDEA第1輪的輪結(jié)構(gòu)1.輪結(jié)構(gòu)每輪的開始有一個變換:兩個乘法和兩個加法輸出的4個字段進行異或異或的結(jié)果作為MA的輸入,MA的輸出是兩個16比特的子段變換的4個輸出與MA的兩個輸出異或產(chǎn)生本輪的4個輸出每一輪的加密順序:1、X1和第一個子密鑰相乘;2、X2和第二個子密鑰相加;3、X3和第三個子密鑰相加;4、X4和第四個子密鑰相乘;5、第1步和第3步的結(jié)果相異或;6、第2步和第4步的結(jié)果相異或;7、第5步的結(jié)果與第5個子密鑰相乘;8、第6步與第7步的結(jié)果相加9、第8步的結(jié)果與第6個子密鑰相乘10、第7步與第9步的結(jié)果相加11、第1步與第9步的結(jié)果相異或12、第3步與第9步的結(jié)果相異或13、第2步與第10步的結(jié)果相異或14、第2步與第10步的結(jié)果相異或IDEA的輸出變換:圖3.17IDEA的輸出變換2.子密鑰的產(chǎn)生

加密過程中52個16比特的子密鑰是由128比特的加密密鑰按如下方式產(chǎn)生的:前8個子密鑰Z1,Z2,…,Z8直接從加密密鑰中取,即Z1取前16比特(最高有效位),Z2取下面的16比特,依次類推。然后加密密鑰循環(huán)左移25位,再取下面8個子密鑰Z9,Z10,…,Z16,取法與Z1,Z2,…,Z8的取法相同。這一過程重復(fù)下去,直到52子密鑰都被產(chǎn)生為止。3.解密過程 解密過程和加密過程基本相同,但子密鑰的選取不同。解密子密鑰U1,U2,…,U52是由加密子密鑰按如下方式得到(將加密過程最后一步的輸出變換當(dāng)作第9輪):①第i(i=1,…,9)輪解密的前4個子密鑰由加密過程第(10-i)輪的前4個子密鑰得出: 其中第1和第4個解密子密鑰取為相應(yīng)的第1和第4個加密子密鑰的模216+1乘法逆元,第2和第3個子密鑰的取法為:當(dāng)輪數(shù)i=2,…,8時,取為相應(yīng)的第3個和第2個加密子密鑰的模216加法逆元。i=1和9時,取為相應(yīng)的第2個和第3個加密子密鑰的模216加法逆元。②第i(i=1,…,8)輪解密的后兩個子密鑰等于加密過程第(9-i)輪的后兩個子密鑰。 下面驗證解密過程的確可以得到正確的結(jié)果。圖3.18中左邊為加密過程,由上至下,右邊為解密過程,由下至上。將每一輪進一步分為兩步,第1步是變換,其余部分作為第2步,稱為子加密。圖3.18IDEA加密和解密框圖現(xiàn)在從下往上考慮。對加密過程的最后一個輸出變換,以下關(guān)系成立:Y1=W81⊙Z49Y2=W83+Z50Y3=W82+Z51Y4=W84⊙Z52解密過程中第1輪的第1步產(chǎn)生以下關(guān)系:J11=Y1⊙U1J12=Y2+U2J13=Y3+U3J14=Y4⊙U4將解密子密鑰由加密子密鑰表達并將Y1,Y2,Y3,,Y4代入以下關(guān)系,有J11=Y1⊙Z-149=W81⊙Z49⊙Z-149=W81J12=Y2+

-Z50=W83+

Z50+

-Z50=W83J13=Y3+

-Z51=W82+

Z51+

-Z51=W82J14=Y4⊙Z-152=W84⊙Z52⊙Z-152=W84可見解密過程第1輪第1步的輸出等于加密過程最后一步輸入中第2個子段和第3個子段交換后的值。從圖3.16,可得以下關(guān)系:W81=I81MAR(I81I83,I82I84)W82=I83MAR(I81I83,I82I84)W83=I82MAL(I81I83,I82I84)W84=I84MAL(I81I83,I82I84)其中MAR(X,Y)是MA結(jié)構(gòu)輸入為X和Y時的右邊輸出,MAL(X,Y)是左邊輸出。則V11=J11MAR(J11J13,J12J14)=W81MAR(W81W82,W83W84)=I81MAR(I81I83,I82I84)MAR[I81MAR(I81I83,I82I84)I83MAR(I81I83,I82I84),I82MAL(I81I83,I82I84)I84

MAL(I81I83,I82I84)]=I81MAR(I81I83,I82I84)MAR(I81I83,I82I84)=I81類似地,可有V12=I83V13=I82V14=I84所以解密過程第1輪第2步的輸出等于加密過程倒數(shù)第2步輸入中第2個子段和第3個子段交換后的值。同理可證圖3.18中每步都有上述類似關(guān)系,這種關(guān)系一直到V81=I11V82=I13V83=I12V84=I14即除第2個子段和第3個子段交換位置外,解密過程的輸出變換與加密過程第1輪第1步的變換完全相同。即除第2個子段和第3個子段交換位置外,解密過程的輸出變換與加密過程第1輪第1步的變換完全相同。所以最后可得知,整個解密過程的輸出等于整個加密過程的輸入。3.6AES算法——Rijndael1997年9月12日,NIST發(fā)布了征集算法的正式公告,要求AES具有128比特的分組長度,并支持128、192和256比特的密鑰長度,而且要求AES要能在全世界范圍內(nèi)免費使用。 1998年8月12日,在首屆AES候選會議(firstAEScandidateconference)上公布了AES的15個候選算法,任由全世界各機構(gòu)和個人攻擊和評論,這15個候選算法是CAST256、CRYPTON、E2、DEAL、FROG、SAFER+、RC6、MAGENTA、LOKI97、SERPENT、MARS、Rijndael、DFC、Twofish、HPC。1999年3月,在第2屆AES候選會議(secondAEScandidateconference)上經(jīng)過對全球各密碼機構(gòu)和個人對候選算法分析結(jié)果的討論,從15個候選算法中選出了5個。 這5個是RC6、Rijndael、SERPENT、Twofish和MARS。2000年4月13日至14日,召開了第3屆AES候選會議(thirdAEScandidateconference),繼續(xù)對最后5個候選算法進行討論。2000年10月2日,NIST宣布Rijndael作為新的AES。至此,經(jīng)過3年多的討論,Rijndael終于脫穎而出。 Rijndael由比利時的JoanDaemen和VincentRijmen設(shè)計,算法的原型是Square算法,它的設(shè)計策略是寬軌跡策略(widetrailstrategy)。寬軌跡策略是針對差分分析和線性分析提出的,它的最大優(yōu)點是可以給出算法的最佳差分特征的概率及最佳線性逼近的偏差的界;由此,可以分析算法抵抗差分密碼分析及線性密碼分析的能力。

AES中的運算是按字節(jié)或4個字節(jié)的字定義的,并把一個字節(jié)看成是系數(shù)在有限域GF(2)上的次數(shù)小于8的多項式(即把一個字節(jié)看成是有限域GF(28)中的一個元素),一個4字節(jié)的字看成是系數(shù)在有限域GF(28)上,且次數(shù)小于4的多項式。1.有限域GF(28)

3.6.1AES的數(shù)學(xué)基礎(chǔ)和設(shè)計思想將b7b6b5b4b3b2b1b0構(gòu)成的字節(jié)b看成系數(shù)在{0,1}中的多項式b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0例如:十六進制數(shù)‘57’對應(yīng)的二進制為01010111,看成一個字節(jié),對應(yīng)的多項式為x6+x4+x2+x+1。

1.多項式加法

在多項式表示中,兩個元素的和是一個多項式,其系數(shù)是兩個元素的對應(yīng)系數(shù)的模2加(即異或)。例如:“57”和“83”的和為:57⊕83=D4,或者采用其多項式記法:57→01010111→x6+x4+x2+x+183→10000011→x7+x+1(x6+x4+x2+x+1)+(x7+x+1)=x7+x6+x4+x2→11010100→D4顯然,該加法與簡單的以字節(jié)為單位的比特異或是一致的。

01010111⊕10000011110101002.多項式乘法

有限域GF(28)中兩個元素的乘法為模2元域GF(2)上的一個8次不可約多項式的多項式乘法。對于AES這一8次不可約多項式為:

m(x)=x8+x4+x3+x+1用十六進制表示為{11B}。

【例】計算:5783=?

(x6+x4+x2+x+1)(x7+x+1)=x13+x11+x9+x8+x7+x7+x5+x3+x2+

x+x6+x4+x2+x+1=x13+x11+x9+x8+x6+x5+x4+x3+

1而:(x13+x11+x9+x8+x6+x5+x4+x3+

1)modm(x)=(x13+x11+x9+x8+x6+x5+x4+x3+

1)mod(x8+x4+x3+x+1);計算時按降冪排

=x7+x6+1所以:(x6+x4+x2+x+1)(x7+x+1)=x7+x6+1(多項式表示)0101011110000011=11000001(2進制表示)5783=C1(16進制表示)以上定義的乘法滿足交換律,且有單位元‘01’。另外,對任何次數(shù)小于8的多項式b(x),可用推廣的歐幾里得算法得b(x)a(x)+m(x)c(x)=1即a(x)·b(x)=1modm(x),因此a(x)是b(x)的乘法逆元。再者,乘法還滿足分配律:a(x)·(b(x)+c(x))=a(x)·b(x)+a(x)·c(x) 256個字節(jié)值構(gòu)成的集合,在以上定義的加法和乘法運算下,有有限域GF(28)的結(jié)構(gòu)。 GF(28)上還定義了一個運算,稱之為x乘法,其定義為x·b(x)=b7x8+b6x7+b5x6+b4x5+b3x4+b2x3+b1x2+b0

x(modm(x))如果b7=0,求模結(jié)果不變,否則為乘積結(jié)果減去m(x),即求乘積結(jié)果與m(x)的異或。 由此得出x(十六進制數(shù)‘02’)乘b(x)可以先對b(x)在字節(jié)內(nèi)左移一位(最后一位補0),若b7=1,則再與‘1B’(其二進制為00011011)做逐比特異或來實現(xiàn),該運算記為b=xtime(a)。在專用芯片中,xtime只需4個異或。x的冪乘運算可以重復(fù)應(yīng)用xtime來實現(xiàn)。而任意常數(shù)乘法可以通過對中間結(jié)果相加實現(xiàn)。例如,‘57’·‘13’可按如下方式實現(xiàn):‘57’·‘02’=xtime(57)=‘AE’;‘57’·‘04’=xtime(AE)=‘47’;‘57’·‘08’=xtime(47)=‘8E’;‘57’·‘10’=xtime(8E)=‘07’;‘57’·‘13’=‘57’·(‘01’‘02’‘10’)=‘57’‘AE’‘07’=‘FE’。2.系數(shù)在GF(28)上的多項式 4個字節(jié)構(gòu)成的向量可以表示為系數(shù)在GF(28)上的次數(shù)小于4的多項式。多項式的加法就是對應(yīng)系數(shù)相加;換句話說,多項式的加法就是4字節(jié)向量的逐比特異或。

多項式的乘法運算必須要取模M(x)=x4+1,這樣使得次數(shù)小于4的多項式的乘積仍然是一個次數(shù)小于4的多項式,將多項式的模乘運算記為,設(shè)a(x)=a3x3+a2x2+a1x+a0,b(x)=b3x3+b2x2+b1x+b0,c(x)=a(x)b(x)=c3x3+c2x2+c1x+c0。由于xjmod(x4+1)=x

j

mod4,所以c0=a0b0a3b1a2b2a1b3;c1=a1b0a0b1a3b2a2b3;c2=a2b0a1b1a0b2a3b3;c3=a3b0a2b1a1b2a0b3??蓪⑸鲜鲇嬎惚硎緸? 注意到M(x)不是GF(28)上的不可約多項式(甚至也不是GF(2)上的不可約多項式),因此非0多項式的這種乘法不是群運算。不過在Rijndael密碼中,對多項式b(x),這種乘法運算只限于乘一個固定的有逆元的多項式a(x)=a3x3+a2x2+a1x+a0。 定理3.1系數(shù)在GF(28)上的多項式a3x3+a2x2+a1x+a0是模x4+1可逆的,當(dāng)且僅當(dāng)矩陣在GF(28)上可逆。 證明:a3x3+a2x2+a1x+a0是模x4+1可逆的,當(dāng)且僅當(dāng)存在多項式h3x3+h2x2+h1x+h0(a3x3+a2x2+a1x+a0)(h3x3+h2x2+h1x+h0)=1mod(x4+1)

因此有(a3x3+a2x2+a1x+a0)(h2x3+h1x2+h0x+h3)=xmod(x4+1)(a3x3+a2x2+a1x+a0)(h1x3+h0x2+h3x+h2)=x2mod(x4+1)(a3x3+a2x2+a1x+a0)(h0x3+h3x2+h2x+h1)=x3mod(x4+1)將以上關(guān)系寫成矩陣形式即得(證畢)c(x)=xb(x)定義為x與b(x)的模x4+1乘法,即c(x)=xb(x)=b2x3+b1x2+b0x+b3。其矩陣表示中,除a1=‘01’外,其他所有ai=‘00’,即 因此,x(或x的冪)模乘多項式相當(dāng)于對字節(jié)構(gòu)成的向量進行字節(jié)循環(huán)移位。3.設(shè)計思想 Rijndael密碼的設(shè)計力求滿足以下3條標(biāo)準(zhǔn):①抵抗所有已知的攻擊。②在多個平臺上速度快,編碼緊湊。③設(shè)計簡單。

AES算法的輪函數(shù)是由3個不同的可逆均勻變換組成的,稱它們?yōu)?個“層”。 為實現(xiàn)寬軌跡策略,輪函數(shù)3個層中的每一層都有它自己的功能:線性混合層:確保多輪之上的高度擴散;非線性層:將具有最優(yōu)的“最壞情況非線性特性”的S盒并行使用;

密鑰加層:單輪子密鑰簡單地異或到中間狀態(tài)上,實現(xiàn)一次性掩蓋。 Rijndael是一個迭代型分組密碼,其分組長度和密鑰長度都可變,各自可以獨立地指定為128比特、192比特、256比特。3.6.2算法說明1.狀態(tài)、種子密鑰和輪數(shù) 類似于明文分組和密文分組,算法的中間結(jié)果也須分組,稱算法中間結(jié)果的分組為狀態(tài),所有的操作都在狀態(tài)上進行。狀態(tài)可以用以字節(jié)為元素的矩陣陣列表示,該陣列有4行,列數(shù)記為Nb,Nb等于分組長度除以32。 種子密鑰類似地用一個以字節(jié)為元素的矩陣陣列表示,該陣列有4行,列數(shù)記為Nk,Nk等于分組長度除以32。 有時可將這些分組當(dāng)作一維數(shù)組,其每一元素是上述陣列表示中的4字節(jié)元素構(gòu)成的列向量,數(shù)組長度可為4、6、8,數(shù)組元素下標(biāo)的范圍分別是0~3、0~5和0~7。4字節(jié)元素構(gòu)成的列向量有時也稱為字。AES分組長度、密鑰長度、輪數(shù)的關(guān)系2.輪函數(shù) Rijndael的輪函數(shù)由4個不同的計算部件組成,分別是:字節(jié)代換(ByteSub)行移位(ShiftRow)列混合(MixColumn)密鑰加(AddRoundKey)(1)字節(jié)代換運算它用S盒把每個字節(jié)aij非線性地變換為另一個字節(jié)bij,有效地實現(xiàn)每個字節(jié)數(shù)據(jù)中各位的混淆。(1)代數(shù)轉(zhuǎn)換(ByteSub) 字節(jié)代換是一個關(guān)于字節(jié)的非線形變換,獨立地對狀態(tài)的每個字節(jié)進行。代換表(即S-盒)是可逆的,由以下兩個變換的合成得到:設(shè)輸入字節(jié)為A=(a0a1a2a3a4a5a6a7),計算Y=ByteSub(A)=?

首先,將字節(jié)A看作GF(28)上的元素,映射到自己的乘法逆元,‘00’映射到自己。

X=A-1modm(x);m(x)=x8+x4+x3+x+1

即A·X≡X·A≡1modm(x)其次,對字節(jié)X做如下的(GF(2)上的,可逆的)仿射變換:Y=M·T⊕BMXB上述S-盒對狀態(tài)的所有字節(jié)所做的變換記為ByteSub(State)圖3.19字節(jié)代換示意圖 ByteSub的逆變換由代換表的逆表做字節(jié)代換,可通過如下兩步實現(xiàn):首先進行仿射變換的逆變換再求每一字節(jié)在GF(28)上逆元。(2)行移位(ShiftRow) 行移位是將狀態(tài)陣列的各行進行循環(huán)移位,不同狀態(tài)行的位移量不同。第0行不移動,第1行循環(huán)左移C1個字節(jié),第2行循環(huán)左移C2個字節(jié),第3行循環(huán)左移C3個字節(jié)。位移量C1、C2、C3的取值與Nb有關(guān),由表3.10給出。 行移位運算記為ShiftRow(State) ShiftRow的逆變換是對狀態(tài)陣列的后3列分別執(zhí)行相反方向的移位操作!特點:行移位將某個字節(jié)從一列移到另一列中,這種變換確保了某列中的4字節(jié)被擴展到4個不同的列。(3)列混合變換(MixColumn)

在列混合變換中,將狀態(tài)陣列的每個列視為GF(28)上的多項式,再與一個固定的多項式c(x)進行模x4+1乘法。當(dāng)然要求c(x)是模x4+1可逆的多項式

c(x)=‘03’x3+‘01’x2+‘01’x+‘02’列混合運算也可寫為矩陣乘法。設(shè)b(x)=c(x)a(x),則 列混合運算的逆運算是類似的,即每列都用一個特定的多項式d(x)相乘。d(x)滿足(‘03’x3+‘01’x2+‘01’x+‘02’)d(x)=‘01’由此可得d(x)=‘0B’x3+‘0D’x2+‘09’x+‘0E’逆變換為:(4)密鑰加(AddRoundKey) 密鑰加是將輪密鑰簡單地與狀態(tài)進行逐比特異或。輪密鑰由種子密鑰通過密鑰編排算法得到,輪密鑰長度等于分組長度Nb。密鑰加運算的逆運算是其自身。綜上所述,組成Rijndael輪函數(shù)的計算部件簡捷快速,功能互補。輪函數(shù)的偽C代碼如下:Round(State,RoundKey){ByteSub(State);ShiftRow(State);MixColumn(State);AddRoundKey(State,RoundKey)}結(jié)尾輪的輪函數(shù)與前面各輪不同,將MixColumn這一步去掉,其偽C代碼如下:FinalRound(State,RoundKey){ByteSub(State);ShiftRow(State);AddRoundKey(State,RoundKey)}在以上偽C代碼記法中,State、RoundKey可用指針類型,函數(shù)Round、FinalRound、ByteSub、ShiftRow、MixColumn、AddRoundKey都在指針State、RoundKey所指向的陣列上進行運算。3.密鑰編排 密鑰編排指從種子密鑰得到輪密鑰的過程,它由密鑰擴展和輪密鑰選取兩部分組成。其基本原則如下:輪密鑰的比特總數(shù)等于分組長度乘以輪數(shù)加1;種子密鑰被擴展成為擴展密鑰;輪密鑰從擴展密鑰中取,其中第1輪輪密鑰取擴展密鑰的前Nb個字,第2輪輪密鑰取接下來的Nb個字,如此下去。(1)密鑰擴展 擴展密鑰是以4字節(jié)字為元素的一維陣列,表示為W[Nb*(Nr+1)],其中前Nk個字取為種子密鑰,以后每個字按遞歸方式定義。擴展算法根據(jù)Nk≤6和Nk>6有所不同。①當(dāng)Nk≤6時,擴展算法如下KeyExpansion(byteKey[4*Nk],W[Nb*(Nr+1)]){for(i=0;i<Nk;i++) W[i]=(Key[4*i],Key[4*i+1],Key[4*i+2],Key[4*i+3]);for(i=Nk;i<Nb*(Nr+1);i++){ temp=W[i-1]; if(i%Nk==0) temp=SubByte(RotByte(temp))^Rcon[i/Nk]; W[i]=W[i-Nk]^temp;}} 其中Key[4*Nk]為種子密鑰,看作以字節(jié)為元素的一維陣列。函數(shù)SubByte()返回4字節(jié)字,其中每一個字節(jié)都是用Rijndael的S盒作用到輸入字對應(yīng)的字節(jié)得到。函數(shù)RotByte()也返回4字節(jié)字,該字由輸入的字循環(huán)移位得到,即當(dāng)輸入字為(a,b,c,d)時,輸出字為(b,c,d,a)。 可以看出,擴展密鑰的前Nk個字即為種子密鑰,之后的每個字W[i]等于前一個字W[i-1]與Nk個位置之前的字W[i-Nk]的異或;不過當(dāng)i/Nk為整數(shù)時,須先將前一個字W[i-1]經(jīng)過以下一系列的變換:1字節(jié)的循環(huán)移位RotByte→用S盒進行變換SubByte→異或輪常數(shù)Rcon[i/Nk]。②當(dāng)Nk>6時,擴展算法如下:KeyExpansion(byteKey[4*Nk],W[Nb*(Nr+1)]){ for(i=0;i<Nk;i++) W[i]=(Key[4*i],Key[4*i+1],Key[4*i+2],Key[4*i+3]);for(i=Nk;i<Nb*(Nr+1);i++){ temp=W[i-1]; if(i%Nk==0) temp=SubByte(RotByte(temp))^Rcon[i/Nk]; elseif(i%Nk==4) temp=SubByte(temp); W[i]=W[i-Nk]^temp;}}Nk>6與Nk≤6的密鑰擴展算法的區(qū)別在于:當(dāng)i為Nk的4的倍數(shù)時,須先將前一個字W[i-1]經(jīng)過SubByte變換。以上兩個算法中,Rcon[i/Nk]為輪常數(shù),其值與Nk無關(guān),定義為(字節(jié)用十六進制表示,同時理解為GF(28)上的元素):(2)輪密鑰選取輪密鑰i(即第i個輪密鑰)由輪密鑰緩沖字W[Nb*i]到W[Nb*(i+1)]給出,如圖3.23所示。圖3.23Nb=6且Nk=4時的密鑰擴展與輪密鑰選取147密鑰擴展的具體步驟:(1)初始密鑰直接被復(fù)制到數(shù)組W[i]的前4個字節(jié)中,得到W[0],W[1],W[2],W[3](2)對W數(shù)組中下標(biāo)不為4的倍數(shù)的元素,只是簡單地異或,即W[i]=W[i-1]⊕W[i-4](i不為4的倍數(shù))(3)對w數(shù)組中下標(biāo)為4的倍數(shù)的元素,在使用上式進行異或前,需對w[i-1]進行一系列處理,即依次進行RotByte(對輸入字節(jié)循環(huán)左移一個字節(jié))、SubByte(對輸入用S盒進行字節(jié)代換),再將得到的結(jié)果與Rcon[i/4](輪常量)做異或運算。148例:明文信息:3243f6a8885a308d313198a2e0370734

加密密鑰:2b7e151628aed2a6abf7158809cf4f3c加密密鑰為128位,輪數(shù)Nr=10加密過程:(1)10輪迭代前,先把原明文寫成如下形式(表1),本輪密鑰寫成如表2形式328831e0435a3137f6309807a88da2342b28ab097eaeF7cf15d2154f16a6883c表1表2

進行輪密鑰加變換操作后產(chǎn)生一個結(jié)果,作為10輪迭代的第一輪輸入。輪密鑰加變換操作如下:每個字節(jié)相應(yīng)異或,32:001100102b:00101011異或結(jié)果:00011001即19,所以第一個字節(jié)為19,其他字節(jié)依次類推,因此第一輪的輪開始狀態(tài)為(表3):19a09ae93df4c6f8e3e28d48be2b2a08表3149

(2)輪循環(huán)

①進行第一輪的“字節(jié)代換”操作要查S盒,每個字節(jié)依次置換,結(jié)果如表4

置換方法:前4位為S盒行值,低4位為S盒列值,如19為S盒中第1行第9列的值即d4。d4e0b81e27bfb44111985d52aef1e530表4

②然后按照行移位變換原則進行操作,結(jié)果如表5d4e0b81ebfb441275d52119830aef1e5表5③列混合變換利用公式完成,結(jié)果為表604e0482866cbf8068119d326e59a7a4c表6(3)密鑰擴展:①W[0]=2b7e1516、w[1]=28aed2a6、w[2]=abf71588、w[3]=09cf4f3c用初始密鑰填充。②接著求w[4],下標(biāo)為4的倍數(shù),則在異或之前對w[i-1]也就是w[3]處理,w[4]的產(chǎn)生過程如下圖所示:150w[4]=a0fafe17w[5]=w[4]⊕w[1]=88542cb1w[6]=w[5]⊕w[2]=23a33939w[7]=w[6]⊕w[3]=2a6c7605w[4],w[5],w[6],w[7]即為新一輪的密鑰③把新一輪的密鑰和表6做輪密鑰加變換,得到的結(jié)果如表7做為第2輪迭代的輸入。(4)依次迭代下去,直到第10輪迭代結(jié)束。最后的結(jié)果即產(chǎn)生的密文為表8所示即:3925841d02dc09fbdc118597196a0b32W[3]=09cf4f3ccf4f3c09RotByte()操作8a84eb01SubByte()操

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論