IT技術(shu)互(hu)動交流平台

山西体彩网官网

作(zuo)者︰佚名  發布日期︰2020-02-18 12:13:17

《圖解密碼(ma)技術(shu)》的na)勘甓琳咧饕 ㄒyi)下人群︰
對(dui)密碼(ma)相關知識感興趣(qu)的人
希(xi)望理解公(gong)鑰密碼(ma)、數(shu)字簽名等密碼(ma)技術(shu)原理的人(我就(jiu)屬于此類)
對(dui)信息(xi)安全感興趣(qu)的人
本書的結構(gou)分為三部分︰
密碼(ma)︰hao)諶 饕  dui)密碼(ma)技術(shu)整體性的講解,以(yi)及歷史密碼(ma)、對(dui)稱密碼(ma)、公(gong)鑰密碼(ma)等保證機密性的密碼(ma)技術(shu)。
認證︰hao)諶蒞 ?蟶san)列(lie)函(han)數(shu)、消息(xi)認證碼(ma)、數(shu)字簽名、證書等密碼(ma)技術(shu)。
密鑰、隨機數(shu)和應用技術(shu)︰hao)諶蒞 茉俊?婊shu)相關的知識,以(yi)及PGP、SSL/TLS等應用技術(shu)。
本篇文章是(shi)關于第一(yi)部分的筆(bi)記(ji)。
密碼(ma)技術(shu)
密碼(ma)技術(shu)的na)康暮 魅罰 jiu)是(shi)為了解決信息(xi)安全問題。信息(xi)安全可分為四類特性︰
機密性︰he) 朔樂剮畔xi)被竊听,對(dui)應的密碼(ma)技術(shu)有對(dui)稱密碼(ma)和公(gong)鑰密碼(ma)。
完整性︰he) 朔樂剮畔xi)被篡(cuan)改,對(dui)應的密碼(ma)技術(shu)有單向散(san)列(lie)函(han)數(shu)、消息(xi)認證碼(ma)、數(shu)字簽名。
認證︰he) 朔樂構(gou)?髡呶弊zhuang)成真正的發送者,對(dui)應的密碼(ma)技術(shu)有消息(xi)認證碼(ma)和數(shu)字簽名。
不(bu)可否(fu)認性︰he) 朔樂狗?駝呤潞hou)否(fu)認自(zi)己沒有做過,對(dui)應的密碼(ma)技術(shu)為數(shu)字簽名。
信息(xi)安全和密碼(ma)技術(shu)之間(jian)的關系可以(yi)用下圖來(lai)表示(shi)︰

接下來(lai)就(jiu)簡單了解下這些密碼(ma)技術(shu)︰
對(dui)稱密碼(ma)︰也稱為共享密鑰密碼(ma)、私鑰密碼(ma)等,是(shi)指(zhi)在加密和解密時bi)褂猛 yi)密鑰的方式。
公(gong)鑰密碼(ma)︰也稱為非(fei)對(dui)稱密碼(ma),是(shi)指(zhi)在加密和解密時bi)褂貌bu)同密鑰的方式。對(dui)稱密碼(ma)和公(gong)鑰密碼(ma)可以(yi)保證數(shu)據的機密性。
單向散(san)列(lie)函(han)數(shu)︰MD5、SHA-1,就(jiu)是(shi)單向散(san)列(lie)函(han)數(shu)的例子,使(shi)用單向散(san)列(lie)函(han)數(shu)可以(yi)計算出(chu)散(san)列(lie)值dan) san)列(lie)值也稱為哈希(xi)值、密碼(ma)校(xiao)驗和、指(zhi)紋、消息(xi)摘要。使(shi)用單向散(san)列(lie)函(han)數(shu)可以(yi)保證數(shu)據的完整性。
消息(xi)認證碼(ma)︰消息(xi)認證碼(ma)是(shi)一(yi)種確認完整性並進行認證的技術(shu),英文名稱為message authentication code,簡稱為MAC。
數(shu)字簽名︰數(shu)字簽名相當于現實世(shi)界中的蓋(gai)章、簽字的功能(neng),使(shi)用數(shu)字簽名可以(yi)識別篡(cuan)改和偽裝(zhuang),還(huai)可以(yi)防止否(fu)認。
偽隨機數(shu)生成器(qi)︰he)彼婊shu)生成器(qi)並不(bu)直接解決信息(xi)安全問題,但(dan)它承擔(dan)了密鑰生成的重要職(zhi)責。而密鑰的重要性就(jiu)不(bu)用多說了。
一(yi)次性密碼(ma)本
曾經以(yi)為,理論上應該沒有任何(he)密碼(ma)是(shi)無法破譯的。只要通(tong)過暴力破解法,無論任何(he)密文總有一(yi)天都能(neng)夠被破譯。如(ru)今才知道,特例是(shi)存在的。這個特例就(jiu)是(shi)一(yi)次性密碼(ma)本。即使(shi)用暴力破解法,就(jiu)算破解到世(shi)界末日,也破譯不(bu)了一(yi)次性密碼(ma)本。
一(yi)次性密碼(ma)本其(qi)實非(fei)常簡單,它的原理就(jiu)是(shi)︰將明文與(yu)一(yi)串(chuan)隨機的比特序列(lie)進行XOR運算,即異或(huo)運算。隨機的比特序列(lie)也稱為密鑰,密鑰的長度需(xu)與(yu)明文等長。而解密時,則將密文與(yu)密鑰再進行一(yi)次XOR運算,就(jiu)可以(yi)得(de)到明文了。
舉例,現在要對(dui)midnight這個字符串(chuan)進行加密,對(dui)其(qi)進行ASCII編(bian)碼(ma)後(hou)得(de)到一(yi)串(chuan)比特序號︰

以(yi)上為64比特,然後(hou),隨機生成一(yi)個同樣64比特長的密鑰︰

接著,將明文和密鑰進行XOR運算︰

