《應(yīng)用密碼學(xué)》課件第3章分組密碼2_第1頁(yè)
《應(yīng)用密碼學(xué)》課件第3章分組密碼2_第2頁(yè)
《應(yīng)用密碼學(xué)》課件第3章分組密碼2_第3頁(yè)
《應(yīng)用密碼學(xué)》課件第3章分組密碼2_第4頁(yè)
《應(yīng)用密碼學(xué)》課件第3章分組密碼2_第5頁(yè)
已閱讀5頁(yè),還剩81頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

主要內(nèi)容:

分組密碼的基本概念

對(duì)稱密碼基本原理

數(shù)據(jù)標(biāo)準(zhǔn)加密(DES)

高級(jí)加密標(biāo)準(zhǔn)(AES)

對(duì)稱密碼體制工作模式

對(duì)稱密碼應(yīng)用第三章分組密碼算法2025/8/1223.4.1AES的產(chǎn)生歷史背景20世紀(jì)70年代中期美國(guó)人開創(chuàng)的DES可以說經(jīng)歷了漫長(zhǎng)而輝煌的年代,并逐漸由繁榮走向衰落,它之所以走向衰落,由于20世紀(jì)未出現(xiàn)了差分密碼分析及線性密碼分析,使得破譯DES成為可能。NIST于1997年初發(fā)起并組織了在全世界范圍內(nèi)廣泛征集新的加密標(biāo)準(zhǔn)算法的活動(dòng),同時(shí)要求每一種侯選算法的分組長(zhǎng)度為128位,應(yīng)當(dāng)支持128,192和256比特的密鑰長(zhǎng)度,經(jīng)過了幾年的反復(fù)較量,對(duì)首輪入選的15種不同算法,進(jìn)行了廣泛的評(píng)估與測(cè)試,篩選出5種算法(MARS、RC6、Rijndael、Serpent和Twofish)進(jìn)入決賽。3.4AES(高級(jí)數(shù)據(jù)加密標(biāo)準(zhǔn))2025/8/123最終,由比利時(shí)的密碼學(xué)專家JoanDaemen(ProtonWorldInternational公司)及VincentRijmen(Leuven大學(xué))所提出的加密算法Rijndael(榮代爾)贏得了勝利,成為了21世紀(jì)新的數(shù)據(jù)加密標(biāo)準(zhǔn)AES(AdvancedEncryptionStandard)。

當(dāng)美國(guó)宣布這一最后勝利的結(jié)果(2001年11月26日,NIST正式公布高級(jí)加密標(biāo)準(zhǔn),并于2002年5月26日正式生效)時(shí),出人意料,因?yàn)檫@是美國(guó)第一次將非美國(guó)公民提出的算法接受為密碼標(biāo)準(zhǔn)算法,值得我們深思。目前,Rijndael以其算法設(shè)計(jì)的簡(jiǎn)潔、高效、安全而令世人關(guān)注,相信它會(huì)在國(guó)際上得到廣泛的應(yīng)用。2025/8/124Rijndael算法是由兩位比利時(shí)的密碼專家發(fā)明的,它運(yùn)算速度很快而且所需的內(nèi)存不多,這個(gè)算法非??煽?;Rijndael算法的設(shè)計(jì)策略是寬軌跡策略,是針對(duì)差分分析和線性分析提出來的,是一個(gè)分組迭代密碼,具有可變的分組長(zhǎng)度和密鑰長(zhǎng)度;

Rijndael匯聚了安全性能、效率、可實(shí)現(xiàn)性和靈活性等優(yōu)點(diǎn)-特色:2025/8/125但是,我們應(yīng)該清楚自香農(nóng)(于1949年)發(fā)表“保密系統(tǒng)的通信理論”并確定密碼學(xué)的科學(xué)體系以來,經(jīng)過了1/4個(gè)世紀(jì),RivestShamir和Adleman于1978年提出RSA公開密鑰算法,美國(guó)國(guó)家標(biāo)準(zhǔn)局(NBS)于1977年數(shù)據(jù)加密標(biāo)準(zhǔn)DES。

其后,由于差分攻擊及線性攻擊的出現(xiàn),又經(jīng)過了近1/4個(gè)世紀(jì),出現(xiàn)了代替DES的新的高級(jí)加密標(biāo)準(zhǔn)——Rijndael。

因此,我們應(yīng)當(dāng)相信Rijndael也不會(huì)是永恒的,也許經(jīng)過若干年的研究會(huì)找出Rijndael致命的缺點(diǎn),從而提出更安全的算法。

2025/8/126Rijndael密碼設(shè)計(jì)原則

Rijndael密碼的設(shè)計(jì)中考慮到的三條準(zhǔn)則①抗擊目前已知的所有攻擊;-Rijndael密碼的迭代變換由三個(gè)不同的、可逆的、一致變換組成,這三種不同的可逆變換提供抗線性密碼分析和差分密碼分析能力。②在多個(gè)平臺(tái)上實(shí)現(xiàn)速度要快和編碼緊湊;③設(shè)計(jì)簡(jiǎn)單。

-Rijndael中同樣使用了迭代變換,但與大多數(shù)分組密碼不同的是Rijndael沒有使用Feistel結(jié)構(gòu)。

