版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
THEBASISOFCOMPUTERNETWORKSECURITY第5章數(shù)據(jù)加密與認(rèn)證技術(shù)計(jì)算機(jī)網(wǎng)絡(luò)安全基礎(chǔ)1第5章數(shù)據(jù)加密與認(rèn)證技術(shù)數(shù)據(jù)加密是計(jì)算機(jī)安全的重要部分??诹罴用苁欠乐刮募械拿艽a被人偷看。文件加密主要應(yīng)用于因特網(wǎng)上的文件傳輸,防止文件被看到或劫持。電子郵件給人們提供了一種快捷便宜的通信方式,但電子郵件是不安全的,很容易被別人偷看或偽造。為了保證電子郵件的安全,人們采用了數(shù)字簽名這樣的加密技術(shù),并提供了基于加密的身份認(rèn)證技術(shù),這樣就可以保證發(fā)信人就是信上聲稱的人。數(shù)據(jù)加密也使電子商務(wù)成為現(xiàn)實(shí)。2第5章數(shù)據(jù)加密與認(rèn)證技術(shù)●數(shù)據(jù)加密概述●傳統(tǒng)密碼技術(shù)●對(duì)稱密鑰密碼技術(shù)●公鑰密碼體制●數(shù)字簽名技術(shù)●驗(yàn)證技術(shù)●加密軟件PGP3(第5章)5.1數(shù)據(jù)加密概述45.1數(shù)據(jù)加密概述51.加密的歷史數(shù)據(jù)加密起源于公元前2000年左右。埃及人是最先使用特別的象形文字作為信息編碼的人。隨著時(shí)間推移,巴比倫、美索不達(dá)米亞和希臘都開(kāi)始使用一些方法來(lái)保護(hù)他們的書(shū)面信息。對(duì)信息進(jìn)行編碼曾被JuliasCaesar(凱撒大帝)使用,也曾用于歷次戰(zhàn)爭(zhēng)中,包括美國(guó)獨(dú)立戰(zhàn)爭(zhēng)、美國(guó)內(nèi)戰(zhàn)和兩次世界大戰(zhàn)。最廣為人知的編碼機(jī)器是GermanEnigma,在第二次世界大戰(zhàn)中德國(guó)人利用它創(chuàng)建了加密信息。此后,由于AlanTuring和Ultra計(jì)劃以及其他人的努力,終于對(duì)德國(guó)人的密碼進(jìn)行了破解。當(dāng)初,計(jì)算機(jī)的研究就是為了破解德國(guó)人的密碼,隨著計(jì)算機(jī)的發(fā)展,運(yùn)算能力的增強(qiáng),過(guò)去的密碼都顯得十分簡(jiǎn)單了。于是人們又不斷地研究出了新的數(shù)據(jù)加密方式,如私有密鑰算法和公共密鑰算法。5.1數(shù)據(jù)加密概述62.密碼學(xué)的發(fā)展按計(jì)算機(jī)密碼學(xué)的發(fā)展歷史來(lái)分,密碼學(xué)的發(fā)展分為兩個(gè)階段:●傳統(tǒng)密碼學(xué)階段。計(jì)算機(jī)出現(xiàn)之前的四千年古埃及就開(kāi)始使用密碼傳遞消息,這是傳統(tǒng)密碼學(xué)階段,基本上靠人工對(duì)消息加密、傳輸和防破譯?!裼?jì)算機(jī)密碼學(xué)階段。又可以細(xì)分為兩個(gè)階段:第一個(gè)階段為計(jì)算機(jī)傳統(tǒng)密碼學(xué)階段。即解密是加密的簡(jiǎn)單逆過(guò)程,兩者所用的密鑰是可以簡(jiǎn)單地互相推導(dǎo)的,因此無(wú)論加密還是解密密鑰都必須嚴(yán)格保密。第二個(gè)階段為計(jì)算機(jī)現(xiàn)代密碼學(xué)階段。包括兩個(gè)方向:一個(gè)是公用密鑰密碼(RSA),一個(gè)是傳統(tǒng)方法的計(jì)算機(jī)密碼體制—數(shù)據(jù)加密標(biāo)準(zhǔn)(DES)。5.1數(shù)據(jù)加密概述73.什么是密碼學(xué)密碼學(xué)包括密碼編碼學(xué)和密碼分析學(xué)。●密碼編碼學(xué)。指為了達(dá)到隱藏消息含義目的,按約定的規(guī)則將表示明文信息的消息變換為秘密信息的科學(xué),其有三個(gè)分支:對(duì)稱密碼學(xué),非對(duì)稱密碼學(xué)和密碼協(xié)議。●密碼分析學(xué)。指的是研究密碼、密文或密碼系統(tǒng),著眼于找到其弱點(diǎn),在不知道密匙和算法的情況下,從密文中得到原文的學(xué)科。密碼分析的方法有很多,包括數(shù)學(xué)分析法,窮舉法、差分分析法等等,其中最有效的攻擊手段是社會(huì)工程學(xué)。數(shù)據(jù)加密8數(shù)據(jù)加密指的是對(duì)明文的信息進(jìn)行處理,形成密文或密碼的代碼形式。該過(guò)程的逆過(guò)程稱為解密,即將該編碼信息轉(zhuǎn)化為其原來(lái)形式的過(guò)程。加密在網(wǎng)絡(luò)上的作用就是防止有價(jià)值的信息在網(wǎng)絡(luò)上被攔截和竊取。一個(gè)簡(jiǎn)單的例子就是密碼的傳輸。身份認(rèn)證是基于加密技術(shù)的,其作用就是用來(lái)確定用戶是否是真實(shí)的。簡(jiǎn)單的例子就是電子郵件,當(dāng)用戶收到一封電子郵件時(shí),郵件上面標(biāo)有發(fā)信人的姓名和信箱地址。很多人可能會(huì)簡(jiǎn)單地認(rèn)為發(fā)信人就是信上說(shuō)明的那個(gè)人,但實(shí)際上偽造一封電子郵件對(duì)于一個(gè)通曉網(wǎng)絡(luò)的人來(lái)說(shuō)是極為容易的事。在這種情況下,用戶需要用電子郵件源身份認(rèn)證技術(shù)來(lái)防止電子郵件偽造。加密密鑰91.對(duì)稱密鑰和非對(duì)稱密鑰有兩類基本的加密技術(shù):對(duì)稱密鑰和非對(duì)稱密鑰。對(duì)稱密鑰又稱為保密密鑰,非對(duì)稱密鑰又稱為公用/私有密鑰?!裨趯?duì)稱密鑰中,加密和解密使用相同的密鑰。這種加密算法的用戶必須讓接收人知道自己所使用的密鑰,這個(gè)密鑰需要雙方共同保密,任何一方的失誤都會(huì)導(dǎo)致機(jī)密的泄露?!裨诜菍?duì)稱密鑰中,它使用相互關(guān)聯(lián)的一對(duì)密鑰,一個(gè)是公開(kāi)的密鑰,任何人都可以知道,另一個(gè)是私有的密鑰,只有擁有該密鑰對(duì)的人知道。如果發(fā)送信息給擁有該密鑰對(duì)的人,就用收信人的公用密鑰對(duì)信件進(jìn)行過(guò)加密,當(dāng)收信人收到信后,就可以用他的私有密鑰進(jìn)行解密。加密密鑰10非對(duì)稱加密方式的好處是:密鑰只有一個(gè)人持有,也就更加容易進(jìn)行保密,因?yàn)椴恍柙诰W(wǎng)絡(luò)上傳送私人密鑰,也就不用擔(dān)心別人在認(rèn)證會(huì)話初期截獲密鑰。公用/私有密鑰技術(shù)具有以下幾個(gè)特點(diǎn):①公用密鑰和私有密鑰有兩個(gè)相互關(guān)聯(lián)的密鑰;②公用密鑰加密的文件只有私有密鑰能解開(kāi);③私有密鑰加密的文件只有公用密鑰能解開(kāi)。加密密鑰112.摘要函數(shù)(MD4和MD5)摘要是一種防止信息被改動(dòng)的方法,其中用到的函數(shù)叫摘要函數(shù)。這些函數(shù)的輸入可以是任意大小的消息,而輸出是一個(gè)固定長(zhǎng)度的摘要。摘要有這樣一個(gè)性質(zhì),如果改變了輸入消息中的任何一點(diǎn),甚至只有一位,輸出的摘要將會(huì)發(fā)生不可預(yù)測(cè)的改變,也就是說(shuō)輸入消息的每一位對(duì)輸出摘要都有影響。MD5是目前流行的摘要函數(shù),MD5以512位分組來(lái)處理輸入的信息,每一個(gè)分組又被劃分為16個(gè)子分組,經(jīng)過(guò)一系列的處理后,算法的輸出由四個(gè)32位分組組成,將這四個(gè)32位分組級(jí)聯(lián)后生成128位散列值。MD5的特點(diǎn)是輸入任意長(zhǎng)度的信息,經(jīng)過(guò)處理,輸出為128位的信息(數(shù)字指紋),不同的輸入得到不同的結(jié)果(唯一性),根據(jù)128位輸出的結(jié)果不可能反推出輸入的信息(不可逆)。MD5算法12MD5算法分為四步:處理原文、設(shè)置初始值、循環(huán)加工、拼接結(jié)果。①處理原文。首先計(jì)算出原文長(zhǎng)度(bit)對(duì)512求余的結(jié)果,如果不等于448,就需要填充原文使得原文對(duì)512求余的結(jié)果等于448。填充的方法是第一位填充1,其余位填充0。填充完后,信息的長(zhǎng)度就是512*N+448。之后,用剩余的位置(512-448=64位)記錄原文的真正長(zhǎng)度,把長(zhǎng)度的二進(jìn)制值補(bǔ)在最后。這樣處理后的信息長(zhǎng)度就是512*(N+1)。②設(shè)置初始值。MD5的哈希結(jié)果長(zhǎng)度為128位,按每32位分成一組共4組。這4組結(jié)果是由4個(gè)初始值A(chǔ)、B、C、D經(jīng)過(guò)不斷演變得到。MD5的A、B、C、D的初始值如下(16進(jìn)制):A=0x01234567B=0x89ABCDEFC=0xFEDCBA98D=0x76543210MD5算法13③循環(huán)加工。A,B,C,D就是哈希值的四個(gè)分組。每一次循環(huán)都會(huì)讓舊的ABCD產(chǎn)生新的ABCD。一共進(jìn)行多少次循環(huán)呢?由處理后的原文長(zhǎng)度決定。假設(shè)處理后的原文長(zhǎng)度是M,主循環(huán)次數(shù)=M/512。每個(gè)主循環(huán)中包含512/32*4=64次子循環(huán)。④拼接結(jié)果。把循環(huán)加工最終產(chǎn)生的A,B,C,D四個(gè)值拼接在一起,轉(zhuǎn)換成字符串即可。綠色F:表示非線性函數(shù)。有四種:F(X,Y,Z)=(X&Y)|((~X)&Z),G(X,Y,Z)=(X&Z)|(Y&(~Z)),H(X,Y,Z)=X^Y^Z,I(X,Y,Z)=Y^(X|(~Z))在主循環(huán)下面64次子循環(huán)中,F(xiàn)、G、H、I交替使用,第一個(gè)16次使用F,第二個(gè)16次使用G,第三個(gè)16次使用H,第四個(gè)16次使用I。紅色“田”字:表示相加。黃色的<<<S:循環(huán)左移S位。Mi:第一步處理后的原文。Ki:常量。在64次子循環(huán)中,每一次用到的常量都是不同的。密鑰的管理和分發(fā)14一般情況下將一個(gè)對(duì)話密鑰用于一條信息或一次對(duì)話中,或者建立一種按時(shí)更換密鑰的機(jī)制以減小密鑰暴露的可能性。假設(shè)在某機(jī)構(gòu)中有100個(gè)人,如果他們?nèi)我鈨扇酥g可以進(jìn)行秘密對(duì)話,如果任何兩個(gè)人之間要不同的密鑰,則總共需要4950個(gè)密鑰,而且每個(gè)人應(yīng)記住99個(gè)密鑰。Kerberos建立了一個(gè)安全的、可信任的密鑰分發(fā)中心(KeyDistributionCenter,KDC),每個(gè)用戶只要知道一個(gè)和KDC進(jìn)行通信的密鑰就可以了,而不需要知道許多不同的密鑰。消息和加密15消息被稱為明文。用某種方法偽裝消息以隱藏它的內(nèi)容的過(guò)程稱為加密(Encryption),被加密的消息稱為密文,而把密文轉(zhuǎn)變?yōu)槊魑牡倪^(guò)程稱為解密(Decryption)。對(duì)消息進(jìn)行加密保密的技術(shù)和科學(xué)叫密碼編碼學(xué),從事此行的人叫密碼編碼者,密碼分析者是從事密碼分析的專業(yè)人員,密碼分析學(xué)就是破譯密文的科學(xué)和技術(shù),即揭穿偽裝。密碼學(xué)作為數(shù)學(xué)的一個(gè)分支,包括密碼編碼學(xué)和密碼分析學(xué)兩部分。消息和加密16加密函數(shù)E作用于明文M得到密文C,可用數(shù)學(xué)公式表示:
E(M)=C相反地,解密函數(shù)D作用于C產(chǎn)生M:D(C)=M先加密后再解密,原始的文明將恢復(fù),故下面的等式必須成立:
D(E(M))=M鑒別、完整性和抗抵賴17除了提供機(jī)密性外,密碼學(xué)通常還有其他的作用。①鑒別。消息的接收者應(yīng)該能夠確認(rèn)消息的來(lái)源,入侵者不可能偽裝成他人。②完整性。消息的接收者應(yīng)該能夠驗(yàn)證在傳送過(guò)程中消息沒(méi)有被修改,入侵者不可能用假消息代替合法消息。③抗抵賴。發(fā)送者事后不可能否認(rèn)他發(fā)送過(guò)的消息。算法和密鑰18密碼算法(Algorithm)也叫密碼(Cipher),是用于加密和解密的數(shù)學(xué)函數(shù)。通常情況下,有兩個(gè)相關(guān)的函數(shù),一個(gè)用作加密,另一個(gè)用作解密。密鑰用K表示。K可以是很多數(shù)值里的任意值。密鑰K的可能值的范圍叫做密鑰空間。加密和解密運(yùn)算都使用這個(gè)密鑰,加/解密函數(shù)現(xiàn)在變成:EK(M)=CDK(C)=M這些函數(shù)具有的特性:DK(EK(M))=M單鑰和雙密鑰加密和解密19對(duì)稱算法20基于密鑰的算法通常有兩類:對(duì)稱算法和非對(duì)稱算法。對(duì)稱算法有時(shí)又叫傳統(tǒng)密碼算法,就是加密密鑰能夠從解密密鑰中推導(dǎo)出來(lái)。在大多數(shù)對(duì)稱算法中,加解密密鑰是相同的。這些算法也叫秘密密鑰算法或單密鑰算法,它要求發(fā)送者和接收者在安全通信之前,商定一個(gè)密鑰。對(duì)稱算法的加密和解密表示為:
EK(M)=CDK(C)=M對(duì)稱算法可分為兩類。一次只對(duì)明文中的單個(gè)位運(yùn)算的算法稱為序列算法或序列密碼。另一類算法是對(duì)明文的一組位進(jìn)行運(yùn)算,這些位組稱為分組,相應(yīng)的算法稱為分組算法或分組密碼。非對(duì)稱算法21非對(duì)稱算法也叫公用密鑰算法(Public-KeyAlgorithm)。加密的密鑰不同于解密的密鑰,而且解密密鑰不能根據(jù)加密密鑰計(jì)算出來(lái)。加密密鑰是公開(kāi)的,任何人都能用加密密鑰加密信息,但只有用相應(yīng)的解密密鑰才能解密信息。加密密鑰叫作公用密鑰,解密密鑰叫作私有密鑰。私有密鑰有時(shí)也叫作秘密密鑰。用公用密鑰K1加密表示為:
EK1(M)=C用私有密鑰
K2解密表示為:
DK2(C)=M有時(shí)消息用私有密鑰加密而用公用密鑰解密,這種方法常用于數(shù)字簽名。
EK1(M)=C
DK2(C)=M密碼分析22密碼分析學(xué)是在不知道密鑰的情況下,恢復(fù)出明文的科學(xué)。成功的密碼分析能恢復(fù)出消息的明文或密鑰。對(duì)密碼進(jìn)行分析的嘗試稱為攻擊。常用的密碼分析攻擊主要有4種:①唯密文攻擊(CipherText-OnlyAttack)。在惟密文攻擊中,密碼分析者知道密碼算法,但僅能根據(jù)截獲的密文進(jìn)行分析,以得出明文或密鑰。由于密碼分析者所能利用的數(shù)據(jù)資源僅為密文,這是對(duì)密碼分析者最不利的情況。密碼分析者的任務(wù)是恢復(fù)盡可能多的明文,或者最好是能推算出加密消息的密鑰來(lái),以便可采用相同的密鑰解出其他被加密的消息。已知:C1=EK(P1),C2=EK(P2),…,Ci=EK(Pi)推導(dǎo)出:P1,P2,…,Pi;密鑰K,或者找出一個(gè)算法從Ci+1=EK(Pi+1)推導(dǎo)出Pi+1。密碼分析23②
已知明文攻擊(Known-PlaintextAttack)。已知明文攻擊是指密碼分析者除了有截獲的密文外,還有一些已知的“明文—密文對(duì)”來(lái)破譯密碼。密碼分析者的任務(wù)目標(biāo)是推出用來(lái)加密的密鑰或某種算法,這種算法可以對(duì)用該密鑰加密的任何新的消息進(jìn)行解密。分析者的任務(wù)就是用加密信息推出用來(lái)加密的密鑰或推導(dǎo)出一個(gè)算法,此算法可以對(duì)用同一密鑰加密的任何新的消息進(jìn)行解密。已知:P1,C1=Ek(P1),P2,C2=Ek(P2),…,Pi,Ci=Ek(Pi)推導(dǎo)出:密鑰K,或從
Ci+1=Ek(Pi+1)推導(dǎo)出
Pi+1的算法。密碼分析24③
選擇明文攻擊(Chosen-PlaintextAttack)。選擇明文攻擊是指密碼分析者不僅可得到一些“明文—密文對(duì)”,還可以選擇被加密的明文,并獲得相應(yīng)的密文。這時(shí)密碼分析者能夠選擇特定的明文數(shù)據(jù)塊去加密,并比較明文和對(duì)應(yīng)的密文,已分析和發(fā)現(xiàn)更多的與密鑰相關(guān)的信息。密碼分析者的任務(wù)目標(biāo)也是推出用來(lái)加密的密鑰或某種算法,該算法可以對(duì)用該密鑰加密的任何新的消息進(jìn)行解密。已知:P1,C1=Ek(P1),P2,C2=Ek(P2),…,Pi,Ci=Ek(Pi),其中P1,P2,…,Pi只可由密碼分析者選擇。推導(dǎo)出:密鑰K,或從
Ci+1=Ek(Pi+1)推導(dǎo)出
Pi+1的算法。密碼分析25④選擇密文攻擊(Chosen-CipherTextAttack)。選擇密文攻擊是指密碼分析者可以選擇一些密文,并得到相應(yīng)的明文。密碼分析者的任務(wù)目標(biāo)是推出密鑰。已知:C1,P1=Dk(C1),C2,P2=Dk(C2),…,Ci,Pi=Dk(Ci),推導(dǎo)出:密鑰
K。這種密碼分析多用于攻擊公鑰密碼體制。算法的安全性26不同的密碼算法具有不同的安全等級(jí)。如果破譯算法的代價(jià)大于加密數(shù)據(jù)的價(jià)值,破譯算法所需的時(shí)間比加密數(shù)據(jù)保密的時(shí)間更長(zhǎng),用單密鑰加密的數(shù)據(jù)量比破譯算法需要的數(shù)據(jù)量少得多,那么這種算法可能是安全的。全部破譯。密碼分析者找出密鑰K,這樣DK(C)=P。全盤(pán)推導(dǎo)。密碼分析者找到一個(gè)代替算法在不知道密鑰K的情況下,等價(jià)于DK(C)=P。局部推導(dǎo)。密碼分析者從截獲的密文中找出明文。信息推導(dǎo)。密碼分析者獲得一些有關(guān)密鑰或明文的信息。這些信息可能是密鑰的幾個(gè)位、有關(guān)明文格式的信息等。(第5章)5.2傳統(tǒng)密碼技術(shù)275.2傳統(tǒng)密碼技術(shù)281.數(shù)據(jù)表示方法數(shù)據(jù)的表示有多種形式,使用最多的是文字,還有圖形、聲音和圖像等。這些信息在計(jì)算機(jī)系統(tǒng)中都是以某種編碼的方式來(lái)存儲(chǔ)的。加密技術(shù),都是以對(duì)這些數(shù)字化信息的加密、解密方法作為研究對(duì)象?,F(xiàn)代密碼學(xué)是在計(jì)算機(jī)科學(xué)和數(shù)學(xué)的基礎(chǔ)上發(fā)展起來(lái)的,所以現(xiàn)代密碼技術(shù)可以應(yīng)用于所有在計(jì)算機(jī)系統(tǒng)中運(yùn)用的數(shù)據(jù)。傳統(tǒng)加密方法的主要應(yīng)用對(duì)象是對(duì)文字信息進(jìn)行加密、解密。文字由字母表中的一個(gè)個(gè)字母組成,字母表可以按照排列順序進(jìn)行一定的編碼,把字母從前到后都用數(shù)字表示如下:字母ABCDEFGHIJKLMN數(shù)字1234567891011121314字母OPQRSTUVWXYZ
數(shù)字151617181920212223242526
5.2傳統(tǒng)密碼技術(shù)29大多數(shù)加密算法都有數(shù)學(xué)屬性,這種表示方法可以對(duì)字母進(jìn)行算術(shù)運(yùn)算,字母的加減法將形成對(duì)應(yīng)的代數(shù)碼。若把字母表看成是循環(huán)的,那么字符的運(yùn)算就可以用求模運(yùn)算來(lái)表示:c=xmodn在標(biāo)準(zhǔn)英語(yǔ)字母表中,n=26。如A+3=D、T-3=Q、X+4=B,算法如下:1+3=4, 4mod26=4, 對(duì)應(yīng)字母為D;20-3=17, 17mod26=17, 對(duì)應(yīng)字母為Q;24+4=28, 28mod26=2, 對(duì)應(yīng)字母為B。替代密碼30替代密碼。是使用替代法進(jìn)行加密所產(chǎn)生的密碼。替代密碼就是明文中每一個(gè)字符被替換成密文中的另外一個(gè)字符。接收者對(duì)密文進(jìn)行逆替換就恢復(fù)出明文來(lái)。替代法加密是用另一個(gè)字母表中的字母替代明文中的字母。在替代法加密體制中,使用了密鑰字母表。它可以由明文字母表構(gòu)成,也可以由多個(gè)字母表構(gòu)成。如果是由一個(gè)字母表構(gòu)成的替代密碼,稱為單表密碼。其替代過(guò)程是在明文和密碼字符之間進(jìn)行一對(duì)一的映射。如果是由多個(gè)字母表構(gòu)成的替代密碼,稱為多表密碼。替代密碼311.單表替代密碼單表替代密碼的一種典型方法是凱撒(Caesar)密碼,又叫循環(huán)移位密碼。它的加密方法就是把明文中所有字母都用它右邊的第k個(gè)字母替代,并認(rèn)為Z后邊又是A。這種映射關(guān)系表示為如下函數(shù):
F(a)=(a+k)modn其中:a
表示明文字母;n
為字符集中字母?jìng)€(gè)數(shù);k
為密鑰。映射表中,明文字母中在字母表中的相應(yīng)位置數(shù)為C,(如A=1,B=2,…)形式如下:設(shè)k=3;對(duì)于明文P=COMPUTESYSTEMS則有:f(C)=(3+3) mod26=6=F f(O)=(15+3)mod26=18=R f(M)=(13+3) mod26=16=P ……f(S)=(19+3) mod26=22=V替代密碼32所以,密文C=Ek(P)=FRPSXRWHUVBVWHPV。事實(shí)上,對(duì)于k=3的凱撒密碼,其字母映射關(guān)系如下: A B C D … X Y Z ↓ ↓ ↓ ↓ ↓ ↓ ↓ D E F G … A B C因此,由密文C恢復(fù)明文P是很容易實(shí)現(xiàn)的。顯然,只要知道密鑰k,就可造出一張字母對(duì)應(yīng)表,于是,加密和解密就都可以用此對(duì)應(yīng)表進(jìn)行。替代密碼332.多表替代密碼周期替代密碼是一種常用的多表替代密碼,又稱為維吉尼亞(Vigenere)密碼。這種替代法是循環(huán)地使用有限個(gè)字母來(lái)實(shí)現(xiàn)替代的一種方法。若明文信息m1m2m3…mn,采用n個(gè)字母(n個(gè)字母為B1,B2,…,Bn)替代法,那么,m1將根據(jù)字母Bn的特征來(lái)替代,mn+1又將根據(jù)B1的特征來(lái)替代,mn+2又將根據(jù)B2的特征來(lái)替代……如此循環(huán)。可見(jiàn)B1,B2,…,Bn就是加密的密鑰。這種加密的加密表是以字母表移位為基礎(chǔ)把26個(gè)英文字母進(jìn)行循環(huán)移位排列在一起的形成26×26的方陣。該方陣被稱為維吉尼亞表。采用的算法為:
f(a)=(a+Bi)modn
(i=(1,2,…,n))維吉尼亞表34
ABCDEFGHIJKLMNOPQRSTUVWXYZAABCDEFGHIJKLMNOPQRSTUVWXYZBBCDEFGHIJKLMNOPQRSTUVWXYZACCDEFGHIJKLMNOPQRSTUVWXYZABDDEFGHIJKLMNOPQRSTUVWXYZABCEEFGHIJKLMNOPQRSTUVWXYZABCDFFGHIJKLMNOPQRSTUVWXYZABCDEGGHIJKLMNOPQRSTUVWXYZABCDEFHHIJKLMNOPQRSTUVWXYZABCDEFGIIJKLMNOPQRSTUVWXYZABCDEFGHJJKLMNOPQRSTUVWXYZABCDEFGHIKKLMNOPQRSTUVWXYZABCDEFGHIJLLMNOPQRSTUVWXYZABCDEFGHIJKMMNOPQRSTUVWXYZABCDEFGHIJKLNNOPQRSTUVWXYZABCDEFGHIJKLMOOPQRSTUVWXYZABCDEFGHIJKLMNPPQRSTUVWXYZABCDEFGHIJKLMNOQQRSTUVWXYZABCDEFGHIJKLMNOPRRSTUVWXYZABCDEFGHIJKLMNOPQSSTUVWXYZABCDEFGHIJKLMNOPQRTTUVWXYZABCDEFGHIJKLMNOPQRSUUVWXYZABCDEFGHIJKLMNOPQRSTVVWXYZABCDEFGHIJKLMNOPQRSTUWWXYZABCDEFGHIJKLMNOPQRSTUVXXYZABCDEFGHIJKLMNOPQRSTUVWYYZABCDEFGHIJKLMNOPQRSTUVWXZZABCDEFGHIJKLMNOPQRSTUVWXY替代密碼35例如,以YOUR為密鑰,加密明碼文HOWAREYOU。 P=HOWAREYOU K=YOURYOURY Ek(P)=FCQRPSSFS加密過(guò)程就是以明文字母選擇列,以密鑰字母選擇行,兩者的交點(diǎn)就是加密生成的密文字母。解密時(shí),以密碼字母選擇行,從中找到密文字母,密文字母所在列的列名即為明文字母。換位密碼36換位密碼是采用移位法進(jìn)行加密的。它把明文中的字母重新排列,本身不變,但位置變了。例如:把明文中字母的順序倒過(guò)來(lái)寫(xiě),然后以固定長(zhǎng)度的字母組發(fā)送或記錄。明文:computersystems 密文:smetsysretupmoc列換位法。將明文字符分割成為5個(gè)一列的分組并按一組后面跟著另一組的形式排好。如明文是:WHATYOUCANLEARNFROMTHISBOOK,分組排列為:WHATYOUCANLEARNFROMTHISBOOKXXX密文則以下面的形式讀出:WOLFHOHUERIKACAOSXTARMBXYNNTOX這里的密鑰是數(shù)字5。換位密碼37矩陣換位法。這種加密方式是把明文中的字母按給定的順序安排在一個(gè)矩陣中,然后用另一種順序選出矩陣的字母來(lái)產(chǎn)生密文。如將明文ENGINEERING按行排在3×4矩陣中,給定一個(gè)置換。1234ENGINEERING
現(xiàn)在根據(jù)給定的置換,按第2列,第4列,第1列,第3列的次序排列,就得到密文:NIEGERNENIG。1234NIEGERNEN
IG在這個(gè)加密方案中,密鑰就是矩陣的行數(shù)m和列數(shù)n,即m×n=3×4,以及給定的置換矩陣,也就是k=(m×n,f)簡(jiǎn)單異或38異或(XOR)在C語(yǔ)言中是“^”操作,或者用數(shù)學(xué)表達(dá)式⊕表示。它是對(duì)位的標(biāo)準(zhǔn)操作,有以下一些運(yùn)算:0⊕0=0 0⊕1=11⊕0=1 1⊕1=0a⊕a=0 a⊕b⊕b=a下面給出一個(gè)對(duì)稱算法。明文用一個(gè)關(guān)鍵字作異或運(yùn)算以產(chǎn)生密文。因?yàn)橛猛恢等ギ惢騼纱尉突謴?fù)出原來(lái)的值,所以加密和解密都嚴(yán)格采用同一程序。/*Usage:crypto_keyinput_fileoutput_file*/#include"stdio.h"voidmain(intargc,char*argv[]){FILE*fi,*fo;char*cp;intc;if((cp=argv[1])&&*cp!='\0'){if((fi=fopen(argv[2],"rb"))!=NULL){if((fo=fopen(argv[3],"wb"))!=NULL){while((c=getc(fi))!=EOF){if(!*cp)cp=argv[1];c^=*(cp++);putc(c,fo);}fclose(fo);}fclose(fi);}}}一次密碼39一次密碼是一個(gè)大的不重復(fù)的真隨機(jī)密鑰字母集,這個(gè)密鑰字母集被寫(xiě)在幾張紙上,并被粘成一個(gè)密碼本。它最初的形式是用于電傳打字機(jī)。發(fā)送者用密碼本中的每一密鑰字母準(zhǔn)確地加密一個(gè)明文字符。加密是明文字符和一次密碼本密鑰字符的模26加法。每個(gè)密鑰僅對(duì)一個(gè)消息使用一次。發(fā)送者對(duì)所發(fā)送的消息加密,然后銷毀密碼本中用過(guò)的一頁(yè)或磁帶部分。接收者有一個(gè)同樣的密碼本,并依次使用密碼本上的每個(gè)密鑰去解密密文的每個(gè)字符。接收者在解密消息后銷毀密碼本中用過(guò)的一頁(yè)或磁帶部分。新的消息則用密碼本中新的密鑰加密。如果消息是:ONETIMEPAD而取自密碼本的密鑰序列是:TBFRGFARFM那么密文就是:IPKLPSFHGQ因?yàn)镺+Tmode26=IN+Bmode26=PE+Fmode26=K(第5章)5.3對(duì)稱密鑰密碼技術(shù)405.3對(duì)稱密鑰密碼技術(shù)411.Feistel密碼結(jié)構(gòu)加密算法的輸入是長(zhǎng)度為2W位的明文塊和密鑰K0把明文塊分成兩部分L0和R0。數(shù)據(jù)的這兩個(gè)部分經(jīng)過(guò)n次循環(huán)處理,然后結(jié)合在一起產(chǎn)生密文塊。每個(gè)循環(huán)i都以上一次循環(huán)產(chǎn)生的結(jié)果Li-1和Ri-1和總密鑰K產(chǎn)生的子密鑰Ki作為輸入。子密鑰Ki是總密鑰K經(jīng)過(guò)一定的算法產(chǎn)生的。所有的循環(huán)都具有相同的結(jié)構(gòu)。每次循環(huán)都對(duì)左半部分?jǐn)?shù)據(jù)執(zhí)行取代,具體做法是對(duì)右半部分的數(shù)據(jù)實(shí)施循環(huán)函數(shù)F,然后將函數(shù)的輸出結(jié)果與數(shù)據(jù)的左半部分進(jìn)行異或(XOR)操作。對(duì)于每次循環(huán)來(lái)說(shuō),循環(huán)函數(shù)都具有通用的結(jié)構(gòu),只是使用不同的循環(huán)子密鑰Ki為參數(shù)。在執(zhí)行了取代之后,就已經(jīng)執(zhí)行了包含兩部分?jǐn)?shù)據(jù)交換信息的置換了。Feistel密碼結(jié)構(gòu)42(1)塊大小。在所有其他參數(shù)都相等的情況下,塊越大就意味著具有更好的安全性,但是會(huì)降低加密/解密的速度。塊大小為64位就是一個(gè)很好的折衷,而且在塊密碼設(shè)計(jì)中幾乎是通用的。(2)密鑰大小。密鑰越大就意味著具有更好的安全性,但是會(huì)降低加密/解密的速度。在現(xiàn)在的加密算法中最通用的密鑰長(zhǎng)度是128位。(3)循環(huán)次數(shù)。Feistel密碼的本質(zhì)就是單個(gè)循環(huán)不能提供足夠的安全性,而多個(gè)循環(huán)能夠提供更多的安全性。循環(huán)次數(shù)的典型大小是16次循環(huán)。(4)子密鑰產(chǎn)生算法。該算法的復(fù)雜性越大,那么密碼分析就會(huì)越困難。(5)循環(huán)函數(shù)。循環(huán)函數(shù)越復(fù)雜,就意味著能夠更好地抵抗密碼分析。數(shù)據(jù)加密標(biāo)準(zhǔn)43數(shù)據(jù)加密標(biāo)準(zhǔn)(DataEncryptionStandard,DES)是美國(guó)國(guó)家標(biāo)準(zhǔn)局開(kāi)始研究除國(guó)防部以外的其他部門(mén)的計(jì)算機(jī)系統(tǒng)的數(shù)據(jù)加密標(biāo)準(zhǔn),1972年和1974年,美國(guó)國(guó)家標(biāo)準(zhǔn)局(NBS)先后兩次向公眾發(fā)出了征求加密算法的公告。對(duì)加密算法要求要達(dá)到以下幾點(diǎn)。①必須提供高度的安全性。②具有相當(dāng)高的復(fù)雜性,使得破譯的開(kāi)銷超過(guò)可能獲得的利益,同時(shí)又便于理解和掌握。③安全性應(yīng)不依賴于算法的保密,其加密的安全性僅以加密密鑰的保密為基礎(chǔ)。④必須適用于不同的用戶和不同的場(chǎng)合。⑤實(shí)現(xiàn)算法的電子器件必須很經(jīng)濟(jì)、運(yùn)行有效。⑥必須能夠驗(yàn)證,允許出口。數(shù)據(jù)加密標(biāo)準(zhǔn)44DES是一個(gè)分組加密算法,它以64位為分組對(duì)數(shù)據(jù)加密。64位一組的明文從算法的一端輸入,64位的密文從另一端輸出。DES是一個(gè)對(duì)稱算法:加密和解密用的是同一算法(除密鑰編排不同以外)。密鑰的長(zhǎng)度為56位(密鑰通常表示為64位的數(shù),但每個(gè)第8位都用作奇偶校驗(yàn))。密鑰可以是任意的56位的數(shù),且可在任意的時(shí)候改變。其中極少量的數(shù)被認(rèn)為是弱密鑰,但能容易地避開(kāi)它們。所有的保密性依賴于密鑰。簡(jiǎn)單地說(shuō),算法只不過(guò)是加密的兩個(gè)基本技術(shù)—混亂和擴(kuò)散的組合。DES基本組建分組是這些技術(shù)的一個(gè)組合(先代替后置換),它基于密鑰作用于明文,這是眾所周知的輪(Round)。DES有16輪,這意味著要在明文分組上16次實(shí)施相同的組合技術(shù)。數(shù)據(jù)加密標(biāo)準(zhǔn)45DES使用56位密鑰對(duì)64位數(shù)據(jù)塊進(jìn)行加密,需要進(jìn)行16輪編碼。在每輪編碼時(shí),一個(gè)48位的“每輪”密鑰值由56位的完整密鑰得出來(lái)。在每輪編碼過(guò)程中,64位數(shù)據(jù)和每輪密鑰值被輸入到一個(gè)稱為“S”的盒中,由一個(gè)壓碼函數(shù)對(duì)數(shù)位進(jìn)行編碼。另外,在每輪編碼開(kāi)始、過(guò)后以及每輪之間,64位數(shù)碼被以一種特別的方式置換(數(shù)位順序被打亂)。在每一步處理中都要從56位的主密鑰中得出一個(gè)唯一的輪次密鑰。最后,輸入的64位原始數(shù)據(jù)被轉(zhuǎn)換成64位看起來(lái)被完全打亂了的輸出數(shù)據(jù)。數(shù)據(jù)加密標(biāo)準(zhǔn)46DES對(duì)64位的明文分組進(jìn)行操作。通過(guò)一個(gè)初始置換,將明文分組成為左半部分和右半部分,各32位長(zhǎng)。然后進(jìn)行16輪完全相同的運(yùn)算,這些運(yùn)算被稱為函數(shù)f,在運(yùn)算過(guò)程中數(shù)據(jù)與密鑰結(jié)合。經(jīng)過(guò)16輪后,左、右半部分合在一起,經(jīng)過(guò)一個(gè)末置換(初始置換的逆置換),完成了該算法。在每一輪中,密鑰位移位,然后從密鑰的56位中選出48位。通過(guò)一個(gè)擴(kuò)展置換將數(shù)據(jù)的右半部分?jǐn)U展成48位,并通過(guò)一個(gè)異或操作與48位密鑰結(jié)合,通過(guò)8個(gè)S盒將這48位替代成新的32位數(shù)據(jù),再將其置換一次。這四步運(yùn)算構(gòu)成了函數(shù)f。然后,通過(guò)另一個(gè)異或運(yùn)算,函數(shù)f的輸出與左半部分結(jié)合,其結(jié)果即成為新的右半部分,原來(lái)的右半部分成為新的左半部分。將該操作重復(fù)16次,便實(shí)現(xiàn)了DES的16輪運(yùn)算。數(shù)據(jù)加密標(biāo)準(zhǔn)47假設(shè)
Bi是第
i次迭代的結(jié)果,Li和
Ri是Bi的左半部分和右半部分,Ki是第
i
輪的48位密鑰,且f是實(shí)現(xiàn)代替、置換及密鑰異或等運(yùn)算的函數(shù),那么每一輪就是:Li=Ri-1Ri=Li-1⊕f(Ri-1,Ki)一輪DES初始置換48初始置換。在第一輪運(yùn)算之前執(zhí)行,對(duì)輸入分組實(shí)施如下表所示的變換。此表應(yīng)從左向右、從上向下讀。例如,初始置換把明文的原第58位換到現(xiàn)在的第1位的位置,把原第50位換到現(xiàn)在第2位的位置,把原第42位換到現(xiàn)在第3位的位置等。58504234261810260524436282012462544638302214664564840322416857494133251791595143352719113615345372921135635547393123157密鑰置換49密鑰置換。一開(kāi)始,由于不考慮每個(gè)字節(jié)的第8位,DES的密鑰由64位減至56位,如下表所示。每個(gè)字節(jié)的第8位可作為奇偶校驗(yàn)位以確保密鑰不發(fā)生錯(cuò)誤。在DES的每一輪中,從56位密鑰產(chǎn)生出不同的48位子密鑰(SubKey),這些子密鑰Ki由下面的方式確定。57494133251791585042342618102595143352719113605244366355473931231576254463830221466153453729211352820124每輪移動(dòng)的位數(shù)50首先,56位密鑰被分成兩部分,每部分28位。然后,根據(jù)輪數(shù),這兩部分分別循環(huán)左移1位或2位。下表給出了每輪移動(dòng)的位數(shù)。輪12345678910111213141516位數(shù)1122222212222221壓縮置換51移動(dòng)后,就從56位中選出48位。因?yàn)檫@個(gè)運(yùn)算不僅置換了每位的順序,同時(shí)也選擇子密鑰,因而被稱作壓縮置換。這個(gè)運(yùn)算提供了一組48位的集。下表定義了壓縮置換(也稱為置換選擇)。例如,處在第33位位置的那一位在輸出時(shí)移到了第35位的位置,而處在第18位位置的那一位被略去了。1417112415328156211023191242681672720132415231374755304051453348444939563453464250362932擴(kuò)展置換52這個(gè)運(yùn)算將數(shù)據(jù)的右半部分Ri
從32位擴(kuò)展到了48位。由于這個(gè)運(yùn)算改變了位的次序,重復(fù)了某些位,故被稱為擴(kuò)展置換。下圖顯示了擴(kuò)展置換,有時(shí)它也叫作E
盒。擴(kuò)展置換53對(duì)每個(gè)4位輸入分組,第1和第4位分別表示輸出分組中的兩位,而第2和第3位分別表示輸出分組中的一位。下表給出了哪一輸出位對(duì)應(yīng)于哪一輸入位。例如,處于輸入分組中第3位位置的位移到了輸出分組中第4位的位置,而處于輸入分組中第21位位置的位移到了輸出分組中第30和第32位的位置。3212345456789891011121312131415161716171819202120212223242524252627282928293031321S盒代替54壓縮后的密鑰與擴(kuò)展分組異或以后,將48位的結(jié)果送入,進(jìn)行代替運(yùn)算。替代由8個(gè)代替盒,或S盒完成。每一個(gè)S盒都有6位輸入,4位輸出,且這8個(gè)S盒是不同的(DES的這8個(gè)S盒占的存儲(chǔ)空間為256字節(jié))。48位的輸入被分為8個(gè)6位的分組,每一分組對(duì)應(yīng)一個(gè)S盒代替操作:分組1由S-盒1操作,分組2由S-盒2操作,依次類推。S盒代替55每個(gè)S盒是一個(gè)4行、16列的表。盒中的每一項(xiàng)都是一個(gè)4位的數(shù)。S盒的6個(gè)位輸入確定了其對(duì)應(yīng)的輸出在哪一行哪一列。表列出了所有8個(gè)S盒。S-盒11441312151183106125907015741421311061211953841148136211151297310501512824917511314100613S-盒2151814611349721312051031347152814120110691150147111041315812693215138101315421167120514956S-盒3100914631551131271142813709346102851412115113649815301112125101471101306987415143115212S-盒4713143069101285111241513811565034721211014910690121171315131452843150610113894511127214S-盒5212417101168531513014914112124713150151039864211110137815912563014181271142136150910453S-盒61211015926801334147511101542712956113140113891415528123704101131164321295151011141760813S-盒74112141508133129751061130117491101435122158614111312371410156805926111381410795015142312S-盒81328461511110931450127115138103741256110149271141912142061013153582114741081315129035611S盒代替57輸入位以一種非常特殊的方式確定了S盒中的項(xiàng)。假定將S盒的6位輸入標(biāo)記為b1、b2、b3、b4、b5、b6。則b1和b6組合構(gòu)成了一個(gè)2位的數(shù),從0到3,它對(duì)應(yīng)著表中的一行。從b2到b5構(gòu)成了一個(gè)4位的數(shù),從0到15,對(duì)應(yīng)著表中的一列。例如,假設(shè)第6個(gè)S盒的輸入(即異或函數(shù)的第31位到36位)為110011。第1位和最后一位組合形成了11,它對(duì)應(yīng)著第6個(gè)S盒的第三行。中間的4位組合在一起形成了1001,它對(duì)應(yīng)著同一個(gè)S盒的第9列。S-盒6的第三行第9列處的數(shù)是14(注意:行、列的記數(shù)均從0開(kāi)始而不是從1開(kāi)始),則值1110就代替了110011。這個(gè)代替過(guò)程的結(jié)果是8個(gè)4位的分組,它們重新合在一起形成了一個(gè)32位的分組。這個(gè)分組將進(jìn)行下一步:P盒置換。P盒置換58S盒代替運(yùn)算后的32位輸出依照P盒進(jìn)行置換。該置換把每輸入位映射到輸出位,任意一位不能被映射兩次,也不能被略去,這個(gè)置換叫作直接置換。下表給出了每位移到的位置。例如,第21位移到了第4位處,同時(shí)第4位移到了第31位處。最后,將P盒置換的結(jié)果與最初的64位分組的左半部分異或,然后左、右半部分交換,接著開(kāi)始另一輪。1672021291228171152326518311028241432273919133062211425末置換59末置換是初始置換的逆過(guò)程,下表列出了該置換。應(yīng)注意DES在最后一輪后,左半部分和右半部分并未交換,而是將R16與L16并在一起形成一個(gè)分組作為末置換的輸入。到此,不再進(jìn)行別的事。其實(shí)交換左、右兩半部分并循環(huán)移動(dòng),仍將獲得完全相同的結(jié)果,但這樣做,就使該算法既能用作加密,又能用作解密。40848165624643239747155523633138646145422623037545135321612936444125220602835343115119592734242105018582633141949175725DES解密60在經(jīng)過(guò)所有的代替、置換、異或和循環(huán)移動(dòng)之后,完成了DES的全過(guò)程。DES使用相同的函數(shù)來(lái)加密或解密,二者唯一不同之處是密鑰的次序相反。這就是說(shuō),如果各輪的加密密鑰分別是K1,K2,K3,…,K16,那么解密密鑰就是K16,K15,K14,…,K1。為各輪產(chǎn)生密鑰的算法也是循環(huán)的。密鑰向右移動(dòng),每次移動(dòng)的個(gè)數(shù)為0,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1。三重DES61三重DES方法需要執(zhí)行3次常規(guī)的DES加密步驟,但最常用的三重DES算法中僅僅用兩個(gè)56位DES密鑰。設(shè)這兩個(gè)密鑰為K1和K2,其算法的步驟如下。①用密鑰K1進(jìn)行DES加密。②用步驟①的結(jié)果使用密鑰K2進(jìn)行DES解密。③用步驟②的結(jié)果使用密鑰K1進(jìn)行DES加密。這個(gè)過(guò)程稱為EDE,因?yàn)樗怯杉用堋饷堋用埽‥ncryptDecryptEncrypt)步驟組成的。在EDE中,中間步驟是解密,所以,可以使K1=K2來(lái)用三重DES方法執(zhí)行常規(guī)的DES加密。DES舉例62已知明文m=computer,密鑰k=program,用ASCII表示為:m=0110001101101111011011010111000001110101011101000110010101110010k=01110000011100100110111101100111011100100110000101101101因?yàn)閗只有56位,必須插入第8,16,24,32,40,48,56,64位奇偶校驗(yàn)位,合成64位。而這8位對(duì)加密過(guò)程沒(méi)有影響。m經(jīng)過(guò)IP置換后得到:L0=11111111
10111000
01110110
01010111R0=00000000
11111111
00000110
10000011DES舉例63密鑰
k
通過(guò)PC-1得到:C0=11101100
10011001
00011011
1011D0=10110100
01011000
10001110
0110再各自左移一位,通過(guò)PC-2得到48位:k1=001111011000111111001101001101110011111100000110R0(32
位)經(jīng)
E
作用膨脹為
48
位:100000000001011111111110100000001101010000000110再和
k1
進(jìn)行異或運(yùn)算得到(分成
8
組):101111011001100000110011101101111110101101001110DES舉例64通過(guò)S盒后輸出位32比特有:01110110001101000010011010100001S盒的輸出又經(jīng)過(guò)P置換得到:01000100001000001001111010011111這時(shí)f(R0,K1)R1=L0f(R0,K1)L1=R0所以,第一趟的結(jié)果是:0000000011111111000001101000001110111011100110001110100011001000如此,迭代16次以后,得到密文:0101100010101000010000011011100001101001111111101010111000110011明文或密鑰每改變一位,都會(huì)對(duì)結(jié)果密文產(chǎn)生劇烈的影響。任意改變一位,其結(jié)果有將近一半的位發(fā)生了變化。國(guó)際數(shù)據(jù)加密算法IDEA65國(guó)際數(shù)據(jù)加密算法IDEA是在DES算法的基礎(chǔ)上發(fā)展出來(lái)的,類似于三重DES,發(fā)展IDEA也是因?yàn)楦械紻ES具有密鑰太短等缺點(diǎn)。IDEA使用128位密鑰進(jìn)行操作。IDEA的加密過(guò)程包括以下兩部分:①輸入的64位明文組分成4個(gè)16位子分組:P1、P2、P3和P4。4個(gè)子分組作為算法第1輪的輸入,總共進(jìn)行8輪的迭代運(yùn)算,產(chǎn)生64位的密文輸出。②輸入的128位會(huì)話密鑰產(chǎn)生8輪迭代所需的52個(gè)子密鑰(8輪運(yùn)算中每輪需要6個(gè),還有4個(gè)用于輸出變換)。子密鑰產(chǎn)生:輸入的128位密鑰分成8個(gè)16位子密鑰(作為第一輪運(yùn)算的6個(gè)和第二輪運(yùn)算的前兩個(gè)密鑰);將128位密鑰循環(huán)左移25位后再得8個(gè)子密鑰(前面4個(gè)用于第二輪,后面4個(gè)用于第3輪)。這一過(guò)程一直重復(fù),直至產(chǎn)生所有密鑰。國(guó)際數(shù)據(jù)加密算法IDEA6664位輸入明文塊分成4個(gè)部分(各16塊)P1~P4。P1~P4是算法的第一輪輸入,共8輪。密鑰為128位,每一輪從原先的密鑰產(chǎn)生6個(gè)子密鑰,各位16位。這個(gè)6個(gè)子密鑰作用于4個(gè)輸入塊P1~P4。第一輪,有6個(gè)密鑰K1~K6;第二輪,有6個(gè)密鑰K7~K12;最后,第8輪,有6個(gè)密鑰K43~K48。最后一步是輸出變換,只用4個(gè)子密鑰K49~K52。產(chǎn)生的最后輸出是輸出變換的輸出,為4個(gè)密文塊C1~C4(各為16位),從而構(gòu)成64位密文塊。Blowfish算法67Blowfish算法是由BruceSchneier設(shè)計(jì)的,是一個(gè)64位分組及可變密鑰長(zhǎng)度的分組密碼算法。Blowfish算法是一種對(duì)稱的分組加密算法,算法核心在于子密鑰生成,它將變長(zhǎng)密鑰擴(kuò)展成總長(zhǎng)4168Byte的子密鑰數(shù)組。算法中使用了大量的子密鑰,而子密鑰又依賴于用戶密鑰,實(shí)際加/解密過(guò)程中使用的是更新后的子密鑰數(shù)組,子密鑰即P數(shù)組和S盒。Blowfish算法有一個(gè)核心加密函數(shù):BF_En(),該函數(shù)的輸入是64位明文信息,經(jīng)過(guò)運(yùn)算,以64位密文信息的形式輸出。Blowfish算法68數(shù)據(jù)加密總共進(jìn)行16輪的選代,具體描述為(將明文X分成32位的兩半部分:XL,XR)
fori=1to16 { XL=XLXORPi XR=F(XL)XORXR ifi≠16 {
交換XL和XR } } XR=XRXORP17 XL=XLXORP18
合并XL和XRP陣為18個(gè)32位子密鑰,,P1,P2,…,P18。解密過(guò)程和加密過(guò)程完全一樣,只是密鑰P1,P2,…,P18以逆序使用。Blowfish算法69把XL分成4個(gè)8位子分組:a,b,c和d,分別送入4個(gè)S盒,每個(gè)S盒為8位輸入,32位輸出。4個(gè)S盒的輸出經(jīng)過(guò)一定的運(yùn)算組合出32位輸出,運(yùn)算為: F(XL)=((S1,a+S2,bmod232)XORS3,c)+S4,d
mod232其中,Si,x表示子分組x(x=a、b、c或d)經(jīng)過(guò)Si(i=1、2、3或4)盒的輸出。其中,每個(gè)S盒有256個(gè)單元,每個(gè)單元32位: S1,0,S1,1,…,S1,255 S2,0,S2,1,…,S2,255 S3,0,S3,l,…,S3,255 S4,0,S4,1,…,S4,255Blowfish算法70密鑰擴(kuò)展要將密鑰轉(zhuǎn)變成18個(gè)32位的子密鑰,計(jì)算方法如下。①初始化P陣,然后用固定的字符串(π的十六進(jìn)制表示)依次初始化4個(gè)S盒,例如:P1=0X243f6a88,P2=0X85a308d3,P3=0X13198a2e,P4=0X03707344②將密鑰按32位分段,依次與P1,P2,…,P18進(jìn)行異或(密鑰長(zhǎng)度最長(zhǎng)為448位,因此最多可完成與P14異或)。循環(huán)使用密鑰直到整個(gè)P陣全部與密鑰相異或。③利用Blowfish算法和第①步、第②步得到的子密鑰對(duì)全0字符串進(jìn)行加密。④用第③步的輸出代替P1、P2。⑤利用Blowfish算法和修正過(guò)的子密鑰對(duì)第③步的輸出進(jìn)行加密。⑥用第⑤步的結(jié)果代替P3、P4。⑦重復(fù)上述操作,直到P陣的所有元素被更新。然后,依次以Blowfish算法輸出更新4個(gè)S盒??偣残枰?21次迭代來(lái)產(chǎn)生所需的全部子密鑰。GOST算法71GOST是前蘇聯(lián)設(shè)計(jì)的分組密碼算法,為前蘇聯(lián)國(guó)家標(biāo)準(zhǔn)局所采用,標(biāo)準(zhǔn)號(hào)為:28147-89。GOST的消息分組為64位,密鑰長(zhǎng)度為256位,此外還有一些附加密鑰,采用32輪迭代。加密時(shí),首先將輸入的64位明文分成左、右兩半部分L、R。設(shè)第i輪的子密鑰為K,則: Li=Ri-1 Ri=Li-1
F(Ri-1,Ki)GOST算法72第i輪變換。首先,右半部分與第i輪的子密鑰進(jìn)行模232加,其結(jié)果分成8個(gè)4位分組,每個(gè)分組輸入不同的S盒。S盒將輸入的數(shù)字(0~15)進(jìn)行置換。然后將8個(gè)S盒的輸出重組成32位字;接下來(lái)將32位結(jié)果循環(huán)左移11位后與上一輪的左半部分異或得到本輪運(yùn)算結(jié)果的右半部分Ri,而原右半部分作為本輪運(yùn)算結(jié)果的左半部分Li。至此,一輪運(yùn)算結(jié)束,開(kāi)始下一輪運(yùn)算。GOST算法73GOST的子密鑰產(chǎn)生很簡(jiǎn)單,256位密鑰被劃分為8個(gè)32位分組:K1,K2,…,K8。各輪按下表采用不同的子密鑰。解密時(shí),子密鑰采用相反的順序。輪次12345678910111213141516子密鑰1234567812345678輪次17181920212223242526272829303132子密鑰1234567887654321PKZIP算法74PKZIP加密算法是一個(gè)一次加密一個(gè)字節(jié)的、密鑰長(zhǎng)度可變的序列密碼算法,它被嵌入在PKZIP數(shù)據(jù)壓縮程序中。該算法使用了3個(gè)32位變量的key0、key1、key2和一個(gè)從key2派生出來(lái)的8位變量key3。由密鑰初始化key0、key1和key2,并在加密過(guò)程中由明文更新這3個(gè)變量。PKZIP序列密碼的主函數(shù)為updata_keys()。該函數(shù)根據(jù)輸入字節(jié)(一般為明文),更新3個(gè)32位的變量并獲得key3。update_keys(Chat){unsignedshorttemp;key0i+1=CRC32(key0i,char);key1i+l=[(key1i+LSB(key0i+1))*134775813+1]mod232;key2i+1=CRC32(key2i,MSB(key1i+l));temp=key2i+1|3;key3i+1=LSB((temp*(temp⊕1)>>8);}RC5算法75RC5分組密碼算法是1994由麻薩諸塞技術(shù)研究所的RonaldL.Rivest教授發(fā)明的,并由RSA實(shí)驗(yàn)室分析。它是參數(shù)可變的分組密碼算法,三個(gè)可變的參數(shù)是:分組大小、密鑰大小和加密輪數(shù)。RC5算法使用了異或、加、循環(huán)這3種基本運(yùn)算及其逆運(yùn)算。RC5算法包括三部分:密鑰擴(kuò)展、加密算法和解密算法。RC5算法的安全性依賴于循環(huán)運(yùn)算與不同運(yùn)算的混合使用。RC5算法761.加密算法加密使用2r+2個(gè)密鑰相關(guān)的32位字,并在加密之前先將明文劃分為兩個(gè)32位字(分別記為A和B)。A=A+S0B=B+S1Fori=1torA=((A⊕B)<<<B)+S2iB=((B⊕A)<<<A)+S2i+1輸出在寄存器A和B中。RC5算法772.解密算法解密是加密的逆運(yùn)算。首先將明文劃分為兩個(gè)32位字(分別記為A和B)。Fori=rto1B=((B-S2i+1)>>>A)⊕AA=((A-Si)>>>B)⊕BB=B-S1A=A-S0對(duì)于循環(huán)運(yùn)算來(lái)說(shuō),x<<<y表示x循環(huán)左移,移位次數(shù)由y的lg2w個(gè)低位用來(lái)確定;x>>>y表示x循環(huán)右移;⊕表示異或運(yùn)算。RC5算法783.密鑰擴(kuò)展通過(guò)密鑰擴(kuò)展把用戶提供的會(huì)話密鑰K擴(kuò)展成密鑰陣S,它由K所決定的t=2(r+1)個(gè)隨機(jī)二進(jìn)制字構(gòu)成。密鑰擴(kuò)展算法利用了兩個(gè)幻常數(shù),幻常數(shù)定義:P=0xb7e15163;Q=0x9e3779b9首先,將密鑰字節(jié)復(fù)制到32位字的數(shù)組L中,然后,利用線性同余發(fā)生器(模232)初始化數(shù)組S;S0=PFori=1to2(r+1)-1Si=(Si-1+Q)mod232最后,將數(shù)組L與數(shù)組S進(jìn)行合并。i=j=0A=B=0n=max(2(r+1),c)做3n次A=Si=(Si+A+B)<<<3B=Lj=(Lj+A+B)<<<(A+B)i=(i+1)mod2(r+1)j=(j+1)modc(第5章)5.4公鑰密碼體制795.4公鑰密碼體制80公鑰密碼體制(PublicKeyInfrastructure,PKI)是1976年由斯坦福大學(xué)的WhitfieldDaffier和MartinHellmann提出的。公鑰密碼系統(tǒng)的原理主要是基于陷門(mén)單向函數(shù)的概念,公鑰密碼系統(tǒng)可用于通信保密、數(shù)字簽名和密鑰交換這3個(gè)方面。本節(jié)首先討論公鑰加密原理,接著討論Diffie-Hellman密鑰交換算法和RSA密碼系統(tǒng)。公鑰加密原理81公用密鑰密碼通過(guò)使用兩個(gè)數(shù)字互補(bǔ)密鑰。這兩個(gè)密鑰,一個(gè)是盡人皆知的,而另一個(gè)只有擁有者才知道,盡人皆知的密鑰叫做公用密鑰,而只有密鑰擁有者才知道的密鑰叫做私有密鑰,或稱專用密鑰。這兩種密鑰合在一起稱為密鑰對(duì)。公鑰密碼系統(tǒng)可用于以下三個(gè)方面:(1)通信保密。此時(shí)將公鑰作為加密密鑰,私鑰作為解密密鑰,通信雙方不需要交換密鑰就可以實(shí)現(xiàn)保密通信。這時(shí),通過(guò)公鑰或密文分析出明文或私鑰是不可行的。(2)數(shù)字簽名。將私鑰作為加密密鑰,公鑰作為解密密鑰,可實(shí)現(xiàn)由一個(gè)用戶對(duì)數(shù)據(jù)加密而使多個(gè)用戶解讀。(3)密鑰交換。通信雙方交換會(huì)話密鑰,以加密通信雙方后續(xù)連接所傳輸?shù)男畔ⅰC看芜壿嬤B接使用一把新的會(huì)話密鑰,用完就丟棄。Diffie-Hellman密鑰交換算法82定義素?cái)?shù)p的本原根(PrimitiveRoot)為一種能生成1~p?1所有數(shù)的一個(gè)數(shù),即如果a為p的本原根,則:
amodp,a2modp,…,ap?1modp兩兩互不相同,構(gòu)成1~p?1的全體數(shù)的一個(gè)排列(例如:p=11,a=2)。對(duì)于任意數(shù)b及素?cái)?shù)p的本原根a,可以找到一個(gè)唯一的指數(shù)i,滿足:
b=aimodp,0≤i≤p?1稱指數(shù)i為以a為底模p的b的離散對(duì)數(shù)。Diffie-Hellman密鑰交換算法83如果A和B想在不安全的信道上交換密鑰,他們可以采用如下步驟。①A
和
B
協(xié)商一個(gè)大素?cái)?shù)
p
及
p
的本原根
a,a
和
p
可以公開(kāi)。②A秘密產(chǎn)生一個(gè)隨機(jī)數(shù)x,計(jì)算
X
=
axmodp,然后把
X
發(fā)送給
B。③B秘密產(chǎn)生一個(gè)隨機(jī)數(shù)y,計(jì)算
Y=aymodp,然后把
Y
發(fā)送給
A。④A計(jì)算k=Yxmodp。⑤B計(jì)算k'=Xymodp。k和k'是恒等的,因?yàn)椋簁=Y(jié)xmodp
=(ay)xmodp
=(ax)ymodp
=Xymodp
=k'Diffie-Hellman密鑰交換算法84竊聽(tīng)者只能得到a、p、X
和
Y
的值,除非能計(jì)算離散對(duì)數(shù),恢復(fù)出
x
和
y,否則就無(wú)法得到
k,因此,k
為
A
和
B
獨(dú)立計(jì)算的秘密密鑰。下面用一個(gè)例子來(lái)說(shuō)明上述過(guò)程。A
和
B
需進(jìn)行密鑰交換,步驟如下。①二者協(xié)商后決定采用素?cái)?shù)p=353及其本原根a=3。②A
選擇隨機(jī)數(shù)
x=97,計(jì)算
X=397mod353=40,并發(fā)送給
B。③B
選擇隨機(jī)數(shù)
y=233,計(jì)算
Y=3233mod353=248,并發(fā)送給
A。④A計(jì)算
k=Yxmodp=24897mod353=160。⑤B
計(jì)算
k'=Xymodp=40233mod353=160。K和
k’
即為秘密密鑰。中間人的攻擊85Diffie-Hellman密鑰交換容易遭受中間人的攻擊。①A發(fā)送公開(kāi)值(a
和
p)給B,攻擊者
C
截獲這些值并把自己產(chǎn)生的公開(kāi)值發(fā)送給
B。②B
發(fā)送公開(kāi)值給
A,C
截獲它然后把自己的公開(kāi)值發(fā)送給
A。③A
和
C
計(jì)算出二人之間的共享密鑰
kA。④B
和
C
計(jì)算出另外一對(duì)共享密鑰
kB。這時(shí),B用密鑰
kB給
A發(fā)送消息,C截獲消息后用
kB解密就可讀取消息;然后將獲得的明文消息用
kA加密(加密前可能會(huì)對(duì)消息作某些修改)后發(fā)送給A。對(duì)
A發(fā)送給
B的消息,C同樣可以讀取和修改。中間人的攻擊86造成中間人攻擊的原因是Diffie-Hellman密鑰交換不認(rèn)證對(duì)方。利用數(shù)字簽名技術(shù)就可以挫敗中間人的攻擊。三方或多方Diffie-Hellman87Diffie-Hellman密鑰交換協(xié)議很容易擴(kuò)展到三方或多方的密鑰交換。下例中,A、B和C一起產(chǎn)生秘密密鑰。①A選取一個(gè)大隨機(jī)整數(shù)x,計(jì)算X=axmodp,然后把
X
發(fā)送給
B;②B選取一個(gè)大隨機(jī)整數(shù)y,計(jì)算Y=aymodp,然后把
Y
發(fā)送給
C;③C選取一個(gè)大隨機(jī)整數(shù)z,計(jì)算Z=azmodp,然后把
Z
發(fā)送給
A;④A計(jì)算
Z
'=Z
xmodp
并發(fā)送
Z’
給
B;⑤B計(jì)算
X
'=X
ymodp
并發(fā)送
X’
給
C;⑥C計(jì)算
Y
'=Y
zmodp
并發(fā)送
Y’
給
A;⑦A計(jì)算
k=Y
'xmodp;⑧B計(jì)算
k=Z
'ymodp;⑨C計(jì)算
k=X
'zmodp。共享秘密密鑰
k
等于
axyzmodp。這個(gè)協(xié)議很容易擴(kuò)展到更多方。RSA密碼體制88RSA密碼體制是由美國(guó)麻省理工學(xué)院(MIT)的研究小組提出的,該體制的名稱是用了3位作者(Rivest,Shamir,Adleman)英文名字的第一個(gè)字母拼合而成。該體制的理論基礎(chǔ)是:要求得到兩個(gè)大素?cái)?shù)的乘積在計(jì)算機(jī)上很容易實(shí)現(xiàn),但要分解兩個(gè)大素?cái)?shù)的乘積在計(jì)算機(jī)上幾乎不可能實(shí)現(xiàn),即為單向函數(shù)。RSA
的加密方程為:
C=memodn這里,密文
C
是信息
m
自乘加密指數(shù)冪
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報(bào)參考:精神生活共同富裕視域下紅色文化旅游深度融合的響應(yīng)機(jī)制與路徑研究
- 課題申報(bào)參考:教育治理現(xiàn)代化背景下現(xiàn)代產(chǎn)業(yè)學(xué)院內(nèi)部治理結(jié)構(gòu)的優(yōu)化研究
- 2025年c語(yǔ)言實(shí)習(xí)心得體會(huì)模版(4篇)
- 2025版房地產(chǎn)尾款支付及產(chǎn)權(quán)過(guò)戶協(xié)議3篇
- 二零二五年車(chē)輛抵押維修保養(yǎng)合同3篇
- 二零二五版貿(mào)促會(huì)棉花期貨交易專區(qū)棉花現(xiàn)貨買(mǎi)賣(mài)合同3篇
- 二零二五年度企業(yè)法律風(fēng)險(xiǎn)防控培訓(xùn)合同3篇
- 主體架構(gòu)工程分包合同(2024年度)一
- 專屬分店管理承包協(xié)議模板版A版
- 二零二五年度多人合伙經(jīng)營(yíng)酒吧合作協(xié)議范本3篇
- 《健康體檢知識(shí)》課件
- 生產(chǎn)計(jì)劃主管述職報(bào)告
- 名表買(mǎi)賣(mài)合同協(xié)議書(shū)
- JTG-T-F20-2015公路路面基層施工技術(shù)細(xì)則
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)附答案
- 中西方校服文化差異研究
- 《子宮肉瘤》課件
- 《準(zhǔn)媽媽衣食住行》課件
- 給男友的道歉信10000字(十二篇)
- 客人在酒店受傷免責(zé)承諾書(shū)范本
- 練字本方格模板
評(píng)論
0/150
提交評(píng)論