這樣,密文就(jiu)產生了。而解密則是(shi)反向運算,即將密文與(yu)密鑰進行XOR運算︰

一(yi)次性密碼(ma)本,就(jiu)是(shi)這麼簡單。那麼,為什(shi)麼它不(bu)可破譯呢?用暴力破解,嘗試所有可能(neng)的密鑰組合xi) 苣neng)得(de)到midnight啊。問題就(jiu)在于,即使(shi)解密出(chu)了midnight這個字符串(chuan),也無法判斷它是(shi)否(fu)是(shi)正確的明文。因為,所有64比特的排列(lie)組合都會出(chu)現,那麼,解密出(chu)來(lai)的,除了midnight,還(huai)會有onenight、lastnight,以(yi)及aaaaaaaa、abcdefgh、ZZZZZZZZ等各種字符串(chuan),根本無法判斷哪(na)個才是(shi)正確的明文。
雖(sui)然一(yi)次性密碼(ma)本無法被破譯,但(dan)它並不(bu)實用。最大的缺點就(jiu)在于每一(yi)次通(tong)信都需(xu)要使(shi)用不(bu)同的密鑰,所以(yi)密鑰就(jiu)無法重用了,“一(yi)次性”也正是(shi)由此而來(lai)。而且,每kan)蚊茉康納啥急匭朧shi)無重現性的真正隨機數(shu),而不(bu)是(shi)偽隨機數(shu)。其(qi)他的,密鑰的配送、保存、同步也都是(shi)比較麻煩。所以(yi),能(neng)夠使(shi)用一(yi)次性密碼(ma)本的,只有機密性重與(yu)一(yi)切xiao) 銥梢yi)花費大量財力和人力來(lai)生成並配送密鑰的場合。據說dan) 蠊 jian)的熱線就(jiu)用了一(yi)次性密碼(ma)本,密鑰應該是(shi)通(tong)過特工直接送到對(dui)方手上的。
對(dui)稱密碼(ma)
對(dui)稱密碼(ma)使(shi)用相同的密鑰進行加密和解密,作(zuo)為標準(zhun)的對(dui)稱密碼(ma)主要有DES、三重DES和AES,它們都屬于分組密碼(ma),即以(yi)分組為單位進行xie) 淼拿藶ma)算法。DES和三重DES的分組長度都是(shi)64比特,而AES的分組長度可以(yi)為128比特、192比特和256比特中的一(yi)種。那麼,如(ru)果要加密的明文比較長,就(jiu)需(xu)要對(dui)密碼(ma)算法進行迭(die)代(dai),而迭(die)代(dai)的方法就(jiu)稱為分組密碼(ma)的na)J健>嚀逵心na)些模式,後(hou)面再說。
DES
DES(Data Encryption Standard)是(shi)一(yi)種將64比特的明文加密成64比特的密文的對(dui)稱密碼(ma)算法,它的密鑰長度是(shi)56比特,即7個字節。DES的結構(gou)采用的是(shi)Feistel網(wang)絡(luo)。Feistel網(wang)絡(luo)中xiao) 用艿母韝霾街璩莆 round),整個加密過程就(jiu)是(shi)進行若干次輪的循環。下圖是(shi)Feistel網(wang)絡(luo)中一(yi)輪的計算流程。DES是(shi)一(yi)種16輪循環的Feistel網(wang)絡(luo)。


一(yi)輪的具體計算步驟如(ru)下︰
將輸入的數(shu)據等分為左右兩部分;
將輸入的右側直接發送到輸出(chu)的右側;
將輸入的右側發送到輪函(han)數(shu);
輪函(han)數(shu)根據右側數(shu)據和子密鑰,計算出(chu)一(yi)串(chuan)看(kan)上去是(shi)隨機的比特序列(lie);
將上一(yi)步得(de)到的比特序列(lie)與(yu)左側數(shu)據進行XOR運算,並將結果作(zuo)為加密後(hou)的左側。
其(qi)中xiao) 用茉恐zhi)的是(shi)本輪加密使(shi)用的密鑰。每一(yi)輪的子密鑰都是(shi)不(bu)同的。輪函(han)數(shu)的作(zuo)用則是(shi)根據“右側”和子密鑰生成對(dui)“左側”進行加密的比特序列(lie),它是(shi)密碼(ma)系統的核(he)心。
但(dan)是(shi),這樣一(yi)來(lai)“右側”根據沒有被加密,因此需(xu)要用不(bu)同子密鑰對(dui)一(yi)輪的處理重復若干次,並在沒兩輪之間(jian)將左側和右側的數(shu)據對(dui)調。下圖展示(shi)了一(yi)個3輪的Feistel網(wang)絡(luo)︰

那麼,Feistel如(ru)何(he)解密呢?很簡單,只要按照(zhao)相同的順序來(lai)使(shi)用子密鑰就(jiu)可以(yi)完成解密了。即將上圖中的子密鑰1換(huan)成了子密鑰3,而子密鑰3則換(huan)成子密鑰1,輸入的為密文,輸出(chu)的則為明文了。
無論是(shi)任何(he)輪數(shu)、任何(he)輪函(han)數(shu),Feistel網(wang)絡(luo)都可以(yi)用相同的結構(gou)實現加密和解密,且加密的結果必定能(neng)夠正確解密。因為Feistel網(wang)絡(luo)具有如(ru)此方便(bian)的特性,因此,被許多分組密碼(ma)算法使(shi)用,包括5個AES最終候選算法中的其(qi)中3個算法︰MARS、RC6、Twofish。
三重DES
現在DES已(yi)經可以(yi)在短時間(jian)內被暴力破解,因此,其(qi)強度大不(bu)如(ru)前了。為了增(zeng)強DES的強度,因此出(chu)現了三重DES(triple-DES),將DES重復3次所得(de)到的一(yi)種密碼(ma)算法,通(tong)常縮寫(xie)為3DES,其(qi)機制如(ru)下圖所示(shi)︰