不可約多項(xiàng)式:一個(gè)多項(xiàng)式f(x)稱為是不可約的,如果不存在多項(xiàng)式f1(x),f2(x)∈Zp[x],滿足f(x)=f1(x)×f2(x),其中deg(f1)>0和deg(f2)>0,也即f1(x),f2(x)不能是常數(shù)。3.4.1AES的數(shù)學(xué)基礎(chǔ)-對(duì)于多項(xiàng)式f(x),設(shè)它的次數(shù)為n,表示為deg(f)=n。何謂有限域?-Zp[x]為變?cè)獂的所有多項(xiàng)式的集合,多項(xiàng)式的每一項(xiàng)的系數(shù)為整數(shù)且都小于p。對(duì)于非空集合元素F,若在F中定義了加和乘兩種運(yùn)算,且滿足下述公理:(1)F關(guān)于加法構(gòu)成交換群。其加法恒等元記為0。(2)F中非零元素全體對(duì)乘法構(gòu)成交換群。其乘法恒等元(單位元)記為1。(3)加法和乘法間有如下分配律:a×(b+c)=a×b+a×c(b+c)×a=b×a+c×a則稱F為一個(gè)域。若F中的元素個(gè)數(shù)有限,稱F為有限域(FiniteField)。有限域也叫伽羅瓦(GaloisField)域。Zp[x]/f(x)是域當(dāng)且僅當(dāng)f(x)是不可約的,也就是說,如果f(x)是不可約的,則所有屬于Zp[x]的多項(xiàng)式,在modf(x)后的余式,組成的集合構(gòu)成一個(gè)域。反之也成立。例如:計(jì)算Z2[x]/x3+x+1,可得所有余式構(gòu)成八個(gè)元素的集合{0,1,x,x+1,x2,x2+1,x2+x,x2+x+1},這個(gè)集合構(gòu)成一個(gè)有限域,加法單位元為0,乘法單位元為1。這八個(gè)域元素的系數(shù)為:(000,001,010,011,100,101,110,111)

很容易知道,1,x,x+1,x2,x2+1,x2+x,x2+x+1模x3+x+1就是自身。下面是進(jìn)一步的例子:例如求x3modx3+x+1,因?yàn)閤3+x+1≡0modx3+x+1,故x3≡x3+x3+x+1≡x+1modx3+x+1。又如求x4modx3+x+1,注意到x4=x3×x,故x4≡(x+1)×xmodx3+x+1≡x2+x.在AES中選擇的不可約多項(xiàng)式是p(x)=x8+x4+x3+x+1,余式的次數(shù)至多是7次,共28=256個(gè)多項(xiàng)式,這256個(gè)余式構(gòu)成了一個(gè)有限域。字節(jié)b用二進(jìn)制表示為b=b7b6b5b4b3b2b1b0為有限域GF(28)上的域元素,若用多項(xiàng)式表示,bi可看作是多項(xiàng)式的系數(shù),bi∈{0,1},則字節(jié)b對(duì)應(yīng)多項(xiàng)式為:b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0例如:字節(jié)‘57’(十六進(jìn)制數(shù))對(duì)應(yīng)的二進(jìn)制為01010111,為GF(28)上域元素,字節(jié)‘57’對(duì)應(yīng)的多項(xiàng)式為x6+x4+x2+x+1。AES計(jì)算是在一個(gè)特別的有限域完成的。在有限域GF(28)上的字節(jié)運(yùn)算和字運(yùn)算是AES算法中的兩種基本運(yùn)算。

-GF(28)上兩個(gè)域元素的和GF(28)上兩個(gè)域元素的和對(duì)應(yīng)的多項(xiàng)式仍然是一個(gè)次數(shù)不超過7的多項(xiàng)式,其多項(xiàng)式系數(shù)等于兩個(gè)元素對(duì)應(yīng)多項(xiàng)式系數(shù)的模2加,即域元素對(duì)應(yīng)二進(jìn)制按位異或運(yùn)算。例如:‘57’+‘83’=‘D4’,用多項(xiàng)式表示為:(x6+x4+x2+x+1)+(x7+x+1)≡x7+x6+x4+x2(modp(x))-有限域GF(28)上的字節(jié)運(yùn)算字節(jié)運(yùn)算時(shí),一個(gè)字節(jié)被看做有限域GF(28)上的元素。有限域GF(28)可以定義為三元組:

(F,+,.),其中,F={b7b6b5b4b3b2b1b0|bi=0,1;i=0,1,2,3,4,5,6,7}用二進(jìn)制表示為:01010111⊕10000011=11010100由于每個(gè)元素的加法逆元等于自己,所以有限域減法和加法相同。-GF(28)上兩個(gè)域元素的乘要計(jì)算GF(28)上域元素的乘法,必須先確定一個(gè)GF(2)上的8次不可約多項(xiàng)式;GF(28)上兩個(gè)元素的乘積就是這兩個(gè)多項(xiàng)式的模乘。在Rijndael密碼中,這個(gè)8次不可約多項(xiàng)式確定為:p(x)=x8+x4+x3+x+1它的十六進(jìn)制表示為‘11B’。例如,‘57’·‘83’=‘C1’可表示為多項(xiàng)式乘法:

