2.DES算法的弱密鑰
由于算法各輪的子密鑰是通過(guò)改變初始密鑰這種方式得到的,因此有些初始密鑰成了弱密鑰(weakkey)。初始密鑰分成兩部分,每部分各自獨(dú)立的移動(dòng)。如果每一部分的所有位都是0或1,那么算法的任意一個(gè)周期的密鑰都是相同的。當(dāng)密鑰是全1、全0、或者一半全1、一半全0時(shí),會(huì)發(fā)生這種情況。下面以十六進(jìn)制編碼的方式給出了四種弱密鑰。
另外,還有一些密鑰對(duì)明文加密成相同的密文。換句話說(shuō),密鑰對(duì)里的一個(gè)密鑰能解密另外一個(gè)。
密鑰加密的信息。這是由DES產(chǎn)生子密鑰(subkey)的方式?jīng)Q定的。這些密鑰只產(chǎn)生2個(gè)不同的子密鑰,算法中每個(gè)這樣的子密鑰都使用了8次。這樣的子密鑰叫半弱密鑰(semiweakkey),下表以十六進(jìn)制編碼方式給出它們。
另外,也只有產(chǎn)生4個(gè)子密鑰的密鑰,每個(gè)這樣的子密鑰在算法中使用了4次。下面給出他們的十六進(jìn)制編碼形式
雖然DES有弱密鑰,但這張64個(gè)密鑰的密鑰表相對(duì)于總數(shù)位72,057,594,037,927,936個(gè)可能密鑰的密鑰集只是個(gè)零頭,如果隨機(jī)的選擇密鑰,選中這些弱密鑰的可能性可以忽略。而且我們可以在選擇密鑰時(shí)進(jìn)行檢查,以防止產(chǎn)生弱密鑰
3.密鑰的長(zhǎng)度
密鑰僅有56位二進(jìn)制未免太短,多密碼學(xué)專家力薦使用更長(zhǎng)的密鑰,理由是窮舉攻擊的可能性。設(shè)已知一段密碼文C及與它對(duì)應(yīng)的明碼文M,用一切可能的密鑰K加密M,直到得到E(M)=C,這時(shí)所用的密鑰K即為要破譯的密碼的密鑰。窮舉法的時(shí)間復(fù)雜性是T=O(n),空間復(fù)雜性是S=O(1)。對(duì)于DES密碼,n=256≈7×106,即使使用每秒種可以計(jì)算一百萬(wàn)個(gè)密鑰的大型計(jì)算機(jī),也需要算106天才能求得所使用的密鑰,因此看來(lái)是很安全的。
但是密碼專家Diffie和Hellman指出,如果設(shè)計(jì)一種一微秒可以核算一個(gè)密鑰的超大規(guī)模集成片,那么它在一天內(nèi)可以核算8.64×1010個(gè)密鑰。如果由一個(gè)百萬(wàn)個(gè)這樣的集成片構(gòu)成專用機(jī),那么它可以在不到一天的時(shí)間內(nèi)用窮舉法破譯DES密碼。他們當(dāng)時(shí)(1977年)估計(jì):這種專用機(jī)的造價(jià)約為兩千萬(wàn)美元。如果在五年內(nèi)分期償還,平均每天約需付一萬(wàn)美元。由于用窮舉法破譯平均只需要計(jì)算半個(gè)密鑰空間,因此獲得解的平均時(shí)間為半天。這樣,破譯每個(gè)DES密碼的花銷只是五千美元。后來(lái),Diffie在1981年又修改了他們的估計(jì),認(rèn)為以1980年的技術(shù)而論,用造價(jià)為五千萬(wàn)美元的專用機(jī)破譯DES密碼平均要花兩天時(shí)間。但是他與Hellman都預(yù)計(jì):1990年時(shí),破譯DES密碼的專用機(jī)的造價(jià)將大幅度下降。
同時(shí),DES的硬件實(shí)現(xiàn)方法逐步接近Diffie和Hellman的專用機(jī)所要求每秒百萬(wàn)次的速度。在1993年,MuchaelWiener設(shè)計(jì)了一個(gè)一百萬(wàn)美元的機(jī)器,它能在平均3.5小時(shí)內(nèi),完成DES的窮舉攻擊,到1990年時(shí),DES是完全不安全的。
4.迭代次數(shù)
根據(jù)目前的計(jì)算技術(shù)和DES的分析情況,16-圈DES仍然是安全的,但提醒使用者不要使用低于16-圈的DES,特別是10-圈以下的DES,Bihan和Shamir的差分密鑰分析同樣也闡述了這一點(diǎn):對(duì)于低于16輪的任意DES的已知明文攻擊要比窮舉攻擊有效,但當(dāng)算法恰好有16輪時(shí),只有窮舉攻擊最有效。
5.S盒和P盒的設(shè)計(jì)
實(shí)現(xiàn)替代函數(shù)Si所用的S盒的設(shè)計(jì)原理尚未公開(kāi),其中可能留有隱患。更有人擔(dān)心DES算法中有“陷阱”,知道秘密的人可以很容易地進(jìn)行密文解密。目前人們?nèi)匀徊恢繢ES中是否存在陷門。所謂陷門,通俗地講,就是在算法的設(shè)計(jì)中設(shè)計(jì)者留了一個(gè)后門,知道某一秘密的人可進(jìn)入這一后門獲得使用該算法的用戶的秘密密鑰.DES的設(shè)計(jì)準(zhǔn)則除了極少數(shù)被公布外,其余的仍然是保密的。圍繞S盒人們討論了一系列問(wèn)題包括設(shè)計(jì)準(zhǔn)則和構(gòu)造等。在差分分析公開(kāi)后,IBM公布了S盒和P盒的設(shè)計(jì)準(zhǔn)則。
5.1 S盒的設(shè)計(jì)準(zhǔn)則
1)每個(gè)S盒均為6位輸入,4位輸出。(這是在1974年的技術(shù)條件下,單個(gè)芯片所能容納的最大尺寸。)
2)沒(méi)有一個(gè)S盒的輸出位是接近輸入位的線性函數(shù)。
3)如果將輸入位的最左、最右端的位固定,變化中間的4位,每個(gè)可能的4位輸出只得到一次.4)如果S盒的兩個(gè)輸入僅有1位的差異,則其輸出必須至少有2位不同.5)如果S盒的兩個(gè)輸入僅有中間2位不同,則其輸出必須至少有2位不同。
6)如果S盒的兩個(gè)輸入前2位不同,后兩位已知,則其輸出必不同。
7)對(duì)于輸入之間的任何非零的6位差分,32對(duì)中至多有8對(duì)顯示出的差分導(dǎo)致了相同的輸出差分。
5.2 P盒的設(shè)計(jì)準(zhǔn)則
1)在第i輪S盒的4位輸出中,2位將影響S盒第i+1輪的中間位,其余2位將影響最后位;2)每個(gè)S盒的4位輸出影響6個(gè)不同的S盒,但沒(méi)有一個(gè)影響同一個(gè)S盒;
3)如果一個(gè)S盒的4位輸出影響另一個(gè)S盒的中間1位,那么后一個(gè)的輸出位不會(huì)影響前一個(gè)S盒的中間1位。
在今天看來(lái)產(chǎn)生S盒很容易,但在70年代初,這是一個(gè)很復(fù)雜的工作.Tuchman曾經(jīng)引述說(shuō),他們當(dāng)時(shí)將計(jì)算機(jī)程序運(yùn)行幾個(gè)月來(lái)產(chǎn)生S盒。在對(duì)DES密碼進(jìn)行鑒定的期間,美國(guó)國(guó)家保密局和計(jì)算機(jī)科學(xué)技術(shù)學(xué)會(huì)組織各界專家研究了DES密碼體制的安全性問(wèn)題,討論了破譯DES密碼體制的一切可能途徑。盡管有些專家和學(xué)者對(duì)它的安全性仍持懷疑態(tài)度,但官方卻得出了十分樂(lè)觀的結(jié)論。他們宣布:“沒(méi)有任何可以破譯DES密碼體制的系統(tǒng)分析法。若使用窮舉法,則在1990年以前基本上不可能產(chǎn)生出每天能破譯一個(gè)DES密鑰的專用計(jì)算機(jī)。即使屆時(shí)能制造出這樣的專用機(jī),它的破譯成功率也只會(huì)在0.1到0.2之間,而且造價(jià)可能高達(dá)幾千萬(wàn)美元
DES算法的漏洞
由DES算法我們可以看到:DES算法中只用到64位密鑰中的其中56位,而第8、16、24、……64位8個(gè)位并未參與DES運(yùn)算。這一點(diǎn),向我們提出了一個(gè)應(yīng)用上的要求,即DES的安全性是基于除了8,16,24,……64位外的其余56位的組合變化256才得以保證的。因此,在實(shí)際應(yīng)用中,我們應(yīng)避開(kāi)使用第8,16,24……64位作為DES密鑰的有效數(shù)據(jù)位,而使用其它的56位作為有效數(shù)據(jù)位。只有這樣,才能保證DES算法安全可靠地發(fā)揮作用。如果不了解這一點(diǎn),把密鑰Key的8,16,24,……64位作為有效數(shù)據(jù)位使用,將不能保證DES加密數(shù)據(jù)的安全性,對(duì)運(yùn)用DES來(lái)達(dá)到保密作用的系統(tǒng)將產(chǎn)生數(shù)據(jù)被破譯的危險(xiǎn),這正是DES算法在應(yīng)用上的誤區(qū),是各級(jí)技術(shù)人員、各級(jí)用戶在使用過(guò)程中應(yīng)絕對(duì)避免的。
基于以上的問(wèn)題,我們就不能用漢字作為密鑰。因?yàn)闈h字由兩個(gè)字節(jié)組成,每個(gè)字節(jié)的ASCII碼都大于127,轉(zhuǎn)換成二進(jìn)制就是8位,不能加奇偶校驗(yàn)位,而且如果去掉第8、16、24、……64位,就會(huì)丟失密鑰,而且不同的漢字可能實(shí)際上是相同的密鑰.
DES算法的應(yīng)用誤區(qū)
DES算法具有極高安全性,到目前為止,除了用窮舉搜索法對(duì)DES算法進(jìn)行攻擊外,還沒(méi)有發(fā)現(xiàn)更有效的辦法。而56位長(zhǎng)的密鑰的窮舉空間為256,這意味著如果一臺(tái)計(jì)算機(jī)的速度是每一秒種檢測(cè)一百萬(wàn)個(gè)密鑰,則它搜索完全部密鑰就需要將近2285年的時(shí)間,可見(jiàn),這是難以實(shí)現(xiàn)的,當(dāng)然,隨著科學(xué)技術(shù)的發(fā)展,當(dāng)出現(xiàn)超高速計(jì)算機(jī)后,我們可考慮把DES密鑰的長(zhǎng)度再增長(zhǎng)一些,以此來(lái)達(dá)到更高的保密程度。
由上述DES算法介紹我們可以看到:DES算法中只用到64位密鑰中的其中56位,而第8、16、24、。。。。。.64位8個(gè)位并未參與DES運(yùn)算,這一點(diǎn),向我們提出了一個(gè)應(yīng)用上的要求,即DES的安全性是基于除了8,16,24,。。。。。.64位外的其余56位的組合變化256才得以保證的。因此,在實(shí)際應(yīng)用中,我們應(yīng)避開(kāi)使用第8,16,24,。。。。。.64位作為有效數(shù)據(jù)位,而使用其它的56位作為有效數(shù)據(jù)位,才能保證DES算法安全可靠地發(fā)揮作用。如果不了解這一點(diǎn),把密鑰Key的8,16,24,。。。。。 .64位作為有效數(shù)據(jù)使用,將不能保證DES加密數(shù)據(jù)的安全性,對(duì)運(yùn)用DES來(lái)達(dá)到保密作用的系統(tǒng)產(chǎn)生數(shù)據(jù)被破譯的危險(xiǎn),這正是DES算法在應(yīng)用上的誤區(qū),是各級(jí)技術(shù)人員、各級(jí)領(lǐng)導(dǎo)在使用過(guò)程中應(yīng)絕對(duì)避免的,而當(dāng)今國(guó)內(nèi)各金融部門及非金融部門,在運(yùn)用DES工作,掌握DES工作密鑰Key的領(lǐng)導(dǎo)、主管們,極易忽略,給使用中貌似安全的系統(tǒng),留下了被人攻擊、被人破譯的極大隱患。
DES算法應(yīng)用誤區(qū)的驗(yàn)證數(shù)據(jù)
筆者用Turbo C編寫(xiě)了DES算法程序,并在PC機(jī)上對(duì)上述的DES 算法的應(yīng)用誤區(qū)進(jìn)行了騅,其驗(yàn)證數(shù)據(jù)如下:
Key: 0x30 0x30 0x30 0x30.。。。。.0x30(8個(gè)字節(jié))
Data: 0x31 0x31 0x31 0x31.。。。。.0x31(8個(gè)字節(jié))
Mode: Encryption
結(jié)果:65 5e a6 28 cf 62 58 5f
如果把上述的Key換為8個(gè)字節(jié)的0x31,而Data和Mode均不變,則執(zhí)行DES 后得到的密文完全一樣。類似地,用Key:8個(gè)0x32和用Key:8個(gè)0x33 去加密Data (8 個(gè)0x31),二者的圖文輸出也是相同的:5e c3 ac e9 53 71 3b ba
我們可以得到出結(jié)論:
Key用0x30與用0x31是一樣的;
Key用0x32與用0x33是一樣的,。。。。。。
當(dāng)Key由8個(gè)0x32換成8個(gè)0x31后,貌似換成了新的Key,但由于0x30和0x31僅僅是在第8,16,24.。。。。.64有變化,而DES算法并不使用Key的第8,16,。。。。。.64位作為Key的有效數(shù)據(jù)位,故:加密出的結(jié)果是一樣的。
DES解密的驗(yàn)證數(shù)據(jù):
Key: 0x31 0x31.。。。。.0x31(8個(gè)0x31)
Data: 65 5e a6 28 cf 62 58 5f
Mode: Decryption
結(jié)果:0x31 0x31.。。。。.0x31(8個(gè)0x31)
由以上看出:DES算法加密與解密均工作正確。唯一需要避免的是:在應(yīng)用中,避開(kāi)使用Key的第8,16.。。。。.64位作為有效數(shù)據(jù)位,從而便避開(kāi)了DES 算法在應(yīng)用中的誤區(qū)。
避開(kāi)DES算法應(yīng)用誤區(qū)的具體操作
在DES密鑰Key的使用、管理及密鑰更換的過(guò)程中,應(yīng)絕對(duì)避開(kāi)DES 算法的應(yīng)用誤區(qū),即:絕對(duì)不能把Key的第8,16,24.。。。。.64位作為有效數(shù)據(jù)位,來(lái)對(duì)Key 進(jìn)行管理。這一點(diǎn),特別推薦給金融銀行界及非金融業(yè)界的領(lǐng)導(dǎo)及決策者們,尤其是負(fù)責(zé)管理密鑰的人,要對(duì)此點(diǎn)予以高度重視。有的銀行金融交易網(wǎng)絡(luò),利用定期更換DES密鑰Key的辦法來(lái)進(jìn)一步提高系統(tǒng)的安全性和可靠性,如果忽略了上述應(yīng)用誤區(qū),那么,更換新密鑰將是徒勞的,對(duì)金融交易網(wǎng)絡(luò)的安全運(yùn)行將是十分危險(xiǎn)的,所以更換密鑰一定要保證新Key與舊Key真正的不同,即除了第8,16,24,。。.64位外其它位數(shù)據(jù)發(fā)生了變化,請(qǐng)務(wù)必對(duì)此保持高度重視!
電子發(fā)燒友App













評(píng)論