明文經過三次DES處理才能(neng)變成最後(hou)的密文,而由于DES的密鑰長度為56比特,因此三重DES的密鑰長度則為56*3=128比特。另外,從圖中也可以(yi)發現,三重DES並不(bu)是(shi)進行3次DES加密,而是(shi)加密->解密->加密的過程。這是(shi)為了向下兼容,即使(shi)用DES加密的密文,也可以(yi)通(tong)過三重DES進行解密。
三重DES的解密過程和加密相反,是(shi)以(yi)密鑰3、密鑰2、密鑰1的順序執行解密->加密->解密的操作(zuo)。即將上圖從明文到密文的箭頭反過來(lai)就(jiu)是(shi)解密的流程了。
AES
AES(Advanced Encryption Standard)是(shi)取代(dai)其(qi)前任標準(zhun)(DES)而成為新(xin)標準(zhun)的一(yi)種對(dui)稱密碼(ma)算法。AES最終候選算法名單中xiao) 芄燦種算法,分為為︰MARS、RC6、Rijndael、Serpent、Twofish。但(dan)最終被選定為AES的是(shi)Rijndael算法。
Rijndael使(shi)用的並不(bu)是(shi)Feistel網(wang)絡(luo),而是(shi)SPN結構(gou)。Rijndael加密中的一(yi)輪如(ru)下圖所示(shi),其(qi)分組為128比特,即16字節,加密過程經過4個步驟︰SubBytes、ShiftRows、MixColumns、AddRoundKey。

SubBytes就(jiu)是(shi)根據一(yi)張替換(huan)表(S-Box),將輸入中每個字節的值替換(huan)成另一(yi)個字節的值。ShiftRows即將SubBytes的輸出(chu)以(yi)字節為單位進行xie)da)亂(luan)出(chu)路,當然,這種打(da)亂(luan)處理也是(shi)有規律的。MixColumns即對(dui)一(yi)個4字節的值進行比特運算,將其(qi)變成另外一(yi)個4字節的值。AddRoundKey就(jiu)是(shi)將MixColumns的輸出(chu)與(yu)輪密鑰進行XOR處理。至此,一(yi)輪就(jiu)結束了。實dao)噬希(xi) ijndael中需(xu)要重復進行10~14輪計算。
而下圖則是(shi)一(yi)輪解密的流程圖,基本也是(shi)反向操作(zuo),加密時的SubBytes、ShiftRows、MixColumns,解密時分別為反向運算的InvSubBytes、InvShiftRows、InvMixColumns。這是(shi)因為Rijndael不(bu)像(xiang)Feistel網(wang)絡(luo)一(yi)樣能(neng)夠用同一(yi)種結構(gou)實現加密和解密。

對(dui)于三種對(dui)稱密碼(ma),DES因為已(yi)經很容易(yi)被暴力破解,因此不(bu)建議(yi)再使(shi)用;三重DES目前還(huai)被銀行等機構(gou)使(shi)用,但(dan)其(qi)處理速度不(bu)高,而且yi)詘踩 苑矯嬉倉鸞jian)顯現出(chu)了一(yi)些問題;AES作(zuo)為最新(xin)標準(zhun),安全、快速,而且可以(yi)在各種平台上工作(zuo),可以(yi)算是(shi)目前最佳的選擇。另外,其(qi)他AES最終候選算法也可以(yi)作(zuo)為AES的備份(fen)。和Rijndael一(yi)樣,這些密碼(ma)算法也都經過了嚴格的測試,且沒有發現任何(he)弱點。
分組模式
DES、AES都屬于分組密碼(ma),它們只能(neng)加密固定長度的銘文。如(ru)果需(xu)要加密任意長度的明文,就(jiu)需(xu)要對(dui)分組密碼(ma)進行迭(die)代(dai),而迭(die)代(dai)方法就(jiu)稱為分組密碼(ma)的“模式”。分組密碼(ma)有很多種模式,主要有xiao)CB、CBC、CFB、OFB、CTR。如(ru)果模式選擇不(bu)恰當,就(jiu)無法保證機密性。
ECB模式
ECB全稱為Electronic CodeBook,電子密碼(ma)本模式,是(shi)最簡單的一(yi)種模式,它直接將明文分zhi)畛啥喔齜腫椴 鷥黽用埽 ru)下圖,其(qi)中xiao) 用芎徒餉蓯shi)指(zhi)用分組密碼(ma)算法加密和解密,其(qi)中也省略了密鑰的描述(shu)。

當最後(hou)一(yi)個明文分組的na)諶菪∮詵腫槌?仁保 xu)要用一(yi)些特定的數(shu)據進行填(tian)充。
這種模式的優(you)點就(jiu)是(shi)簡單、快速,加密和解密都支持並行計算。而缺點也比較明顯,因為每個明文分組都各自(zi)獨立(li)地進行加密和解密,如(ru)果明文中xie)嬖詼喔魷嗤 拿魑姆腫椋 蛘廡┐腫樽鈧棧岊蛔 huan)為相同的密文分組。這樣一(yi)來(lai),只要觀(guan)察(cha)一(yi)下密文,就(jiu)可以(yi)知道明文中xie)嬖讜zen)樣的重復組合xi)  梢yi)以(yi)此為線索(suo)來(lai)破譯密碼(ma)。另外,攻擊者可以(yi)通(tong)過改變密文分組的順序,或(huo)刪除密文分組,或(huo)替換(huan)掉(diao)密文分組,就(jiu)可以(yi)達(da)到對(dui)明文操縱的na)康模 ?xu)破譯密碼(ma)。
CBC模式
CBC全稱為Cipher Block Channing,密文分組鏈接模式,是(shi)將前一(yi)個密文分組與(yu)當前明文分組的na)諶蓴旌掀鵠lai)進行加密的。在CBC模式中xiao) shou)先將明文分組與(yu)前一(yi)個密文分組進行XOR運算,然後(hou)再進行加密。加密第一(yi)個明文分組時,由于不(bu)存在“前一(yi)個密文分組”,因此需(xu)要事先準(zhun)備一(yi)個長度為一(yi)個分組的比特序列(lie)來(lai)代(dai)替“前一(yi)個密文分組”,這個比特序列(lie)稱為初始化(hua)向量(initialization vector),通(tong)常縮寫(xie)為IV。一(yi)hua) lai)說dan) 看(kan)渭用蓯倍薊崴婊yi)個不(bu)同的比特序列(lie)來(lai)作(zuo)為初始化(hua)向量。CBC模式的加解密流程如(ru)下圖︰

 