(x6+x4+x2+x+1)·(x7+x+1)≡x7+x6+1(modp(x))即:注:乘法“?”

是普通多項(xiàng)式乘法,但系數(shù)運(yùn)算可看作比特的乘法和異或運(yùn)算,即看作域{0,1}上的運(yùn)算。x7+x6+1的系數(shù)對(duì)應(yīng)的二進(jìn)制為11000001,即十六進(jìn)制的C1。2025/8/1213-例2:(01110011)(10010101)所以,(01110011)(10010101)=(01110000)

2025/8/1214-乘法的實(shí)際計(jì)算方法-討論:2025/8/1215-X乘法:上述過程稱之為x乘法,其定義為:x·b(x)≡b7x8+b6x7+b5x6+b4x5+b3x4+b2x3+b1x2+b0x(modp(x))

如果b7=0,求模結(jié)果不變,由此得出x(十六進(jìn)制數(shù)‘02’)乘b(x)為對(duì)b(x)在字節(jié)內(nèi)左移一位(最后一位補(bǔ)0)。若b7=1,則再與‘1B’(其二進(jìn)制為00011011)做逐比特異或來實(shí)現(xiàn),而任意常數(shù)乘法可以通過對(duì)中間結(jié)果相加實(shí)現(xiàn)。b7=0舉例02·54=(00000010)·(01010100)=(x)·(x6+x4+x2)(modp(x))=x7+x5+x3(modp(x))=x7+x5+x3(modp(x))

≡x7+x5+x3(modp(x))=(10101000)由上面的規(guī)則:相當(dāng)于把字節(jié)(01010100)左移一位即得(10101000)(最后一位補(bǔ)0)。02·D4=(00000010)·(11010100)=(x)·(x7+x6+x4+x2)(modp(x))=x8+x7+x5+x3(modp(x))≡(x4+x3+x+1)+x7+x5+x3(modp(x))≡x7+x5+x4+x+1(modp(x))

多項(xiàng)式

x7+x5+x4+x+1映射為二進(jìn)制即為:(10110011)由上面的規(guī)則:先把(11010100)在字節(jié)內(nèi)左移一位即得(10101000)(最后一位補(bǔ)0),因?yàn)閎7=1,故(10101000)再與(00011011)異或得(10110011)b7=1舉例例3:求‘57’·‘13’

因?yàn)椋憾?再看前面的例2:(01110011)?(10010101)=[(00000001)+(00000010)+(00010000)+(00100000)+(01000000)]?(10010101)=(00000001)?(10010101)⊕(00000010)?(10010101)⊕(00010000)?(10010101)⊕(00100000)?(10010101)⊕(01000000)?(10010101)=(10010101)⊕[(00101010)⊕(00011011)]⊕(00010000)?(10010101)⊕(00100000)?(10010101)⊕(01000000)?(10010101)=(10010101)⊕(00110001)⊕[(10001000)⊕(00011011)]⊕(00100000)?(10010101)⊕(01000000)?(10010101)=(10010101)⊕(00110001)⊕(10010011)⊕[(00100110)⊕(00011011)]⊕(01000000)?(10010101)=(10010101)⊕(00110001)⊕(10010011)⊕(00111101)⊕(01111010)=(01110000)=(70)∴(01110011)?(10010101)=(01110000),即(73)?(95)=(70)1、整除補(bǔ)充2、同余

補(bǔ)充3、歐幾里得除法(帶余除法)補(bǔ)充4、最大公因數(shù)補(bǔ)充5、擴(kuò)展的歐幾里得除法補(bǔ)充補(bǔ)充=(a,b)補(bǔ)充例-逆元

設(shè)m是正整數(shù),a是整數(shù),如果存在a’,使得a×a’≡1(modm)成立,則a叫模m的可逆元,a’

