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