CBC模式避免(mian)了ECB模式的弱點,明文的重復排列(lie)不(bu)huan)岱從ying)在密文中。這是(shi)推薦使(shi)用的一(yi)種模式。
CFB模式
CFB全稱為Cipher FeedBack,密文反饋模式,前一(yi)個密文分組會被送回到密碼(ma)算法的輸入端,如(ru)下圖︰

CFB模式中xiao) 擅藶ma)算法所生成的比特序列(lie)稱為密鑰流(key stream)。需(xu)要注(zhu)意的是(shi),CFB模式解密時,密碼(ma)算法執行的是(shi)加密操作(zuo),因為密鑰流是(shi)通(tong)過加密操作(zuo)來(lai)生成的。
CFB模式無法抵御重放攻擊。因此,一(yi)hua)悴bu)建議(yi)使(shi)用了,推薦用CTR模式代(dai)替。
OFB模式
OFB全稱為Output-FeedBack,輸出(chu)反饋模式,密碼(ma)算法的輸出(chu)會反饋到密碼(ma)算法的輸入中xiao) ru)下圖︰

OFB模式有個缺陷(xian),如(ru)果對(dui)密鑰流的一(yi)個分組進行加密後(hou)其(qi)結果踫巧(qiao)和加密前是(shi)相同的,那麼這一(yi)分組之後(hou)的密鑰流就(jiu)會變成同一(yi)值的不(bu)斷反復chu)R虼耍 yi)hua)悴bu)建議(yi)使(shi)用了,推薦用CTR模式代(dai)替。
CTR模式
CTR全稱為CountTeR,計數(shu)器(qi)模式,是(shi)一(yi)種通(tong)過逐次累加的計數(shu)器(qi)進行加密來(lai)生成密鑰流的流密碼(ma),如(ru)下圖︰