叫a模m的逆元。例如,設(shè)m為11,則8模11的逆元為7,因?yàn)?×7≡1(mod11)當(dāng)a和m互素的情況下,即(a,m)=1,則a的模m的逆元總是存在的,且可以用下面的輾轉(zhuǎn)相除法(擴(kuò)展的歐幾里得算法)求得。例如,知道89是素?cái)?shù),求60模89的逆元,可以用下面方法。89=1×60+2960=2×29+229=14×2+1則1=29-14×2=29-14×(60-2×29)=29×29-14×60=(89-60)×29-14×60=89×29-60×43上頁(yè)等式兩端同時(shí)mod89得:60×(-43)≡1mod89故60模89的逆元為-43,為方便記為最小非負(fù)數(shù),因?yàn)?43≡46mod89,故一般說60模89的逆元為46。因此,求a(x)模p(x)的乘法逆元轉(zhuǎn)化為求兩個(gè)多項(xiàng)式b(x)和c(x),使得滿足b(x)a(x)+p(x)c(x)=1,即滿足a(x)·b(x)≡1modp(x),因此b(x)是a(x)模p(x)的乘法逆元。GF(28)上域元素的乘法逆元在有限域GF(28)中,域元素的乘法滿足交換律,且有單位元,并且每個(gè)域元素都有乘法逆元。在GF(28)中求乘法逆元也是利用多項(xiàng)式的擴(kuò)展的歐幾里得算法計(jì)算出來。求次數(shù)小于8的非零多項(xiàng)式b(x)的乘法逆元,首先利用多項(xiàng)式的擴(kuò)展歐幾里得算法得出兩個(gè)多項(xiàng)式a(x)和c(x),使得滿足b(x)a(x)+p(x)c(x)=1,即滿足a(x)·b(x)≡1modp(x),因此a(x)是b(x)的乘法逆元。求GF(28)上域元素‘F5’(十六進(jìn)制)的乘法逆元。(1)‘F5’用對(duì)應(yīng)二進(jìn)制為11110101,則用多項(xiàng)式表示為b(x)=x7+x6+x5+x4+x2+1然后計(jì)算兩個(gè)多項(xiàng)式a(x)和c(x)滿足(x7+x6+x5+x4+x2+1)·a(x)+p(x)c(x)=1(2)采用多項(xiàng)式的擴(kuò)展歐幾里得算法按照如下步驟計(jì)算:-乘法逆元舉例因?yàn)椋?x8+x4+x3+x+1)=(x7+x6+x5+x4+x2+1)(x+1)+x2(x7+x6+x5+x4+x2+1)=x2(x5+x4+x3+x2+1)+11=(x7+x6+x5+x4+x2+1)-x2(x5+x4+x3+x2+1)=(x7+x6+x5+x4+x2+1)-[(x8+x4+x3+x+1)-(x7+x6+x5+x4+x2+1)(x+1)](x5+x4+x3+x2+1)=(x8+x4+x3+x+1)(x5+x4+x3+x2+1)-(x7+x6+x5+x4+x2+1)[1+(x+1)(x5+x4+x3+x2+1)]=(x8+x4+x3+x+1)(x5+x4+x3+x2+1)-(x7+x6+x5+x4+x2+1)(x6+x2+x)-課堂作業(yè)1:請(qǐng)使用有限域GF(28)上的字節(jié)運(yùn)算方法計(jì)算:(1)16進(jìn)制的“12”與“59”的加法,即計(jì)算“12+59”的值;(2)16進(jìn)制的“12”與“59”的乘法,即計(jì)算“12?59”的值。2025/8/12333.4.3AES算法描述

Rijndael是一種靈活的算法,加密明文分組塊的長(zhǎng)度可變、密鑰長(zhǎng)度也可變的分組密碼。分組長(zhǎng)度、密鑰長(zhǎng)度彼此獨(dú)立地確定為128、192、256比特,因而Rijndael算法可以9種不同的版本,而迭代次數(shù)與明文分組塊的大小和密鑰有關(guān)(如下表)。

輪數(shù)(Round)分組長(zhǎng)度128bit分組長(zhǎng)度192bit分組長(zhǎng)度256bit密鑰128比特101214密鑰192比特121214密鑰256比特141414對(duì)于AES,只用了第一列,即明文長(zhǎng)度固定為128比特2025/8/1234Rijndael算法不像DES算法,采用包含置換操作的典型的Feistel輪結(jié)構(gòu),而是進(jìn)行多輪的替換、列混合和密鑰加操作,因此Rijndael本質(zhì)上是采用代替/置換網(wǎng)絡(luò)的對(duì)稱分組密碼體制。

AES和Rijndael密碼算法并不完全一樣,AES算法限定了明文分組大小為128比特,而密鑰長(zhǎng)度可為128、192、256比特,因而實(shí)際上AES有三個(gè)版本:AES-128、AES-192、AES-256,相應(yīng)的迭代輪數(shù)為10輪、12輪、14輪。

AES算法是Rijndael算法的子集,但實(shí)際應(yīng)用中,術(shù)語(yǔ)AES和Rijndael視為等價(jià),可以交替使用。

AES加密過程是在一個(gè)4×4的字節(jié)矩陣上運(yùn)作,這個(gè)矩陣又稱為“體(state)”或者“狀態(tài)”,其初值就是一個(gè)明文區(qū)塊(矩陣中一個(gè)元素單位大小就是明文區(qū)塊中的一個(gè)Byte(8比特))。加密時(shí),明文塊與子密鑰首先進(jìn)行一次輪密鑰加,然后各輪AES加密循環(huán)(除最后一輪外)均包含4個(gè)步驟,其結(jié)構(gòu)如下頁(yè)圖所示。2025/8/12351.字節(jié)代替(SubBytes):通過一個(gè)非線性的替換函數(shù),用查找表的方式把每個(gè)字節(jié)替換成對(duì)應(yīng)的字節(jié)。

2.行移位(ShiftRows):將矩陣中的每個(gè)橫列進(jìn)行循環(huán)式移位。

3.列混合(MixColumns):為了充分混合矩陣中各個(gè)直行的操作。這個(gè)步驟使用線性轉(zhuǎn)換來混合每行內(nèi)的四個(gè)字節(jié)。2025/8/12364.輪密鑰加(AddRoundKey):矩陣中的每一個(gè)字節(jié)都與該次循環(huán)的子密鑰(roundkey)做XOR邏輯運(yùn)算;每個(gè)子密鑰由密鑰生成方案產(chǎn)生。

