2024現代密碼學簡介_第1頁
2024現代密碼學簡介_第2頁
2024現代密碼學簡介_第3頁
2024現代密碼學簡介_第4頁
2024現代密碼學簡介_第5頁
已閱讀5頁,還剩109頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

什么是密碼學..................................... 密鑰密碼體制的基本要素................................. 弱密鑰與半弱密鑰..............................經典密碼 基礎概念.................................... 單表代換密碼................................. 單表代換密碼的破解............................. 多表代換密碼................................. 一次一密....................................加密系統的安全性...................................數學上的基本概念................................... GF(2)上的加法與乘法............................ GF(2)上的多項式...............................流密碼的基本概念...................................LFSR的偽隨機比特發生器........................... 偽隨機比特發生器的線性部分........................ 偽隨機比特發生器的非線性部分......................BBS產生器ANSIX9.17偽隨機數發生器............................. 準備階段.................................... 算法設計密碼系統的方法................................. 擴散與混淆.................................. 置換與代換..................................分組密碼的定義....................................分組密碼的設計方法................................. 費斯妥密碼.................................. SP網絡..................................... 分組密碼的運行模 (ECB)...............................(CBC)...........................(CFB).............................(OFB).............................(CTR)...............................DES.........................................算法與代碼..................................DES....................................結構特性.............................................................................符號說明....................................輪結構.....................................加密過程....................................AES.........................................輸入與輸出..................................輪函數.....................................密鑰編排算法.................................總的加解密過程................................數學基礎....................................第四章公鑰密 簡 基本框架.................................... 算法細節 基本框架.................................... 算法細節.................................... RSA的數學驗證................................ RSA的安全性.................................ElGamal密碼 數學基礎.................................... 基本框架.................................... 正確性證明.................................. ElGamal密碼的安全性............................ nElGamal........................ 橢圓曲線.................................... ElGamal............................?第五章哈希算 消息認 定 應 Merkle-Damg?rd結 服從MD結構的填充函 單向壓縮函數.................................算法MD5.........................................填充比特....................................填充長度....................................初始化變量..................................處理消息....................................總過程.....................................SHA-256............................................................................................................. 初始化變量.................................. 處理消息.................................... 總過程.....................................簡介MAC算法.............................. CBC-MAC.................................. CMAC....................................MAC算法..............................MAC算法.............................. Poly1305...................................認證加密 先加密再 ............................... 加密同時 ............................... MAC再加密................................ 認證加密模式.................................簡介數字簽名的執行方法................................. (Directdigitalsignatures)...................... (Arbitrateddigitalsignatures)....................基于公鑰密碼的數字簽名的基本步驟........................ 密鑰生成算法................................. 簽名算法.................................... 驗證簽名算法................................. 討論DSA.................................. 密鑰生成算法................................. 簽名算法.................................... 驗證簽名算法.................................第八章安全協 為什么要安全協 安全協議記 密鑰協 對稱密碼的密鑰分 公鑰密碼體系的安全協 基于公鑰密碼的會話密鑰分配協 秘密共 “cryptography”“cr”3+18=21“yp”25+16=41“cryptography”對應的密碼就是“214135252133。遞信息。但接收信息者必須要有解密的方法。但這種加密方式則沒有對應的解密方法。所以說,這不是一個合格的加密方式。3個位置?!皏enividivici”也就變成了“yhqlylglylfl”.這種密碼的解密方法,也就是每個字母3個位置。當問起這種密碼體制里最重要的是什么,大部分人都會說是m代表要被加密的文字,c代表被加密出來的密碼,E()代表加密算法,D()代表c=Em=DAliceBobAlice事先在安全信道Bob說“我的這種加密方式是把一段由英文字母組成的語句,每個字母都在字母表中3那么花費的這么長的時間顯然是不合理的。再者,現代的通信方式一般都是把信息編碼成二拿凱撒密碼為例,在其加密算法中,還有一個關鍵的量:3.試想,如果通信雙方AliceBob,Alice在場的所有人她用的是凱撒密碼的加密方式加密她的話,又在安全信道中告訴4Bob,才能正確地破解密碼。343個位置,一個向后移動4個位置。我們3、4.通過一個密碼體制通信的雙方,需要首先在保k代表密鑰,那么之前的式子就變成了c=Ekm=DkEa,b(m)=am+(a,b),(a,b)E(m)=m∈M.c∈C.E(km)的值域。比如說,對Ek(m)=m2+[0+∞)[k2k∈EkDkDk(Ek(m))=AliceBobAlice425呢?這就涉及到了密鑰生成算法。在這個例子中,密鑰生成算法就是Alice自己想到哪個密鑰就輸出哪個密步驟中涉及到了某些概率。比如說,在某個密鑰生成算法中,在(01)中等概率隨機生成一個t, t∈(0.5,k t= t∈(0,E,D,G.根(EDG)M因此,AliceBobAliceGk∈AlicekAlicem∈Mc=Ek(m)BobAlicekcm=DkKerckhoffs原則。用現代的語言來說,Kerckhoffs原則闡述的是:也就是說,我們如果要證明一個加密體制的安全性,不能指望算法的保密性。我們應默(事實上也確實如此如果潛在的敵手獲得密鑰,那么根據公開的解密算法,那么他就可以從竊得的密文中獲得明文。Ek(Ek

Ek1(Ek21.1.Ek(m)km∈MEk(Ek(m))=kk1k2km∈M,Ek1(Ek2(m))=k1k2C(m)mC(a)=1C(z)=26.I(n)126I(1)=a,I(26)=z.gcd(a,babamodbab后的余數(0b?1),15mod6=312mod6=0(?4)mod6=2.amodb=0aba|b.2|43?(ab)|c,abca≡b(modc).16≡23(moda,bcac1modb)caba?1.并gcd(a,b)=1.“m1m2···mn”,“c1c2···cn”,mici均代表一個拉丁字ci=E(mi)=C((I(mi)+3)mod

mi=D(ci)=C((I(ci)?3)mod “m1m2···mn”,“c1c2···cn”,mici均代表一個拉丁字母。(a,ba?0那么其加密算法ci=Ea,b(mi)=C((aI(mi)+b)modmi=Da,b(ci)=C((a?1(I(ci)?b))moda?1a26niI(miqiI(Ea,b(mieiI(Ea,b(midiI(Da,b(Ea,b

qi≡ani+ (moddi≡a?1(qi?≡a?1(ani+b?≡ (modI(Da,b(Ea,b(mi)))≡ (modDa,b(Ea,b(mi))=個密鑰,比如說,a=3,b=7,就會對應的生成一張加密表和解密表:1.1:a=3b=71.2:a=3b=7度的字符串組成的集合,密文空間C=M.密鑰空間K={(a,b)|a,b∈Zgcd(a,26)=1}(這gcd(a,26)=1a26的逆存在。).SHRDLU”.12個字母,從高到低排列。根據這些頻率,就圖1.1:單表代換加密前 圖1.2:單表代換加密后頻率從高到低次是“ETAOINSHRDLU”.如果我們可以統計出一個相當長的密文中各個字“E”.這就是頻率分析法為巧合指數ICNc個字母,每個字母出現的次數ni,i=1,2,...,c.那么巧合指數的值為ni(ni?IC= N(N?

∑∑ni(ni?∑N(N?

N

=niiICIC≈∑ IC≈0.0686.接著我們統計加密過后的密文的巧合指數,假設密鑰為k,我們對k=0,1,...,25次去0.0686,k有很大可能是密鑰。tt+1個字符,則又回到第一張加密表進行加密。用數學的語Mm1m2···mnn=tp.成p個列向量M,M,...,M,其中M= , ,..CC1C2Cp(A,B)Att的可逆矩陣,且滿gcd(|A|26)=1,Bt維列向量。Ci=EA,B(Mi)=C((AI(Mi)+B)mod Mi=DA,B(Ci)=C((A?1I(Ci?B))mod A?1

A?1Amod26=110

..

.00·· (11)(33)(57)字符串字符串M=m1m2···mn的長度n=3pM=(m ,m ,m .pM1M2Mp,CC1C200 1

A=

0,B=30101

=Ci=EA,B(Mi)=

mp(i?1)+1+

3mp(i?1)+2+ mod5cp(i?1)+3+Mi=DA,B(Ci)Mi=DA,B(Ci) 0 00

1 法為cp(i1)+1=mp(i1)+11mod26第二個字符使用的加密方法為cp(i1)+2=3mp(i1)+2+3 26cp(i?1)+3=5mp(i?1)+37mod26.這也就是我們設計多A0的位置。但是,我們之前在數學上0事實上,這些位置如果不是 圖1.3:多表代換加密 圖1.4:多表代換加密nn的字符串作為密鑰。所得的密C1C2,將這兩個字符串中的每個字符按其在字母表中的位置相0那么對應位置就就有可能是出現頻率比較高的幾個字母。當然,更嚴謹(EDG)其中,E代表加密算法,D代表解密算法,G代表密鑰M,C,K.m∈M,MPr[M=m]m的概率。這一定,“don’tattack”0.4.k∈K,KPr[Kk]Gk的概(由常識可知,KM是獨立的)cCCPr[C=cc的概率。由于密文是完Pr[C=c](perfect

Pr[M=m]Pr[K= 1.2.對于明文空間為M的加密方案(EDG),若對Mm∈Mc∈CPr[C=c]Pr[M=m|C=c]=Pr[M= (EDG)MC是獨立的。1.1.M(EDG)|K|≥|M|,|C|≥ 1.2.M(EDG),|K|=|M|=|C|,則當且僅當下列∈由G產生的任意密鑰 的概率都是∈mMc∈Ck∈KcEkGF(2)01及它們的運算,GF(2)={0GF(2)2GF2.1:GF(2)a?aa+(?a)=(?a)+a=GF(2)2.2:GF(2) GF(2)a?b=a+ GF(2)GF(2) GF(2)?x∈GF(2),x+x= ?x,y∈GF(2),x?y=y?x=x+ ?x∈GF(2),x·x= GF(2)anxn+an?1xn?1+···+a1x+a0 a0a1anSa0a1anan?=0時,稱,GF(2)上的多項式。x的取值進行多項式的求值。它就相當于一個集合的元素,一個多項式就fgh?x,h(xf(xg(x來定義多項式m≥n,則 ∑aixi+∑bjxj=∑(ak+bk)xk+∑ ak+bkSf=x21g=x3x2那么 f+ 但是,我們這里也需要注意到剛剛說的,akbkS上的加法。比GF(2)上的加法為: f+ 2x22GF(2)上,1+1=類似于多項式的加法的定義,兩個多項式之差的系數,等于其對應系數之差。在GF f? (01)x3=(01)x3=x3(11)x2=011xixj=xi+j.GF(x+1)(x+=xx+(1+1)x+=x2+GF(2)上,(11)x=fnf·fg,h,f=gh,gf,gf,

=SGF(2)(x2+1)|(x+fgh,gh=fgh的f的次數。GF(2)f+g=g+

(f+g)+h=f+(g+ fg= (fg)h=f f(g+h)=fg+fh fg?=1? f+gf+fg2+···+fgn?1=∑fgi1?

GF(2)這個有限域上的運算和我們在實數集上的運算很不一樣,所以在后文中我們應GF(2)上的還是定義在實數集上的。同時,我們也該清楚定理敘述+強保密的目標。M=m1m2···mn,我kZ=z1z2···zn作為密鑰流,輸出Yy1y2···ynyimizi.GF(2)miyizi.一次一密使用的是真隨機序列,流密碼使用的是偽隨機序列。如何能使偽隨機序列的表現足f(kσik為輸入的密鑰,σi為當前時刻系統的狀態。在每個時刻,f(k,σi)輸出一個偽隨機數,同時系統狀態改變為σi+1.常把一個用于加.(PRBG)。對于自同步流密碼,可以CFB模式。X=x1x2···xn,k.在x1k,z1,輸出密文y1=x1⊕z1.x2,z2,輸出密文y2=x2⊕z2.以此類推。LFSRLFSR的偽隨機數發生器由線性部分和非線性σi=an,ian?1,i···a1,in個二進制數構成。在啟動之an,0an?1,0···a1,0.bi為bi=

= 1≤j≤n?f(a1,i?1,a2,i?1,..., j=

f(a1,i?1,a2,i?1,...,an,i?1)GF(2)an,i=f(a1,i?1,a2,i?1,...,=cna1,i?1+cn?1a2,i?1+···+ ck∈GF(2),ck01.這些數字都是固定的,由偽隨機數發生器本身決定。GF(2)上的運算。110,f(a3,i,a2,i,a1,i)=a3,i+a1,i.則我們可以通過下表來了解這f(a3,a2,其輸出序列就為 011101···我們由上面的表可以發現,從每一列來看,隨著i的遞增,上一行的數會傳給下一行的cn?=0,nLFSR.LFSRB=b1b2···bi···LFSR(bi+1bi+2···bi+n)=(a1,i?1a2,i?1··· ?1jn,aj,i0.jn1aj,i+1aj+1,i0.?1jn,aj,i0.jn1aj,i+1aj+1,i0.an,i=cna1,i?1+cn?1a2,i?1+···+c1an,i?1=σi=an,ian?1,i···a1,i的下一個狀態為零狀態,則由定義可知,?2≤j≤n,aj,i=aj?1,i+1=0an,i+1?=0.且0=an,i+1=cna1,i+cn?1a2,i+···+c1an,i=cn?0a1,i0LFSR2n?2.1.LFSR2n?1mman,i=cna1,i?1+cn?1a2,i?1+···+c1c2cnLFSR2.2.GF(2)p(x)=1+c1x+···+cn?1xn?1+ LFSRLFSRa1a2···an···,A(x) LFSR,2n?1個非零序列構成的集合記G(p(x)).2.1.LFSRp(x1c1x···cn?1xn?1cnxnA(xG{an}GF(2)p(x)A(x),A(x)

?(x)?(x)

?(x)

k=ni+j

i=1因此,我們可以發現,?(x)n?2.3.GF(2)p(x),p(x)|xp?1,pp(x)2.2.p(x)nm.an}∈G(p(x)),{an}2.4.np(x)2n?1,p(x)2.3.{an}∈G(p(x)){an}mp(xLFSR2.5.{an},n01n01GF(2)2{an},11∑ R(τ) (1)ak(1)ak+τ,0< 2.6.{an},在序列的一個周期內,01i的游程占游程總數的1,01nmLFSR2n的明密文對。x1x2···x2ny1y2···y2n,LFSR的特征多c1c2cn.GF(2)上yi=xi+zii位。GF(2)上xi+yi=xi+xi+zi=2nz1z2···

S= , ,..., )T,i=0,1,...,n? X=(S0,S1,... zn+i=cnzi+cn?1zi+1+···+ (zn+1,zn+2,...,z2n)=(cn,cn?1,···,c1) X(cn,cn?1,···,c1)=(zn+1,zn+2,...,z2n) LFSR的輸入,以非線性的我們稱一個序列的線性復雜度為生成該序列的最短LFSR的級數。即若該序列周期T滿足2n?1?1<T≤2n?1,n.GeffeLFSRGeffeLFSR{a(1)},{a(2)},{bk}

{a(1)}{a(2){a(3)2n112n212n31nnn{bk(2n11)(2n21)(2n31)(n1n3n2JKJKLFSRJKLFSR{a(1)},{bk}若{a(1)和{a(2)2n12m1m,n互素,a(1)a(2)=1則{b(2n?1)(2m?鐘控序列接受兩個LFSR的輸入,其輸入分別為序列鐘控序列接受兩個LFSR的輸入,其輸入分別為序列{a(1)},{a(2)}.{bk}nk?1+的周期分別為 的周期分別為

和p和p且記wa(1),則{ba(1),則

p gcdgcd(w,p12m1p22n1n(2mBBSLFSR相比,BBSp,qp≡q≡3(mod4),n=s(s,n)=X0s2mod{Bn}Xi=

modBi=XimodBBSLFSR相比,BBS涉及了大素BBS產生器一般不用ANSIX9.17與每次產生一個比特的偽隨機比特發生器不同,偽隨機數發生器每次產生一個偽隨機數。偽隨機比特發生器是一種特殊的偽隨機數發生器。偽隨機比特發生器一般用于流密碼,而偽ANSIX9.17偽隨機數發生器。V0.此外,DTii64位的數字。TDESDES6464比特的輸出,同時,TDES56K1,K2K1,K2TDESmTDESK1,K2(m).{Rn}Ri=TDESK1,K2(Vi⊕TDESK1,K2Vi+1=TDESK1,K2(Ri⊕TDESK1,K2所謂擴散,指的是如果我們改變明文中的一個字符,加密得到的密文中的多個字符也會得到改變;如果我們改變密文中的一個字符,解密得到的明文中的多個字符也同樣會得到改就可以是用明文中的多個字符去生成密文中的一個字符。后輸出。置換中最常用的結構為Pm位二進制輸入,m位二進制輸出。其輸出是Sm位二進制S盒需要保證不同的輸入對應的輸出也不同。從編程上,我們也可以將此理解成一個長度2mnn2m.S盒,P需要將同一個步驟重復多輪。而在加密過程中,任何核心步驟都是同時需要明文和密鑰的信1616個子密鑰。Oi?1IiOi?1Li?1Ri?1,Li= Ri=Li?1⊕F(Ri?1, LiRiF(Ri?1,Ki)=可以用下圖形象地理解費斯妥密碼(wiki:(Ln+1Rn+1),(Rn+1SPSP網絡每輪接受到輸入之后,首先,將輸入與該輪的子密鑰進行異或,然后是對輸入再P盒的置換進行輸出。SP網絡(wiki:Mm1m2mnn個等長的組,在每組Ek(m),Dk(c).mi,k.ci=Ek 其加密過程如圖所示(wiki:blockcipherblockcipherblockcipherblockcipherblockcipherblockcipher

ElectronicCodebook(ECB)modeECBECBAESci=Ek(mi⊕ci?1)=Ek(mi⊕Ek m0,IV,其加密過程如圖所示(wiki:

blockcipherblockcipherblockcipher

CipherBlockChaining(CBC)modeCFBCFBjj=j個比特。然后對于每個新分好的組,先將移位寄存器左移j個比特,然后將上一組輸出的j個比特輸入到移位寄存器的右邊。然kjj個比CBCIVHj(m)mj位,Pij比特的分組,CFB模式的加密過程可用公式描述為:ci=Hj(Ek(Si?1))⊕ SiSi=((Si?1<<x)+ci)mod 如果忽略移位寄存器,其大致的工作原理可由下圖表示(wiki:blockcipherblockcipherblockcipher

CipherFeedback(CFB)modeOFB模式與CFB模式極其類似,區別僅在于每組向移位寄存器內的輸入為上一組內與明文異或之前的輸出。如下圖所示(wiki:blockcipherblockcipherblockcipher

OutputFeedback(OFB)mode我們如果再仔細看一下OFB的模式圖,會發現,事實上,OFB模式把分組密碼變成了流.其過程如圖所示(wiki:

blockcipherblockcipher

blockblockcipher

blockcipherblockcipher

Key

Counter(CTR)mode

CTR的獨一無二的好處:可以并行加密。其每組加密不需要上DESDES采用了費斯妥密碼的結構,并對它進行了一定的改進。之前我們提到的費斯妥密碼,DES的算法。DES的主體——費斯妥密碼。正如之前說的,費斯妥密碼為一個步驟的Li= Ri=Li?1⊕F(Ri?1, 其中,Li?1,Ri?1為上一輪輸出的左右兩半,Li,Ri為本輪輸出的左右兩半,F(Ri?1,Ki)為輪函數,Ki為本輪的子密鑰。Cbitset<64>bitset<64>round(bitset<64>input,bitset<48>bitset<64>output;bitset<32>previousLeftPart;bitset<32>leftPart;bitset<32>rightPart;for(inti=0;i<32;previousLeftPart[31-i]=input[63-for(inti=0;i<32;leftPart[31-i]=input[31-rightPart=previousLeftPart^F(leftPart,for(inti=0;i<32;output[63-i]=leftPart[31-for(inti=32;i<64;output[63-i]=rightPart[63-returnSP盒的置換來擴散。32483248位的二進制E48484832位的S盒的輸入。接著,將S32P盒(P)輸出。4832位的S864位的S48位分3248位,進行異或,輸入S盒,輸入intS_BOX[8][4][16]intS_BOX[8][4][16]=E[]=intP[]={16,7,20,29,12,28,1,15,23,5,18,31,2,8,24,32,27,3,19,13,30,22,11,4,bitset<4>S_boxi(bitset<6>input,intintrow=2*input[5]+intcolumn=8*input[4]+4*input[3]+2*+intoutputint=S_BOX[i][row][column];bitset<4>output(outputint);returnbitset<32>S_box(bitset<48>bitset<32>output;bitset<6>SiInput[8];for(inti=0;i<8;for(intj=0;j<6;SiInput[i][5-j]=input[47-(j+i*6)];bitset<4>SiOutput=S_boxi(SiInput[i],i);for(intj=0;j<4;output[31-(j+i*4)]=SiOutput[3-returnbitset<32>F(bitset<32>rightPart,bitset<48>bitset<32>output;bitset<48>expandedInput;for(inti=0;i<48;expandedInput[47-i]=rightPart[32-bitset<48>S_boxInput=expandedInput^ki;bitset<32>S_boxOutput=for(inti=0;i<32;output[31-i]=S_boxOutput[32-returnreturnDES64位明文輸入,DES64位密文輸入。為了更好地實現IP.64位二進制串作為費斯妥密碼的輸入。bitset<64>getInitialPermutation(bitset<64>bitset<64>getInitialPermutation(bitset<64>bitset<64>for(inti=0;i<64;initialPermutation[63-i]=input[64-returnintIP[]=(R16,L16)(L16,R16).DES的加密和解密算法能盡可能復用,我們將輸出再經過一個PDES的輸出。其中,輸出時經過的P盒要是輸入時P盒的IP?1.m,c,(包括最后的左右交換f(x),f?1(x).那么,DESc=IP?1(f(IPff IP?1f?1(IP =IP?1(f?1(f(IP=IP?1(f?=IP?1(f?1(f(IP=IP?1(IP因此,DESIP?1.bitset<64>bitset<64>exchangeLeftAndRight(bitset<64>bitset<64>for(inti=0;i<32;output[63-i]=input[31-for(inti=32;i<64;output[63-i]=input[95-returnbitset<64>getInversePermutation(bitset<64>bitset<64>for(inti=0;i<64;output[63-i]=input[64-returnintIP_1[]=16DES64位密鑰。56P盒(1:PC_1),作為接下來bitset<56>getKeyPermutation(bitset<64>bitset<56>getKeyPermutation(bitset<64>bitset<56>for(inti=0;i<56;output[55-i]=key[64-returnintPC_1[]=DES1616個子密鑰。在DES1656位二進制串的48562。DES密碼算法中,加密和解密僅有的區別就是子密鑰的使用順序。因565648位的S盒(稱為置換選2:PC_2),作為本輪的子密鑰。CenumShiftStyle{intshiftBits[]={1,1,2,2,2,2,2,2,1,2,2,2,2,2,intinverseShiftBits[]={0,1,2,2,2,2,2,2,1,2,2,2,2,PC_2[]=bitset<56>shiftKey(bitset<56>key,intShiftStylebitset<56>bitset<28>previousLeftPart;for(inti=0;i<28;previousLeftPart[27-i]=key[55-bitset<28>previousRightPart;for(inti=0;i<28;i++)previousRightPart[27-i]=key[27-intswitchcaseshift=shiftBits;caseshift=inverseShiftBits;bitset<28>leftPart;bitset<28>rightPart;intshiftBit=switchcasefor(inti=0;i<28;leftPart[27-i]=previousLeftPart[(27--shiftBit+28)%28];rightPart[27-i]=previousRightPart[(27-i-shiftBit+28)%casefor(inti=0;i<28;leftPart[27-i]=previousLeftPart[(27-+shiftBit+28)%28];rightPart[27-i]=previousRightPart[(27-i+shiftBit+28)%for(inti=0;i<28;output[55-i]=leftPart[27-for(inti=28;i<56;output[55-i]=rightPart[55-i];returnoutput;bitset<48>getSubkey(bitset<56>key,intShiftStylebitset<48>for(inti=0;i<48;output[47-i]=key[56-returnDESDESDES的加密和解C程序代碼如下:bitset<64>DES_ENC(bitset<64>plainText,bitset<64>bitset<64>bitset<64>roundInput=getInitialPermutation(plainText);bitset<64>roundOutput;bitset<56>permutatedKey=getKeyPermutation(key);bitset<56>previousShiftOutput=shiftKey(permutatedKey,0,for(inti=0;i<16;bitset<48>subkey=getSubkey(previousShiftOutput,roundOutput=round(roundInput,subkey);roundInput=roundOutput;previousShiftOutput=i+1,cipher=returncipher;bitset<64>DES_DEC(bitset<64>cipher,bitset<64>bitset<64>bitset<64>bitset<64>roundInput=getInitialPermutation(cipher);bitset<64>roundOutput;bitset<56>permutatedKey=getKeyPermutation(key);bitset<56>previousShiftOutput=shiftKey(permutatedKey,0,for(inti=0;i<16;bitset<48>subkey=getSubkey(previousShiftOutput,roundOutput=round(roundInput,subkey);roundInput=roundOutput;previousShiftOutput=i+1,plainText=returnplainText;30DES的最好的實用攻擊仍然只是對密鑰空間的窮舉搜索。但是,DES56DES的記錄。DESDES112K將其K1K256Ek(m)DES的加密過程,Dk(m)DES的解密

EK1(EK2DK2(DK1DESTDES112K1K256EK1(DK2(EK1DK1(EK2(DK1DES的密鑰過短,從數學角度來看,DES密碼擁有一些結構特性,也降低了其破解m,mmDESk(m)k,二進制mDES加密的密文,那么,我們可以證明: 攻擊者,他可以選擇明密文對(MC)和M,C?.256個可能的密鑰,也就是l,DESl(M)=CC?,ll. DES3.1.DESw,Ew(Ew(m))= w從另一個角度解釋公式3.10,Ew(m)=Dw 而我們之前提到,DES密碼的加密與解密過程唯一的區別就是子密鑰的使用順序。據此w也就是使其生成子密鑰時加密與解密循環移位的結果相同即564個弱密鑰。3.2.DESw1w2,Ew1(Ew2(m))= w1w23DES56位的密鑰6對半弱密鑰。IDEAIDEAm1⊕m21621616m1m2,m1?m2=(m1+m2)mod216+116m1m2,m1⊙m2=(m1·m2)mod(216+m1=000,m1216.216+1=65537為素數,216+1的非零整數乘法構成一個群,即所有非零整數都16216+1為素數,所以如(m1m2)mod(216+1)=0,m1m2216+1m1m2均為16位字符串,所以這是不可能的。wiki: 416位的二進制串。IDEA64128位密鑰。對于密鑰,將其通過一個子密鑰生成器生48168616位的子密鑰用于輸出變換。6448輪輪結構后,將輸出的結構通過如圖所示的輸出變換(wiki,得到密文。前8個子密鑰Z1,Z2,...,Z8直接在加密密鑰中次選取。然后,將加密密鑰循環左移52位,再次取接下來的8個子密鑰。以此類推,直到52個子密鑰全部生成。AES密碼標準中,明文長度固128128,192256AES-128,AES-192和AES-256.在處理過程中,我們對明文和密鑰進一步分組。AES密碼的每個步驟的處理單位是一個Nb(128Nb=4).此外,我們也記以字節為單4Nk(Nk468).我們如果假定由字節組成的明文是一4Nb{Mn},那么,我們可以按下表的順序填充分組:AES的實際過程中,都是對狀態陣列進行操CvoidvoidbitToByte(bitset<128>inputBits,bitset<8>for(intbyte=0;byte<64;byte++)for(intbit=0;bit<8;outputBytes[byte][bit]=inputBits[8*byte+voidbitToState(bitset<128>input,bitset<8>for(intcolumn=0;column<4;forfor(introw=0;row<4;for(intbit=0;bit<8;bit++)state[row][column][bit]=input[32*column+8*row+voidstateToBit(bitset<8>state[4][4],bitset<128>for(intcolumn=0;column<4;column++)for(introw=0;row<4;row++)for(intbit=0;bit<8;bit++)output[32*column+8*row+bit]=AES4(ByteSub),(ShiftRow),列混(MixColumn),(AddRoundKey).128128S盒。其接受輸入狀態陣列,然后對狀態陣列S盒的操作。在C程序實現里,加密過程中,S盒為bitset<8>S_box[16][16]解密過程中,S盒為bitset<8>Inv_S_Box[16][16].SAES中是固定的,其生成方式可CvoidvoidSubByte(bitset<8>state[4][4],CryptoModebitset<8>switchcasecrypto_S_box=S_box;casecrypto_S_box=Inv_S_Box;for(introw=0;row<4;for(intcolumn=0;column<4;bitset<8>previousValue=*(*(state+row)+column);intS_box_row=previousValue[7]*8+previousValue[6]*+previousValue[5]*+previousValue[4];intS_box_column=previousValue[3]*8+previousValue[2]*+previousValue[1]*+*(*(state+row)+=4Nb個C1,C2,C3.C1,C2,C3Nb有關。C程序實現如下:intintshiftBytes[4]={0,1,2,voidShiftRows(bitset<8>state[4][4],CryptoModefor(introw=0;row<4;bitset<8>for(intcolumn=0;column<4;column++)previousRow[column]=state[row][column];switchcasefor(intcolumn=0;column<4;column++)==-shiftBytes[row]+4)%casefor(intcolumn=0;column<4;column++)=+shiftBytes[row])%(a0,a1,a2,a3)T.4(b0,b1,b2,b3)T.b0 02030101a0 0102

b2 01010203a2

030101 a0

b20b,0d,0e7256的表,用于與一個字節對應的比特(28=256種)相乘(a0,a1,a2,a3都是一個字節)的結果。Cbitset<8>bitset<8>*M[4][4]={Mul_02,Mul_03,Mul_01,{Mul_01,Mul_02,Mul_03,{Mul_01,Mul_01,Mul_02,{Mul_03,Mul_01,Mul_01,bitset<8>*Inv_M[4][4]={Mul_0e,Mul_0b,Mul_0d,{Mul_09,Mul_0e,Mul_0b,{Mul_0d,Mul_09,Mul_0e,{Mul_0b,Mul_0d,Mul_09,voidMixColumns(bitset<8>state[4][4],CryptoModebitset<8>*switchcasecrypto_M=&M;casecrypto_M=&Inv_M;for(intcolumn=0;column<4;bitset<8>for(introw=0;row<4;row++)previousColumn[row]=state[row][column];for(introw=0;row<4;state[row][column]=for(inti=0;i<4;i++)^=*(*(*(*crypto_M+row)++Nb的輪密鑰。密鑰加CvoidvoidAddRoundKey(bitset<8>state[4][4],bitset<32>for(introw=0;row<4;for(intcolumn=0;column<4;column++)for(intbit=0;bit<8;bit++)=ki[row][column*4+^Nb的輪密鑰。密鑰Nb,NrNb(Nr+1)長度NbNb長Nr個輪常數Rcon,以及一些輔助工作,如對密鑰的循環移位RotWord和對密鑰的替換(S盒與之前的是同一個)SubWord.此外,對于Nr,密鑰擴展算法也不同。AES-128Cbitset<32>Rcon[10]={0x01000000,0x02000000,0x04000000,0x08000000,bitset<32>Rcon[10]={0x01000000,0x02000000,0x04000000,0x08000000,0x10000000,0x20000000,0x40000000,0x80000000,0x1b000000,bitset<32>RotWord(bitset<32>bitset<32>for(inti=0;i<32;output[i]=input[(i-8+32)%returnbitset<32>SubWord(bitset<32>bitset<32>for(intbyte=0;byte<4;introw=input[8*byte+7]*+input[8*byte+6]*+input[8*byte+5]*+input[8*byte+4];intcolumn=input[8*byte+3]*8+input[8*byte+2]*+input[8*byte+1]*+input[8*byte];bitset<8>value=S_box[row][column];for(intbit=0;bit<8;bit++)output[8*byte+bit]=value[bit];returnvoidKeyExpansion(bitset<8>*key,bitset<32>intNk=4;intNr=10;for(intword=0;word<Nk;word++)for(intbyte=0;byte<4;byte++)for(intbit=0;bit<4;w[word][4*byte+bit]=for(intword=Nk;word<4*(Nr+1);bitset<32>tmp=w[word-ifif(!word%tmp=SubWord(RotWord(tmp))^Rcon[word/Nk];w[word]=w[word-Nk]^tmp;Cbitset<128>bitset<128>AES_128_ENC(bitset<128>plainText,bitset<128>bitset<128>bitset<8>bitToState(plainText,bitset<8>bitToByte(key,bitset<32>KeyExpansion(keys,bitset<32>for(inti=0;i<4;i++)subkeys[i]=expanedKeys[i];AddRoundKey(state,for(intround=0;round<9;SubByte(state,Enc);ShiftRows(state,Enc);MixColumns(state,Enc);for(inti=0;i<4;subkeys[i]=expanedKeys[i+4+round*4];AddRoundKey(state,subkeys);SubByte(state,Enc);ShiftRows(state,SubByte(state,Enc);ShiftRows(state,Enc);for(inti=0;i<4;i++)subkeys[i]=expanedKeys[i+40];AddRoundKey(state,stateToBit(state,returnC程序代碼如下:bitset<128>bitset<128>AES_128_DEC(bitset<128>cipher,bitset<128>bitset<128>bitset<8>bitToState(cipher,bitset<8>bitToByte(key,bitset<32>KeyExpansion(keys,bitset<32>for(inti=0;i<4;i++)subkeys[i]=expanedKeys[40+i];AddRoundKey(state,for(intround=0;round<9;SubByte(state,Dec);ShiftRows(state,Dec);MixColumns(state,Dec);for(inti=0;i<4;subkeys[i]subkeys[i]=expanedKeys[i+36-round*AddRoundKey(state,SubByte(state,Dec);ShiftRows(state,Dec);for(inti=0;i<4;i++)subkeys[i]=expanedKeys[i];AddRoundKey(state,stateToBit(state,returnGF(2).在這里,我們就要正式地引入域的概3.3.F+,·?a,b∈F,a+b∈F,a·b∈?a,b,c∈F,(a+b)+c=a+(b+c),(a·b)·c=a·(b·?a,b∈F,a+b=b+a,a·b=b·?a,b,c∈F,a·(b+c)=a·b+a·?a∈F,s.t.?b∈F,a+b=b+a=a?a∈Fs.t?b∈F且b?=0a·b=b·a=a?a∈F,??a∈F,s.t.a+(?a)=(?a)+a=?a∈F且a?=0?a?1∈Fs.ta·a?1=a?1·a=F+,·FnFGF(n).AES中,我們主GF(28).pn,GF(pn)F

aixi|ai∈GF

GF(28).GF(2)·F 如果定義其元素加法為:?p1=aixi∈Fp2=bixi∈Fp1+p2 (ai+bi) aibiGF(2)2加法,或者說是異或。因此,FG上8m(x)=x8+x4+x3+x+ Gp1p2∈G,q∈G,r∈G,p1=q⊙p2⊕r,rp2,p1modp2= F上的乘法為:?p1=aixi∈Fp2=bixi∈Fp1·p2=(p1⊙p2)modm 可以證明,F+,·GFFxp∈F,xtime(p)=x· GF(28GF(2)GF(28)的加法與乘GF(28AESGF(2)GF(28上的多項式為系數屬于GF(28且次數小于4

aixi|ai∈

GF(28)x4+1?.p1?p2=(p1·p2)mod(x4+ ·GF(28) p1aixip2bixi∑∑p1·p2 i=0=a0b0+(a0b1+a1b0)x+(a0b2+a1b1+a2b0)x2+(a0b3+a1b2+a2b1+a3b0)+(a1b3+a2b2+a3b1)x4+(a2b3+a3b2)x5+tijp1·p2xi的系數中,bj前面的系數(t00=a0t10=a1,p1?p2

tijbj

(x4+

tijbj

xi

j

)(xj

(x4+ ximod(x41αijxjp1?p2=cixi

cixi

tijbj

xi

((

()()

tijbj

xi

αkl)

tij

ci=j=0(tij+k=4tkjαki) 注意到這個式子中,tij,tkj,αki都與p2無關,因此可以提前算出來。從而,我們可以得3.1.p1=a0+a1xa2x2+a3x3p2=b0+b1xb2x2+b3x3,p1?p2=c0+c1x+c2x2+c3x3,c0 a1b0

b2GF(283.2.GF(28a3x3a2x2a1xa0x41GF(28

AESAES1284Nb=4列的狀態陣828256種字節。所以,我們GF(28)中的元素。GF(280GF(2)(y0y1y0y2

10001111x011100011 11100011x2

10 111100

+

1111100 0111110 00111110x6000001111

GF(28).GF(28)上的多項式。接著,記 c(x)= x3+ x2+ x (03)16(01)16(02)16168GF(28)c(x)GF(28)x4b0 02030101a0 0102

b2

01010203a2GF(28

030101 d(x)=(0B)16x3+(0D)16x2+(09)16x+ d(x)GF(28)x41?來輸出即可。類a0

b2密鑰編排算法中用到了輪常數Rcon對于Rcon的第i個元素的形式為((rci)160000rci=2· ·G

溫馨提示

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

評論

0/150

提交評論