CTR模式中xiao) 扛齜腫槎dui)應一(yi)個逐次累加的計數(shu)器(qi),並通(tong)過對(dui)計數(shu)器(qi)進行加密來(lai)生成密鑰流。計數(shu)器(qi)分為兩部分,前部分為nonce,這和初始化(hua)向量一(yi)樣,也是(shi)一(yi)個隨機比特序列(lie);後(hou)部分為分組序號。
從圖中還(huai)可以(yi)知道,CTR模式對(dui)每個分組的處理是(shi)相對(dui)獨立(li)的,這就(jiu)意味著加密和解密都能(neng)夠實現並行計算。
CTR模式在錯誤和機密性方面都具有不(bu)錯的性質,也沒有上面提到的CFB和OFB的弱點,因此,現在都推薦使(shi)用CTR了。
關于初始化(hua)向量問題
前面講到的幾種模式中xiao)BC、CFB、OFB都用到了初始化(hua)向量IV,而CTR則使(shi)用了計數(shu)器(qi),計數(shu)器(qi)的nonce部分和初始化(hua)向量IV是(shi)一(yi)樣的,只是(shi)叫法不(bu)同而已(yi)。關于初始化(hua)向量IV,是(shi)一(yi)個隨機比特序列(lie),為了提高安全性,建議(yi)每kan)渭用蓯倍際shi)用不(bu)同的值dan) 庋幕hua),即使(shi)有兩條相同的明文信息(xi),加密後(hou)的密文也是(shi)不(bu)同的。但(dan)是(shi),每一(yi)次發送端使(shi)用IV對(dui)明文加密後(hou),接收端也需(xu)要使(shi)用同樣的IV才能(neng)夠解密,那麼,發送端和接收端如(ru)何(he)同步這個IV呢?關于這個問題,書中沒有提到。于是(shi),只好自(zi)己尋找解決方案。
最簡單的方式可能(neng)就(jiu)是(shi),發送端每kan)畏?托畔xi)時,將IV和加密後(hou)的密文一(yi)起發送給接收端。接收端收到信息(xi)後(hou),就(jiu)可以(yi)將收到的IV用于解密收到的密文了。而這種方式最明顯的缺陷(xian)就(jiu)是(shi)IV直接暴露給攻擊者了,攻擊者就(jiu)可以(yi)利用IV發起攻擊,比如(ru)使(shi)用CBC模式時,攻擊者將IV進行比特反轉,就(jiu)可達(da)到操縱明文的na)康摹9?髡囈V中的任意比特進行反轉(1變0,0變1),則解密後(hou)的明文分組中相應的比特也bu)岊環醋 br />為了避免(mian)將IV直接暴露,那將IV進行加密後(hou)再發送呢?因為IV的長度和一(yi)個分組的長度是(shi)等長的,這就(jiu)不(bu)需(xu)要考慮分組迭(die)代(dai)的問題,即不(bu)需(xu)要考慮使(shi)用什(shi)麼模式了,直接用密碼(ma)算法進行加密即可。加密後(hou),攻擊者再想通(tong)過比特反轉IV來(lai)操縱明文就(jiu)困難多了。
密鑰配送問題
對(dui)稱密碼(ma)中xiao) 捎詡用芎徒餉芏際shi)用同一(yi)個密鑰,因此就(jiu)必須向接收zhao) 淥兔茉浚 飧鑫侍餼jiu)稱為密鑰配送問題。而解決密鑰配送問題的方法有幾種︰
通(tong)過事先共享密鑰來(lai)解決
通(tong)過密鑰分配中心來(lai)解決
通(tong)過Diffie-Hellman密鑰交huan)煥lai)解決
通(tong)過公(gong)鑰密碼(ma)來(lai)解決
通(tong)過事先共享密鑰來(lai)解決
事先用安全的方式將密鑰交給對(dui)方,就(jiu)稱為密鑰的事先共享。這是(shi)密鑰配送問題最簡單的一(yi)種解決方法,但(dan)有其(qi)局(ju)限性。公(gong)司內部kao)  撓τ貌pin),客戶端和服務(wu)端都是(shi)自(zi)己開發的,事先共享密鑰就(jiu)很簡單,服務(wu)端人員生成密鑰後(hou)直接給到客戶端的開發人員就(jiu)可以(yi)了。但(dan)這種情況(kuang)又會帶來(lai)其(qi)他問題,比如(ru)密鑰在客戶端如(ru)何(he)才能(neng)安全的保存。一(yi)hua)悖 茉慷際shi)通(tong)過硬(ying)編(bian)碼(ma)或(huo)存為文件的形式保存在客戶端的,那麼客戶端應用一(yi)旦被反編(bian)譯,就(jiu)很容易(yi)竊取到密鑰了。
而如(ru)果是(shi)開放性平台,像(xiang)微博開放平台、微信開放平台等,要做到事先共享密鑰就(jiu)很有難度了。開發者在開放平台注(zhu)冊的應用,其(qi)密鑰都是(shi)通(tong)過平台的管(guan)理端給到開發者的,也就(jiu)是(shi)通(tong)過了網(wang)絡(luo),那就(jiu)存在被竊听的風(feng)險了。
通(tong)過密鑰分配中心來(lai)解決
當bi)褂妹茉糠峙渲行氖保 xu)要通(tong)信的雙方可以(yi)事先在密鑰分配中心注(zhu)冊,然後(hou)密鑰分配中心給每個注(zhu)冊方發送一(yi)個密鑰,不(bu)同注(zhu)冊方的密鑰是(shi)不(bu)同的。那麼,當某個發送端需(xu)要向某個接收端發送消息(xi)時,通(tong)信流程如(ru)下︰
發送端向密鑰分配中心發起希(xi)望與(yu)接收端通(tong)信的請求;
密鑰分配中心隨機生成一(yi)個會話(hua)密鑰,該會話(hua)密鑰是(shi)供(gong)發送端和接收端在本次通(tong)信中使(shi)用的臨時密鑰,我們簡稱為TempKey;
密鑰分配中心查詢(xun)出(chu)發送端的密鑰,即發送端注(zhu)冊時分配的密鑰,我們簡稱為SenderKey;
密鑰分配中心使(shi)用SenderKey對(dui)TempKey進行加密,加密後(hou)的密文稱為CipherTempKeyToSender,並發送給發送端;
密鑰分配中心用同樣的方式查詢(xun)出(chu)接收端的密鑰,簡稱為ReceiverKey;
密鑰分配中心再用ReceiverKey對(dui)TempKey進行加密,加密後(hou)的密文稱為CipherTempKeyToReceiver,並發送給接收端;
發送端對(dui)來(lai)自(zi)密鑰分配中心的CipherTempKeyToSender,用自(zi)己的密鑰即SenderKey進行解密,得(de)到TempKey;
發送端將要發送給接收端的消息(xi)用TempKey進行加密,然後(hou)發送給接收端;
接收端對(dui)來(lai)自(zi)密鑰分配中心的CipherTempKeyToReceiver,用自(zi)己的密鑰即ReceiverKey進行解密,也得(de)到TempKey;

 

接收端收到發送端的密文後(hou),用TempKey對(dui)密文進行解密;
通(tong)信完畢xi) ?投撕徒郵斬碩忌境empKey。
這個通(tong)信過程還(huai)挺復雜的,總的來(lai)說就(jiu)是(shi),發送端和接收端通(tong)信時bi)shi)使(shi)用密鑰分配中心分配的臨時密鑰進行加密和解密的。這種方案,密鑰分配中心的安全性就(jiu)顯得(de)非(fei)常重要了。如(ru)果攻擊者入侵了密鑰分配中心,盜取到所有密鑰,則後(hou)果很嚴重。
通(tong)過Diffie-Hellman密鑰交huan)煥lai)解決
在Diffie-Hellman密鑰交huan)恢校(xiao) 屑用芡tong)信的雙方需(xu)要交huan)灰yi)些信息(xi),而這些信息(xi)即便(bian)被竊听者竊听到也沒有問題。根據所交huan)壞男畔xi),雙方可以(yi)各自(zi)生成相同的密鑰,而竊听者卻無法生成相同的密鑰。
雖(sui)然這種方法叫“密鑰交huan)rdquo;,但(dan)實dao)噬縴 講 揮姓嬲換(huan)幻茉浚 shi)通(tong)過計算生成出(chu)了一(yi)個相同的共享密鑰。因此,這種方法也稱為Diffie-Hellman密鑰協商。支撐(cheng)Diffie-Hellman密鑰交huan)凰惴 氖shi)有限群的離散(san)對(dui)數(shu)問題的復雜度。
通(tong)過公(gong)鑰密碼(ma)來(lai)解決
公(gong)鑰密碼(ma)類似(si)于投幣寄物櫃。首(shou)先,將物品(pin)放入寄物櫃中。然後(hou),投入硬(ying)幣並拔出(chu)鑰匙,就(jiu)可以(yi)將寄物櫃關閉了。關閉後(hou)的寄物櫃,沒有鑰匙是(shi)無法打(da)開的。只要有硬(ying)幣,任何(he)人都可以(yi)關閉寄物櫃,但(dan)寄物櫃一(yi)旦被huai)乇眨 僭zen)麼投幣也無法打(da)開。要打(da)開寄物櫃只能(neng)使(shi)用鑰匙,而不(bu)是(shi)硬(ying)幣。因此可以(yi)說dan) ying)幣是(shi)關閉寄物櫃的密鑰,而鑰匙是(shi)打(da)開寄物櫃的密鑰。
在公(gong)鑰密碼(ma)中xiao) 用芎徒餉艿拿茉渴shi)不(bu)同的。只要擁有加密密鑰,任何(he)人都可以(yi)進行加密,但(dan)沒有解密密鑰是(shi)無法解密的。接收zhao)呤孿冉 用 茉糠?透?駝擼 飧黽用 茉考幢bian)被竊听者獲取也沒有問題。發送者使(shi)用加密密鑰對(dui)通(tong)信內容進行加密並發送給接收zhao)擼 揮杏滌薪餉 茉康娜耍 唇郵照(zhao)弒救耍┌拍neng)夠進行解密。這樣一(yi)來(lai),就(jiu)用不(bu)著將解密密鑰配送給接收zhao) 耍 簿jiu)是(shi)說dan) bu)存在密鑰配送問題了。
公(gong)鑰密碼(ma)
公(gong)鑰密碼(ma)中xiao) 茉糠治﹤用 茉亢徒餉 茉苛街幀<用 茉懇yi)hua)閌shi)公(gong)開的,因此也被稱為公(gong)鑰(public key)。解密密鑰則絕對(dui)不(bu)能(neng)公(gong)開,因此也稱為私鑰(private key)。公(gong)鑰和私鑰是(shi)一(yi)一(yi)對(dui)應的,一(yi)對(dui)公(gong)鑰和私鑰統稱為密鑰對(dui)(key pair)。由公(gong)鑰加密的密文,只有配對(dui)的私鑰才能(neng)夠解密。
使(shi)用公(gong)鑰密碼(ma)通(tong)信時,流程如(ru)下︰