最后一個(gè)加密循環(huán)中沒有列混合(MixColumns)步驟,而以另一個(gè)輪密鑰加(AddRoundKey)取代。大多數(shù)AES計(jì)算是在由不可約多項(xiàng)式x8+x4+x3+x+1構(gòu)造的有限域上完成的。AES的加密過程演示2025/8/12373.4.4基本變換

AES算法每次明文分組以及每次變換的中間結(jié)果分組稱為狀態(tài)(State)。

狀態(tài)用以字節(jié)(8比特位)為基本構(gòu)成元素的矩陣陣列來表示,該陣列有4行,即每列為32比特,因而列數(shù)為分組長(zhǎng)度除以32,通常記為Nb。

列數(shù):

Nb=分組長(zhǎng)度(比特)÷32

Rijndael算法列數(shù)Nb可以取的值為4,6,8,對(duì)應(yīng)的分組長(zhǎng)度為128,192,256比特。

而AES算法的分組長(zhǎng)度固定為128比特,以字節(jié)為基本單位轉(zhuǎn)換為狀態(tài)字節(jié),依順序

a00,a10,a20,a30,a01,…a23,a33,前4個(gè)字節(jié)組成第1列,后四個(gè)字節(jié)組成第2列,依次類推,AES算法明文分組可以構(gòu)成一個(gè)4×4的字節(jié)矩陣,如下頁(yè)圖所示,加密結(jié)束時(shí),輸出也是從狀態(tài)字節(jié)中按相同的順序提取。

2025/8/1238陣列狀態(tài)圖:

AES算法加密和解密過程中密碼密鑰(CipherKey)同樣以字節(jié)為基本單位轉(zhuǎn)換,因而依順序

k00,k10,k20,k30,k01,…k23,k33,…,為類似地用一個(gè)4行的矩陣陣列來表示,前4個(gè)字節(jié)組成第1列,后四個(gè)字節(jié)組成第2列,依次類推,列數(shù)記為Nk。

Nk=密鑰長(zhǎng)度(比特)÷322025/8/1239

Rijndael算法和AES算法的密碼密鑰的列數(shù)Nk可以取的值為4、6、8,對(duì)應(yīng)的密鑰長(zhǎng)度為128、192、256bits,因而密碼密鑰構(gòu)成一個(gè)4×4、4×6、4×8的密鑰字節(jié)矩陣。如下圖所示,192比特密鑰的密碼密鑰矩陣,Nk為6。密碼密鑰陣列狀態(tài)

2025/8/1240下面我們以一個(gè)128位塊為例,介紹AES加密算法基本變換的具體過程。若示例塊是由0和1組成的,輸入的128位塊為10000000010111100110101000110110010100110010010100111010011001100110001100110101011010010000001100100000011011000010100000000110為了表達(dá)簡(jiǎn)潔,下面的AES算法基本變換的中間結(jié)果都用16進(jìn)制來表示。則128比特二進(jìn)制示例塊用16進(jìn)制表示則對(duì)應(yīng)為805E6A3653253A6663356903206C2806(如下表

所示)。2025/8/1241在進(jìn)行AES加密算法過程中,首先把輸入明文128比特示例塊805E6A3653253A6663356903206C2806按照AES算法規(guī)則構(gòu)成一個(gè)構(gòu)成一個(gè)4×4的字節(jié)矩陣,如下圖所示。陣列狀態(tài)

1.字節(jié)代替(SubBytes)

Rijndael算法的字節(jié)變換(SubBytes)使用一個(gè)S盒(不像DES算法使用8個(gè)S盒)進(jìn)行非線性置換。如下頁(yè)表所示,它將輸入或中間態(tài)的每一個(gè)字節(jié)通過一個(gè)簡(jiǎn)單的查表操作,映射為另外一個(gè)字節(jié)。2025/8/1242映射方法:輸入字節(jié)前4位指定S盒的行值,后4位指定S盒的列值。有行和列所確定S盒位置的元素作為輸出(如下頁(yè)圖所示)。例如輸入字節(jié)“03”,行值為0,列值為3;根據(jù)上表可以查得第0行第3列對(duì)應(yīng)的值為“7B”,輸出字節(jié)為“7B”。

2025/8/1243Rijndael算法字節(jié)代替操作

例如,輸入矩陣(用16進(jìn)制表示)進(jìn)入S盒替換操作,則相應(yīng)的輸出如下所示:

2025/8/1244其實(shí)S盒是一個(gè)復(fù)雜的代數(shù)結(jié)構(gòu),S盒的設(shè)計(jì)是有一定限制條件的,其中的一些限制條件是:它應(yīng)當(dāng)是可逆的,不能存在這種情況:行i列j位置上的值為ij。實(shí)際Rijndael的S盒字節(jié)替代操作它包括兩個(gè)代數(shù)變換:2025/8/1245上面仿射變換用矩陣可以表示如下:

下面以輸入“F5”為示例來說明S盒替代操作它包括兩個(gè)變換,不通過查S盒表,而通過代數(shù)計(jì)算求解。首先求解“F5”由f(x)=x8+x4+x3+x+1構(gòu)造GF(28)有限域上的乘法逆元,然后進(jìn)行上式的變換。