那麼,密鑰對(dui)是(shi)如(ru)何(he)生成的na)兀課 shi)麼用公(gong)鑰加密的密文na)苡盟皆拷餉苣兀懇﹫斫夤gong)鑰密碼(ma)的原理,需(xu)要先理解一(yi)些數(shu)學上的問題,mod運算是(shi)基礎(chu)。
公(gong)鑰密碼(ma)是(shi)基于數(shu)學上困難的問題來(lai)保證機密性的,比如(ru)利用質因數(shu)分解的困難度、mod運算下求離散(san)對(dui)數(shu)的困難度、mod運算下求平方根的困難度,等等。現在使(shi)用最廣泛的公(gong)鑰密碼(ma)算法RSA就(jiu)是(shi)利用了大整數(shu)質因數(shu)分解問題的困難度。
數(shu)學原理
要理解RSA算法的原理,就(jiu)要先理解一(yi)些mod運算方面的知識。mod運算,其(qi)實就(jiu)是(shi)“除法求余數(shu)的運算”,比如(ru)︰
27 mod 12 = 3 表示(shi)27除以(yi)12的余數(shu)等于3
加法和乘(cheng)法都非(fei)常簡單,比如(ru)︰
(6 + 7) mod 12 = 13 mod 12 = 1
7 * 7 mod 12 = 49 mod 12 = 1
減法和除法則可以(yi)看(kan)成加法和乘(cheng)法的na)嬖慫悖 熱ru)︰
(7 + N) mod 12 = 0 7加上幾除以(yi)12的余數(shu)為0?
7 * M mode 12 = 1 7乘(cheng)以(yi)幾除以(yi)12的余數(shu)為1?
這里(li),N 和 M 都要求大于等于 0 小于 12。N 還(huai)是(shi)很容易(yi)算出(chu)來(lai)的,答案是(shi)5。而 M 一(yi)下子就(jiu)比較難算出(chu)來(lai),可以(yi)用暴力破解把0~11都代(dai)入 M 計算一(yi)下結果,最終可以(yi)得(de)到 M = 7。接著,看(kan)另一(yi)個算式︰
N * M mod 12 = 1
如(ru)果沒有 mod 12,那 N 和 M 就(jiu)是(shi)互(hu)為倒數(shu)。此處的話(hua),我們還(huai)要加上“在以(yi)12為模的世(shi)界中”這個條件。在一(yi)hua)愕乃閌shu)中xiao) hu)為倒數(shu)可以(yi)寫(xie)成︰
N * 1/N = 1
那麼,在以(yi)12為模的世(shi)界中xiao) 到11的數(shu)字中xiao) shi)不(bu)是(shi)每一(yi)個數(shu)都存在相應的倒數(shu)呢?實dao)噬希(xi)od運算中“某個數(shu)是(shi)否(fu)存在倒數(shu)”這個問題,與(yu)RSA中“一(yi)個公(gong)鑰是(shi)否(fu)存在相對(dui)應的私鑰”這個問題是(shi)直接相關的。下表列(lie)出(chu)了結果︰

存在倒數(shu)的只有1、5、7、11,這些數(shu)有怎(zen)樣的性質呢?其(qi)實dan) mod 12 的世(shi)界中xiao) 嬖詰故shu)的數(shu),它們和12之間(jian)的最大公(gong)約數(shu)都是(shi)1,也可以(yi)說是(shi)和12互(hu)質的數(shu)。那麼,如(ru)果是(shi)在 mod 14 的世(shi)界中xiao) 嬖詰故shu)的則有1、3、5、9、11、13。
接著,看(kan)看(kan)乘(cheng)方的mod運算又是(shi)怎(zen)樣的。比如(ru),現在要求 7^4 mod 12,最笨的方法就(jiu)是(shi)將7^4直接算出(chu)結果,然後(hou)除以(yi)12求余。而快速的計算方法則是(shi)在計算的中間(jian)步驟求mod,如(ru)下︰
7^4 mod 12 = 7*7*7*7 mod 12 = ((7*7 mod 12)(7*7 mod 12)) mod 12 = ((49 mod 12)(49 mod 12)) mod 12 = 1*1 mod 12 = 1
在中間(jian)步驟求mod,可以(yi)避免(mian)計算大整數(shu)的乘(cheng)積。這種在計算過程中求mod來(lai)計算乘(cheng)方的方法,也是(shi)RSA的加密和解密算法中所使(shi)用的方法。
接著,再看(kan)看(kan)對(dui)數(shu),即乘(cheng)方的na)嬖慫恪od運算中的對(dui)數(shu)稱為離散(san)對(dui)數(shu),比如(ru)︰
7^N mod 13 = 8
這里(li)N應該等于幾呢?像(xiang)下面這樣依(yi)次嘗試一(yi)遍,可以(yi)得(de)到 N = 9︰

當bi)趾艽笫保 罄 san)對(dui)數(shu)就(jiu)會非(fei)常困難,而且非(fei)常耗(hao)時。到現在也bu)huai)沒有發現能(neng)夠快速求出(chu)離散(san)對(dui)數(shu)的算法。也因此,有很多公(gong)鑰算法都運用了離散(san)對(dui)數(shu)。
RSA
RSA是(shi)現在使(shi)用最廣泛的公(gong)鑰密碼(ma)算法,但(dan)RSA不(bu)只用于公(gong)鑰密碼(ma),也用于數(shu)字簽名。關于數(shu)字簽名下luan)黃 惱略俳病(bing)br />在RSA中xiao) 魑摹 茉亢兔 畝際shi)數(shu)字。RSA的加密過程可以(yi)用下列(lie)公(gong)式來(lai)表達(da),其(qi)中xiao)laintext 指(zhi)明文,Cipher 指(zhi)密文︰
Cipher = Plaintext^E mod N (RSA加密)
RSA的密文是(shi)對(dui)明文的數(shu)字的 E 次方求 mod N 的結果。換(huan)句(ju)話(hua)說dan) jiu)是(shi)將明文和自(zi)己做 E 次乘(cheng)法,然後(hou)將其(qi)結果除以(yi) N 求余數(shu),這個余數(shu)就(jiu)是(shi)密文。因此,只要知道 E 和 N 這兩個數(shu),任何(he)人都可以(yi)完成加密的運算。所以(yi)說dan) 和 N 是(shi)RSA加密的密鑰,也就(jiu)是(shi)說dan) 和 N 的組合就(jiu)是(shi)密鑰。另外,E 是(shi)加密(Encryption)的首(shou)字母,N 是(shi)數(shu)字(Number)的首(shou)字母。

 

RSA的解密和加密一(yi)樣簡單,可以(yi)用下面的公(gong)式來(lai)表達(da),其(qi)中xiao)laintext 指(zhi)明文,Cipher 指(zhi)密文︰
Plaintext = Cipher^D mod N (RSA解密)
對(dui)表示(shi)密文的數(shu)字的 D 次方求 mod N 就(jiu)可以(yi)得(de)到明文。換(huan)句(ju)話(hua)說dan)   暮妥zi)己做 D 次乘(cheng)法,再對(dui)其(qi)結果除以(yi) N 求余數(shu),就(jiu)可以(yi)得(de)到明文。這里(li)的數(shu)字 N 和加密時的 N 是(shi)相同的。D 和 N 組合起來(lai)就(jiu)是(shi)RSA的解密密鑰,因此,D 和 N 的組合就(jiu)是(shi)私鑰。另外,D 是(shi)解密(Decryption)的首(shou)字母。
整理一(yi)下,RSA的加密和解密如(ru)下圖︰

由于 E 和 N 是(shi)公(gong)鑰,D 和 N 是(shi)私鑰,因此求 E、D 和 N 這三個數(shu)就(jiu)是(shi)qiao)擅茉慷dui)。密鑰對(dui)的生成步驟如(ru)下︰
1. 求N︰N = p * q
其(qi)中xiao)、q 是(shi)需(xu)要事先準(zhun)備的兩個很大的質數(shu)。p 和 q 太小的話(hua),密碼(ma)會變得(de)容易(yi)破譯,但(dan)太大的話(hua)計算時間(jian)又會變得(de)很長。一(yi)hua) lai)說dan) 和 q 的長度都是(shi)512比特以(yi)上xi) 的長度為1024以(yi)上。
2. 求L︰L = lcm(p-1, q-1)
L 是(shi)僅在生成密鑰對(dui)的過程中使(shi)用的數(shu),它是(shi) p-1 和 q-1 的最小公(gong)倍數(shu)。
3. 求E︰1
公(gong)鑰密碼(ma)的問題
公(gong)鑰密碼(ma)雖(sui)然可以(yi)避免(mian)密鑰配送問題,但(dan)也存在兩個很大的問題︰
1. 公(gong)鑰密碼(ma)的處理速度遠dui)兜陀詼dui)稱密碼(ma);
2. 公(gong)鑰密碼(ma)難以(yi)抵御中間(jian)人攻擊。
如(ru)果用公(gong)鑰密碼(ma)去處理很長的消息(xi),那麼,公(gong)鑰密碼(ma)速度慢的缺點就(jiu)會顯露duan)摶傘Kyi),一(yi)hua)悖 bu)huan)嵊霉gong)鑰密碼(ma)直接處理消息(xi)。而是(shi)和對(dui)稱密碼(ma)相結合xi) 捎沒旌廈藶ma)系統。關于混合密碼(ma)系統,下面再說。
對(dui)于第二個問題,是(shi)因為公(gong)鑰是(shi)公(gong)開的,任何(he)人都可以(yi)獲取,也包括攻擊者。所謂中間(jian)人攻擊,就(jiu)是(shi)攻擊者混入發送者和接收zhao)咧屑jian),對(dui)發送者偽裝(zhuang)成接收zhao)擼 dui)接收zhao)呶弊zhuang)成發送者的攻擊方式。如(ru)下圖所示(shi)︰