2025/8/1246

1)其輸入十六進(jìn)制“F5”對(duì)應(yīng)二進(jìn)制為“11110101”,多項(xiàng)式為(x7+x6+x5+x4+x2+1),求其模f(x)=x8+x4+x3+x+1的逆,即求b(x):

(x7+x6+x5+x4+x2+1)·b(x)≡1(modf(x))通過多項(xiàng)式歐幾里得擴(kuò)展算法,求解得:

(x7+x6+x5+x4+x2+1)(x6+x2+x)≡1mod(x8+x4+x3+x+1)即:(x7+x6+x5+x4+x2+1)模(x8+x4+x3+x+1)的乘法逆元為x6+x2+x

,即‘F5’的乘法逆元為‘46’

2)十六進(jìn)制‘46’其二進(jìn)制為01000110,進(jìn)行第2步的仿射變換,代入矩陣運(yùn)算運(yùn)行:即二進(jìn)制結(jié)果為11100110,對(duì)應(yīng)十六進(jìn)制結(jié)果為“E6”,與查表S盒替代操作結(jié)果一樣。2025/8/12472.行移位(ShiftRows)

在Rijndael算法中,行移位操作作用于S盒的輸出。其中,狀態(tài)陣列的4個(gè)行循環(huán)以字節(jié)為基本單位進(jìn)行左移,而每1行循環(huán)做移的偏移量是由明文分組的大小和所在行數(shù)共同確定,即列數(shù)Nb和行號(hào)確定。設(shè)狀態(tài)陣列的每行用Ci來表示,那么每行偏移量如下表所示:

AES算法中Nb為4,即第1行循環(huán)左移0字節(jié),第二行循環(huán)左移1字節(jié),第三行循環(huán)左移2字節(jié),第四行循環(huán)左移3字節(jié),如下頁(yè)圖。從該圖中可以看出,這使得列完全進(jìn)行了重排。2025/8/1248行移位操作

例如,輸入矩陣(用16進(jìn)制表示)進(jìn)入行移位操作,則相應(yīng)的輸出如下所示:2025/8/12493.列混合(MixColumns)

列混合操作可以將輸入的狀態(tài)矩陣的每列看作是有限域GF(28)上的多項(xiàng)式b(x),與多項(xiàng)式s(x)=03x3+01x2+01x+02相乘然后模x4+1,其中多項(xiàng)式的系數(shù)為有限域GF(28)的運(yùn)算。其方法為令c(x)=s(x)×b(x)mod(x4+1),因而列混合是可以表示為矩陣相乘來實(shí)現(xiàn),進(jìn)行移位后的矩陣與固定矩陣(十六進(jìn)制表示)相乘,如下所示:2025/8/1250列混合操作如下圖所示:例如,輸入矩陣(用16進(jìn)制表示)進(jìn)入列混合操作,則相應(yīng)的輸出如下所示:2025/8/1251例如:第1行02,03,01,01與第1列E6,1B,50,18相乘,其中符號(hào)“*”和“⊕”分別為有限域GF(28)的乘法和加法運(yùn)算,具體操作如下:可以看到通過列混合操作第1列包含字節(jié)為B2、38、75、4A,經(jīng)過這些操作明文經(jīng)過幾輪迭代后高度打亂了,同時(shí)還保證輸入和輸出之間關(guān)聯(lián)很少了。2025/8/12524.輪密鑰加(AddRoundKey)

最后一階段是將列混合的狀態(tài)矩陣與子密鑰進(jìn)行XOR邏輯運(yùn)算(子密鑰是從初始密鑰派生而來的),即將輪密鑰與狀態(tài)按比特異或。輪密鑰是通過密鑰調(diào)度過程從密碼密鑰中得到的,輪密鑰長(zhǎng)度等于分組長(zhǎng)度。如下圖,這完成了算法的一次迭代。2025/8/1253例如,輸入狀態(tài)矩陣和子密鑰矩陣(用16進(jìn)制表示)進(jìn)入輪密鑰加操作,則相應(yīng)的輸出如下所示:2025/8/1254-AES加密過程的流程圖(如右):加密算法的描述及實(shí)現(xiàn)Rijndael解密算法用偽C語(yǔ)言表示如下:Rijndael-Chiper(bytein[4*Nb],byteout[4*Nb],wordw[Nb*Nr+1])Beginbytestate[4,Nb]state=inAddRoundKey(State,w[0,Nb-1])forround=1step1toNr-1SubBytes(state)ShiftRows(state)MixColumn(state)AddRoundKey(State,w[round*Nb,(round+1)*Nb-1])EndforSubBytes(state)ShiftRows(state)AddRoundKey(State,w[Nr*Nb,(round+1)*Nb-1])Out=stateend-加密的具體過程:首先將明文分組復(fù)制到矩陣中,經(jīng)過初始輪密鑰加后,在執(zhí)行Nr-1次輪變換來轉(zhuǎn)變狀態(tài)矩陣,最后一輪與前Nr-1輪不同之處在于這一輪沒有列混合變換;最后將狀態(tài)矩陣中的各個(gè)字節(jié)按順序輸出就得到密文分組。2025/8/12563.4.5密鑰擴(kuò)展