在這種情況(kuang)下,就(jiu)沒有機密性可言(yan)了,因為發送者用來(lai)加密的其(qi)實是(shi)攻擊者的公(gong)鑰,攻擊者攔截(jie)到信息(xi)後(hou)就(jiu)可以(yi)用自(zi)己的私鑰解密出(chu)來(lai),再用之前攔截(jie)到的接收zhao)叩墓gong)鑰對(dui)偽造的消息(xi)加密後(hou)發給接收zhao)摺br />僅靠(kao)公(gong)鑰密碼(ma)本身,是(shi)無法防御中間(jian)人攻擊的。要防御中間(jian)人攻擊,還(huai)需(xu)要一(yi)種手段(duan)來(lai)確認所收到的公(gong)鑰是(shi)否(fu)真的屬于接收zhao)擼 庵質佷duan)稱為認證。針對(dui)上面的情況(kuang),我們可以(yi)使(shi)用公(gong)鑰的證書。關于認證和證書,下luan)黃 惱略俳病(bing)br />混合密碼(ma)系統
混合密碼(ma)系統是(shi)將對(dui)稱密碼(ma)和公(gong)鑰密碼(ma)的優(you)勢相結合的方法,加密消息(xi)使(shi)用快速的對(dui)稱密碼(ma),而用公(gong)鑰密碼(ma)來(lai)加密對(dui)稱密碼(ma)的密鑰。因為對(dui)稱密碼(ma)的密鑰一(yi)hua)惚認xi)本身要短,因此公(gong)鑰密碼(ma)速度慢的問題就(jiu)可以(yi)忽略了。另外,對(dui)稱密碼(ma)使(shi)用的密鑰是(shi)臨時生成的會話(hua)密鑰。混合密碼(ma)系統的加密過程如(ru)下圖︰

從圖中就(jiu)可得(de)知︰
1. 會話(hua)密鑰是(shi)隨機生成的,因此,每kan)渭用艿幕嶧hua)密鑰都會不(bu)同;
2. 混合密碼(ma)系統的明文是(shi)用對(dui)稱密碼(ma)加密的,而加密使(shi)用的密鑰就(jiu)是(shi)qiao)弦yi)步生成的會話(hua)密鑰;
3. 用公(gong)鑰密碼(ma)對(dui)會話(hua)密鑰進行加密,形成了加密後(hou)的會話(hua)密鑰;
4. 將加密後(hou)的會話(hua)密鑰和加密後(hou)的消息(xi)組合在一(yi)起,就(jiu)是(shi)混合密碼(ma)系統的密文。
而解密過程則如(ru)下圖所示(shi)︰

從圖中也可得(de)知︰
1. 將已(yi)加密的會話(hua)密鑰和消息(xi)進行分離;
2. 用公(gong)鑰密碼(ma)對(dui)已(yi)加密的會話(hua)密鑰進行解密,得(de)到會話(hua)密鑰明文;
3. 用對(dui)稱密碼(ma)對(dui)已(yi)加密的消息(xi)進行解密,而解密密鑰就(jiu)是(shi)qiao)弦yi)步解密出(chu)來(lai)的會話(hua)密鑰。
那麼,怎(zen)樣才算是(shi)一(yi)個高強度的混合密碼(ma)系統呢?混合密碼(ma)系統運用了偽隨機數(shu)生成器(qi)、對(dui)稱密碼(ma)和公(gong)鑰密碼(ma),因此si)渲忻懇yi)種技術(shu)要素的強度都必須很高,而且,這些技術(shu)要素之間(jian)的強度平衡也非(fei)常重要。
如(ru)果偽隨機數(shu)生成器(qi)的算法很差(cha),生成的會話(hua)密鑰就(jiu)有可能(neng)被huai)?髡咄撇獬chu)來(lai)。會話(hua)密鑰中哪(na)怕只有部分比特被推測出(chu)來(lai)也是(shi)很危險的,因為會話(hua)密鑰的密鑰kao)佔jian)不(bu)大,很容易(yi)通(tong)過暴力破解來(lai)發動攻擊。
對(dui)稱密碼(ma)被用于加密消息(xi),我們需(xu)要使(shi)用高強度的對(dui)稱密碼(ma)算法,並確保密鑰具有足夠的長度。此外,還(huai)要選擇使(shi)用合適的分組密碼(ma)模式。
公(gong)鑰密碼(ma)被用于加密會話(hua)密鑰,同樣需(xu)要使(shi)用高強度的公(gong)鑰密碼(ma)算法,並確保密鑰具有足夠的長度。
另外,公(gong)鑰密碼(ma)的強度應該要高于對(dui)稱密碼(ma),因為對(dui)稱密碼(ma)的會話(hua)密鑰被破譯只huan)嵊ying)響本次通(tong)信的na)諶藎 gong)鑰密碼(ma)一(yi)旦被破譯,從過去到未來(lai)的(用相同公(gong)鑰加密的)所以(yi)通(tong)信內容就(jiu)都能(neng)夠被破譯了。
寫(xie)在最後(hou)
本篇文章只是(shi)本書第一(yi)部分的讀書筆(bi)記(ji),雖(sui)然也有加入了一(yi)點自(zi)己的看(kan)法。第一(yi)部分的na)諶 饕 shi)關于保證機密性的密碼(ma)技術(shu)。但(dan)信息(xi)安全還(huai)包括消息(xi)完整性、進行認證以(yi)及防止否(fu)認的技術(shu),這些下面的文章再做總結。
Tag標簽︰密碼(ma)  技術(shu)  
  • 山西体彩网官网

About IT165 - 廣告服務(wu) - 隱私聲明 - 版權申明 - 免(mian)責條款(kuan) - 網(wang)站(zhan)地圖 - 網(wang)友投稿 - 聯系方式
本站(zhan)內容來(lai)自(zi)于互(hu)聯網(wang),僅供(gong)用于網(wang)絡(luo)技術(shu)學習(xi),學習(xi)中請遵循相關法律法規
山西体彩网官网 | 下一页