Rijndael算法的密鑰按照矩陣的列進(jìn)行分組,密鑰比特的總數(shù)等于明文分組長(zhǎng)度乘以輪數(shù)加1,即密鑰bit的總數(shù)=分組長(zhǎng)度×(輪數(shù)Round+1)。例如當(dāng)明文分組長(zhǎng)度為128bits和輪數(shù)Round為10時(shí),輪密鑰長(zhǎng)度為128×(10+1)=1408bits,則需要添加40個(gè)新列來進(jìn)行擴(kuò)充;當(dāng)明文分組為128bits和輪數(shù)Round為12時(shí),輪密鑰長(zhǎng)度為128×(12+1)=1664bits,則需要添加46個(gè)新列來進(jìn)行擴(kuò)充。

Rijndael算法由于密碼密鑰Nk列數(shù)的不同,其密鑰擴(kuò)展算法有所不同。2025/8/1257下面以密鑰長(zhǎng)度128比特為例,Nk=4,其密鑰擴(kuò)展示意圖如下圖。首先初始密鑰按照矩陣列進(jìn)行分組,前4列初始密鑰計(jì)為K0,K1,K2,K3,那么新的列如下遞歸:

(1)如果Ki中,i不是4的倍數(shù),那么i列由如下等式確定:

Ki=Ki-4XORKi-1

NK=4的密鑰擴(kuò)展示意圖

2025/8/1258其中T[Ki-1]是Ki-1的一種轉(zhuǎn)換形式,按以下方式實(shí)現(xiàn):

循環(huán)地將Ki-1的元素左移位,每次一個(gè)字節(jié),如

abcd變成bcda②

將這4個(gè)字節(jié)作為S盒的輸入,輸出新的4個(gè)字節(jié)efgh③

計(jì)算一輪的常量

r(i)=Rcon(j/NK)④

這樣生成轉(zhuǎn)換后的列:[eXORr(i),f,g,h]第i輪的輪密鑰組成了列K4i,K4i+1,K4i+2,K4i+3.

(2)如果Ki中,i是4的倍數(shù),那么i列由如下等式確定:

Ki=Ki-4XORT[Ki-1]

實(shí)例:設(shè)初始種子密鑰為

K0=75356B99,K1=05613956,K2=73620531,K3=00550932,下一個(gè)子密鑰段為K4,由于i是4的倍數(shù),所以K4計(jì)算如下:

K4=K0XORT[K3]2025/8/1259T[K3]的計(jì)算要涉及Rcon數(shù)組,下面解釋下Rcon數(shù)組的計(jì)算。

密鑰擴(kuò)展中:Rcon[i]=(RC[i],

’00’,’00’,’00’)RC[1]=1(即’01’)RC[i]=2*RC[i-1]=(02)(i-1);i=2,3,......也即RC[i]=x(i-1)modp(x);i=2,3,......其中,p(x)=x8+x4+x3+x+1-Rcon[i]的計(jì)算:RC[1]=’01’(00000001)Rcon[1]=(’01’,00,00,00)RC[2]=‘02’(00000010)Rcon[2]=(’02’,00,00,00)RC[3]=‘04’(00000100)Rcon[3]=(’04’,00,00,00)RC[4]=‘08’(00001000)Rcon[4]=(’08’,00,00,00)RC[5]=‘10’(00010000)Rcon[5]=(’10’,00,00,00)RC[6]=‘20’(00100000)Rcon[6]=(’20’,00,00,00)RC[7]=‘40’(01000000)Rcon[7]=(’40’,00,00,00)RC[8]=‘80’(01000000)Rcon[8]=(’80’,00,00,00)RC[9]=‘1b’(00011011)Rcon[9]=(’1b’,00,00,00)RC[10]=‘36’(00110110)Rcon[10]=(’36’,00,00,00)RC[i]2025/8/1261實(shí)例:設(shè)初始種子密鑰為

K0=75356B99,K1=05613956,K2=73620531,K3=00550932,下一個(gè)子密鑰段為K4,由于i是4的倍數(shù),所以K4計(jì)算如下:

K4=K0XORT[K3]2025/8/1262T[K3]的計(jì)算步驟如下:

(1)循環(huán)將K3按照字節(jié)為單位左移1字節(jié),00550932變成了55093200

(2)將55093200作為S盒的輸入,查表得到輸出

fc012363

(3)計(jì)算常量Rcon(i)=(RC[i],00,00,00)異或,RC[i/NK]=RC[4/4]RC[1]=0x01(十六進(jìn)制)(4)將01000000與fc012363異或運(yùn)算得fd012363

因此,T[K3]=fd012363

K4=75356B99XORfd012363=883448fa

接著三列密鑰計(jì)算如下:

K5=Ki-4XORKi-1=K1XORK4=05613956XOR883448fa=8d5571ac;K6=Ki-4

XORKi-1=K2XORK5=73620531XOR8d5571ac=fe37749d;K7=Ki-4

XORKi-1=K3XORK6=00550932XORfe37749d=fe627daf;2025/8/1263

因此下一輪得密鑰為:883448fa8d5571acfe37749dfe627daf按照上述算法依次擴(kuò)展,128位密鑰由種子密鑰擴(kuò)展K4,K5,…,

K43為止。密鑰擴(kuò)展完成之后,進(jìn)行輪密鑰選取。

密鑰選取非常簡(jiǎn)單,從擴(kuò)展密鑰中取出輪密鑰:第一個(gè)輪密鑰由擴(kuò)展密鑰的第一個(gè)Nb個(gè)字(其實(shí)就是Nb列),第二個(gè)輪密鑰由接下來的Nb個(gè)字組成,以此類推。其結(jié)構(gòu)如下圖所示:輪密鑰選擇

Wi-4Wi-3Wi-2Wi-1WiByteSubstituionByteRotate+Rcons+密鑰擴(kuò)展(128)4=<i<4(Rnd+1)imod4=0imod4!=0Wi-6Wi-5Wi-4Wi-3Wi-2ByteSubstituionByteRotate+Rcons+6=<i<6(Rnd+1)imod6=0imod6!=0Wi-1Wi密鑰擴(kuò)展(192)Nk<=6若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;}}Wi-6Wi-5Wi-4Wi-3Wi-2ByteSubstituion++密鑰擴(kuò)展8=<i<8(Rnd+1)imod8=0imod4!=0Wi-1WiWi-8Wi-7ByteSubstituionByteRotate+Rconsimod4=0密鑰擴(kuò)展(256)Nk=8時(shí)的密鑰擴(kuò)展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;}}Rijndael密鑰擴(kuò)展算法用偽C語(yǔ)言表示如下:Rijndael-KeyExpansion(bytekey[4*Nk],wordw[Nb*(Nr+1]),Nk)Beginwordtempi=0while(i<Nk)w[i]=word(key(4*i],key(4*i+1],key(4*i+2],key(4*i+3])i=i+1endwhilei=Nkwhile(i<Nb*(Nr+1))temp=w[i-1]if(imodNk=0)temp=Subword(RotWord(temp))xorRcon[i/Nk]elseifw[i]=w[i-Nk]xortempi=i+1endwhileend密鑰擴(kuò)展算法的描述及實(shí)現(xiàn)(Nk=4或6)

2025/8/12703.4.6解密過程

由AES解密過程中的基本運(yùn)算,除了輪密鑰加AddRoundKey與AES加密算法中一樣,其它基本運(yùn)算字節(jié)替代SubBytes、行移位ShiftRows、列混合MixColumns都要求逆,解密過程中的基本運(yùn)算為逆字節(jié)替代InvSubBytes、逆行移位InvShiftRows、逆列混合InvMixColumns。解密結(jié)構(gòu)如下圖所示。2025/8/12711.逆字節(jié)代替(InvSubBytes)

Rijndael算法的逆字節(jié)變換(InvSubBytes)是與字節(jié)替代一樣,它將輸入或中間狀態(tài)的每一個(gè)字節(jié)通過一個(gè)簡(jiǎn)單查表操作,只是查表操作變?yōu)椴槟鍿盒,逆S盒如右表所示。映射方法是:輸入字節(jié)前4位指定逆S盒的行值,后4位指定逆S盒的列值,有行和列所確定逆S盒位置的元素作為輸出。

2025/8/1272同樣,Rijndael的逆S盒替代操作它包括兩個(gè)變換,其變換順序與S盒剛好相反,先進(jìn)行仿射變換的逆變換,然后進(jìn)行求逆運(yùn)算:(1)在GF(2)上進(jìn)行下面的仿射變換,每個(gè)字節(jié)可以依次記為(b7,b6,b5,b4,b3,b2,b1,b0),依次做下面的仿射變換:其中di是指字節(jié)(05=00000101)中的第i位的值。上面逆仿射變換用矩陣可以表示為:

2025/8/12732025/8/12742.逆行移位(InvShiftRows)

在Rijndael算法中,逆行移位操作與行移位操作相反,行移位操作循環(huán)左移,而逆行移位操作則循環(huán)向右移。若AES算法中Nb為4,即第1行循環(huán)右移0字節(jié),第2行循環(huán)右移1字節(jié),第3行循環(huán)右移2字節(jié),第4行循環(huán)右移3字節(jié),如下圖所示。從該圖中可以看出,這使得列完全進(jìn)行了重排。

2025/8/12753.逆列混合(InvMixColumns)

逆列混合操作與列混合操作一樣,只是多項(xiàng)式不同,則逆列混合操作多項(xiàng)式d(x)=0Bx3+0Dx2+09x+0E相乘然后模x4+1,因而逆列混合是可以表示為矩陣相乘來實(shí)現(xiàn),輸入的矩陣與固定矩陣(十六進(jìn)制表示)相乘,如下所示:其圖形表示如下圖所示:

Rijndael加密算法用偽C語(yǔ)言表示如下:Rijndael-InvChiper(bytein[4*Nb],byteout[4*Nb],wordw[Nb*Nr+1])Beginbytestate[4,Nb]state=inAddRoundKey(State,w[Nr*Nb,(round+1)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論