畢業(yè)設(shè)計(論文)DES加密算法分析_第1頁
畢業(yè)設(shè)計(論文)DES加密算法分析_第2頁
畢業(yè)設(shè)計(論文)DES加密算法分析_第3頁
畢業(yè)設(shè)計(論文)DES加密算法分析_第4頁
畢業(yè)設(shè)計(論文)DES加密算法分析_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、摘 要des數(shù)據(jù)加密算法是使用最廣的分組加密算法,它作為最著名的保密密鑰或?qū)ΨQ密鑰加密算法,在計算機密碼學(xué)及計算機數(shù)據(jù)通信的發(fā)展過程中起了重要作用。本次學(xué)年論文是主要是學(xué)習(xí)介紹des對稱密鑰數(shù)據(jù)加密算法,并用c+實現(xiàn)。des算法具有較高的安全性,為我們進行一般的計算機數(shù)據(jù)傳輸活動提供了安全保障。關(guān)鍵詞: 加密與解密,des算法,s-盒目 錄摘 要ii目 錄iii第一章 引 言1第二章 概 述22.1 加密與解密22.2 單鑰密碼系統(tǒng)22.3分組密碼的總體結(jié)構(gòu)42.4分組密碼的安全性4第三章 des算法簡介53.1簡介53.2 des加密標(biāo)準(zhǔn)63.2.1 初始置換ip73.2.2 ip-1是ip

2、的逆置換73.2.3 des算法的迭代過程83.2.4 子密鑰的生成123.3 des算法的解密過程13第四章 des算法用c+語言實現(xiàn)144.1設(shè)置密鑰函數(shù)des_setkey()144.2 f函數(shù)和s函數(shù)f_func()和s_func()144.3 des算法的運行函數(shù)des_run( )164.4 des算法的主函數(shù)void main()184.5 des的加密過程和舉例194.6 des算法的分析20參考文獻22結(jié)束語23附錄1 des算法用c+實現(xiàn)的源代碼24第一章 引 言密碼學(xué)是伴隨著戰(zhàn)爭發(fā)展起來的一門科學(xué),其歷史可以追溯到古代,并且還有過輝煌的經(jīng)歷。但成為一門學(xué)科則是近20年來受

3、計算機科學(xué)蓬勃發(fā)展的刺激結(jié)果。今天在計算機被廣泛應(yīng)用的信息時代,信息本身就是時間,就是財富。如何保護信息的安全(即密碼學(xué)的應(yīng)用)已不再局限于軍事、政治和外交,而是擴大到商務(wù)、金融和社會的各個領(lǐng)域。特別是在網(wǎng)絡(luò)化的今天,大量敏感信息(如考試成績、個人簡歷、體檢結(jié)果、實驗數(shù)據(jù)等)常常要通過互聯(lián)網(wǎng)進行交換。(現(xiàn)代電子商務(wù)也是以互聯(lián)網(wǎng)為基礎(chǔ)的。)由于互聯(lián)網(wǎng)的開放性,任何人都可以自由地接入互聯(lián)網(wǎng),使得有些不誠實者就有可能采用各種非法手段進行破壞。因此人們十分關(guān)心在網(wǎng)絡(luò)上交換信息的安全性。普遍認為密碼學(xué)方法是解決信息安全保護的一個最有效和可行的方法。有效是指密碼能做到使信息不被非法竊取,不被篡改或破壞,可

4、行是說它需要付出的代價是可以接受的。密碼是形成一門新的學(xué)科是在20世紀70年代。它的理論基礎(chǔ)之一應(yīng)該首推1949年shannon的一篇文章“保密系統(tǒng)的通信理論”,該文章用信息論的觀點對信息保密問題作了全面的闡述。這篇文章過了30年后才顯示出它的價值。1976年,diffie和hellman發(fā)表了論文密碼學(xué)的新方向,提出了公鑰密碼體制的新思想,這一思想引發(fā)了科技界對研究密碼學(xué)的極大興趣,大量密碼學(xué)論文開始公開發(fā)表,改變了過去只是少數(shù)人關(guān)起門來研究密碼學(xué)的狀況。同時為了適應(yīng)計算機通信和電子商務(wù)迅速發(fā)展的需要,密碼學(xué)的研究領(lǐng)域逐漸從消息加密擴大到數(shù)字簽名、消息認證、身份識別、抗欺騙協(xié)議等新課題。 美

5、國國家標(biāo)準(zhǔn)局(nbs)1973年開始研究除國防部外的其它部門的計算機系統(tǒng)的數(shù)據(jù)加密標(biāo)準(zhǔn),并批準(zhǔn)用于非機密單位及商業(yè)上的保密通信。于1973年5月15日和1974年8月27日先后兩次向公眾發(fā)出了征求加密算法的公告。1977年1月,美國政府頒布:采用ibm公司1971年設(shè)計出的一個加密算法作為非機密數(shù)據(jù)的正式數(shù)據(jù)加密標(biāo)準(zhǔn)(des : data encryption standard)。des廣泛應(yīng)用于商用數(shù)據(jù)加密,算法完全公開,這在密碼學(xué)史上是一個創(chuàng)舉。在密碼學(xué)的發(fā)展過程中,des算法起了非常重要的作用。本次學(xué)年論文介紹的就是分組加密技術(shù)中最典型的加密算法des算法。第二章 概 述2.1 加密與解

6、密加密技術(shù)是基于密碼學(xué)原理來實現(xiàn)計算機、網(wǎng)絡(luò)乃至一切信息系統(tǒng)安全的理論與技術(shù)基礎(chǔ)。簡單的說,加密的基本意思是改變信息的排列形式,使得只有合法的接受才能讀懂,任何他人即使截取了該加密信息也無法使用現(xiàn)有的手段來解讀。解密是我們將密文轉(zhuǎn)換成能夠直接閱讀的文字(即明文)的過程稱為解密,它是加密的反向處理,但解密者必須利用相同類型的加密設(shè)備和密鑰對密文進行解密。2.2 單鑰密碼系統(tǒng)密碼學(xué)中有兩種重要類型的密碼系統(tǒng),單鑰(私鑰)和雙鑰(公鑰)密碼系統(tǒng)。在單鑰密碼系統(tǒng)中,明文的加密和密文的解密是用同樣的密鑰。直到1976年diffie、hellman引入公鑰(雙鑰)密碼學(xué)之前,所有的密碼都是單鑰系統(tǒng),因此單

7、鑰系統(tǒng)也稱為傳統(tǒng)密碼系統(tǒng)。傳統(tǒng)密碼系統(tǒng)廣泛地用在今天的世界上,有兩種單鑰密碼體制:流密碼和分組密碼。流密碼是利用密鑰k產(chǎn)生一個密鑰流z=z0z1,并使用如下規(guī)則對明文串x=x0x1x2加密: y=y0y1y2=ez0(x0)ez1(x1)ez2(x2)。密鑰流由密鑰流發(fā)生器f產(chǎn)生: zi=f(k,i),這里i是加密器中的記憶元件(存儲器)在時刻i的狀態(tài),f是由密鑰k和i產(chǎn)生的函數(shù)。而分組密碼就是將明文消息序列:m,m,m,劃分為等長的消息組(m,m,m),(m,m,m),各組明文分別在密鑰k=(k1,k2,kt)的控制下,按固定的算法e一組一組進行加密。加密后輸出等長密文組(y,y),(y,y

8、),分組密碼的模型,如圖2.1所示。圖2.1 分組密碼的模型它與流密碼的不同之處在于輸出的每一位數(shù)字不只與相應(yīng)時刻輸入明文數(shù)字有關(guān),而是與一組長為m的明文數(shù)組有關(guān)。它們的區(qū)別就在于有無記憶性(如圖2.2)。流密碼的滾動密鑰z0=f(k,0)由函數(shù)f、密鑰k和指定的初態(tài)0完全確定。此后,由于輸入加密器的明文可能影響加密器中內(nèi)部記憶元件的存儲狀態(tài),因而i(i0)可能依賴于k,0,x0,x1,xi-1等參數(shù)。圖2.2流密碼與分組密碼的區(qū)別分組密碼的優(yōu)點在于其容易實現(xiàn)同步,因為一個密文組的傳輸錯誤不會影響其他組,丟失一個明密文組不會對其后的組的解密正確性帶來影響。分組密碼又分為三類:代替密碼(subs

9、titution)、移位密碼(transposition)和乘積密碼。隨著計算技術(shù)的發(fā)展,早期的代替和移位密碼已無安全可言。一個增加密碼強度的顯然的方法是合并代替和移位密碼,這樣的密碼稱為乘積密碼。如果密文是由明文運用輪函數(shù)多次而得,這樣的乘積密碼又稱為迭代分組密碼。des和今天的大多數(shù)分組密碼都是迭代分組密碼。目前著名的對稱分組密碼系統(tǒng)算法有des、idea、blowfish、rc4、rc5、feal等。2.3分組密碼的總體結(jié)構(gòu)分組密碼采用兩種類型的總體結(jié)構(gòu):sp網(wǎng)絡(luò)與feistel網(wǎng)絡(luò),它們的主要區(qū)別在于:sp結(jié)構(gòu)每輪改變整個數(shù)據(jù)分組,而feistel密碼每輪只改變輸入分組的一半。aes和

10、des分別是這兩種結(jié)構(gòu)的代表。feistel網(wǎng)絡(luò)(又稱feistel結(jié)構(gòu))可把任何輪函數(shù)轉(zhuǎn)化為一個置換,它是由horst feistel在設(shè)計lucifer分組密碼時發(fā)明的,并因des的使用而流行,“加解密相似”是feistel型密碼的實現(xiàn)優(yōu)點。sp網(wǎng)絡(luò)(又稱sp結(jié)構(gòu))是feistel網(wǎng)絡(luò)的一種推廣,其結(jié)構(gòu)清晰,s一般稱為混淆層,主要起混淆作用,p一般稱為擴散層,只要起擴散作用。sp網(wǎng)絡(luò)可以更快速的擴散,不過sp網(wǎng)絡(luò)的加解密通常不相似。2.4分組密碼的安全性安全性是分組密碼最重要的設(shè)計原則,它要求即使攻擊者知道分組密碼的內(nèi)部結(jié)構(gòu),仍不能破譯該密碼,這也意味著,不存在針對該密碼的某種攻擊方法,其

11、工作量小于窮密鑰搜索。但是隨著密碼分析技術(shù)的發(fā)展,使得對于具有更多輪的分組密碼的破譯成為可能。第三章 des算法簡介3.1簡介des是data encryption standard(數(shù)據(jù)加密標(biāo)準(zhǔn))的縮寫。它是由ibm公司在1971年設(shè)計出的一個加密算法,美國國家標(biāo)準(zhǔn)局(nbs)于1977年公布把它作為非機要部門使用的數(shù)據(jù)加密標(biāo)準(zhǔn)5。 des自從公布以來,已成為金融界及其他各種行業(yè)最廣泛應(yīng)用的對稱密鑰密碼系統(tǒng)。des是分組密碼的典型代表,也是第一個被公布出來的標(biāo)準(zhǔn)算法。原來規(guī)定des算法的使用期為10年,可能是des尚未受到嚴重威脅,更主要是新的數(shù)據(jù)加密標(biāo)準(zhǔn)研制工作尚未完成,或意見尚未統(tǒng)一,所

12、以當(dāng)時的美國政府宣布延長它的使用期。因而des超期服役到2000年。近三十年來,盡管計算機硬件及破解密碼技術(shù)的發(fā)展日新月異,若撇開des的密鑰太短,易于被使用窮舉密鑰搜尋法找到密鑰的攻擊法不談,直到進入20世紀90年代以后,以色列的密碼學(xué)家shamir等人提出一種“差分分析法”,以后日本人也提出了類似的方法,這才稱得上對它有了攻擊的方法。嚴格地說shamir的“差分分析法”也只是理論上的價值。至少到目前為止是這樣,比如后來的“線形逼迫法”,它是一種已知明文攻擊,需要2434.3981012個明、密文對,在這樣苛刻的要求下,還要付出很大的代價才能解出一個密鑰。不管是差分攻擊還是線性攻擊法,對于d

13、es的安全性也僅僅只做到了“質(zhì)疑”的地步,并未從根本上破解des。也就是說,若是能用類似triple-des或是desx的方式加長密鑰長度,仍不失為一個安全的密碼系統(tǒng)。早在des提出不久,就有人提出造一專用的裝置來對付des,其基本思想無非是借用硬件設(shè)備來實現(xiàn)對所有的密鑰進行遍歷搜索。由于電子技術(shù)的突飛猛進,專門設(shè)備的造價大大降低,速度有質(zhì)的飛躍,對des形成了實際的威脅。des確實輝煌過,它的弱點在于專家們一開始就指出的,即密鑰太短。美國政府已經(jīng)征集評估和判定出了新的數(shù)據(jù)加密標(biāo)準(zhǔn)aes以取代des對現(xiàn)代分組密碼理論的發(fā)展和應(yīng)用起了奠基性的作用,它的基本理論和設(shè)計思想仍有重要參考價值。3.2

14、des加密標(biāo)準(zhǔn)現(xiàn)如今,依靠internet的分布式計算能力,用窮舉密鑰搜索攻擊方法破譯已成為可能。數(shù)據(jù)加密標(biāo)準(zhǔn)des已經(jīng)達到它的信任終點。但是作為一種feistel加密算法的例子仍然有討論的價值。des是對二元數(shù)字分組加密的分組密碼算法,分組長度為64比特。每64位明文加密成64位密文,沒有數(shù)據(jù)壓縮和擴展,密鑰長度為56比特,若輸入64比特,則第8,16,24,32,40,48,56,64為奇偶校驗位,所以,實際密鑰只有56位。des算法完全公開,其保密性完全依賴密鑰。它的缺點就在于密鑰太短。設(shè)明文串m=m1m2m64;密鑰串k=k1k2k64。在后面的介紹中可以看到k8,k16,k24,k3

15、2,k40,k48,k56,k64實際上是不起作用的。des的加密過程可表示為:des(m)= ip-1t16t15t2t1ip(m).下面是完全16輪des算法框圖:圖3.1 完全16輪des算法3.2.1 初始置換ip初始置換是將輸入的64位明文分為8個數(shù)組,每一組包括8位,按1至64編號。ip的置換規(guī)則如下表:表3.1 ip置換規(guī)則58504234261810 260524436282012 462544638302214 664564840322416 8574941332517 9 159514335271911 361534537292113 563554739312315 7即將

16、輸入的第58位換到第1位,第50位換到第2位,依次類推,最后一位是原來的第7位。3.2.2 ip-1是ip的逆置換由于第1位經(jīng)過初始置換后,已處于第40位。逆置換就是再將第40位換回到第1位。逆置換規(guī)則如下表所示:表3.2 ip-1置換40848165624643239 747155523633138 646145422623037 545135321612936 444125220602835 343115119592734 242105018582633 141 949175725初始置換ip及其逆置換ip-1并沒有密碼學(xué)意義,因為置換前后的一一對應(yīng)關(guān)系是已知的。它們的作用在于打亂原來輸入

17、明文的asc碼字劃分的關(guān)系,并將原來明文的第位m8,m16,m24,m32,m40,m48,m56,m64位(校驗位)變成ip的輸出的一個字節(jié)。3.2.3 des算法的迭代過程 圖3.2 des算法的迭代過程圖圖中l(wèi)i-1和ri-1分別是第i-1次迭代結(jié)果的左右兩部分,各32比特。即li=ri-1, ri=li-1 f(ri-1,ki)。其中輪密鑰ki為48比特,函數(shù)f(r,k)的計算過程如圖1.5所示。輪輸入的右半部分r為32比特,r首先被擴展成48比特,擴展過程由表3定義,其中將r的16個比特各重復(fù)一次。擴展后的48比特再與子密鑰ki異或,然后再通過一個s盒,產(chǎn)生32比特的輸出。該輸出再經(jīng)

18、過一個由表4定義的置換,產(chǎn)生的結(jié)果即為函數(shù)f(r,k)的輸出。表3.3 擴展e32 1 2 3 4 5 4 5 6 7 8 9 8 9101112131213141516171617181920212021222324252425262728292829303132 1ki是由64比特的初始密鑰(亦稱種子密鑰)導(dǎo)出的第i輪子密鑰,ki是48比特des算法的關(guān)鍵是f(ri-1,ki)的功能,其中的重點又在s-盒(substitution boxes)上。f函數(shù)的輸出是32比特。圖3.3 f函數(shù)計算過程圖將r經(jīng)過一個擴展運算e變?yōu)?8位,記為e(r)。計算e(r)k=b,對b施行代換s,此代換由8

19、個代換盒組成,即s-盒。每個s-盒有6個輸入,4個輸出,將b依次分為8組,每組6位,記b= b1b2b3b4b5b6b7b8其中bj作為第j個s-盒的輸入,其輸出為cj,c= c1c2c3c4c5c6c7c8就是代換s的輸出,所以代換s是一個48位輸入,32位輸出的選擇壓縮運算,將結(jié)果c再實行一個置換p(表4),即得f(r,k)。其中,擴展運算e與置換p主要作用是增加算法的擴散效果。s-盒是des算法中唯一的非線性部件,當(dāng)然也就是整個算法的安全性所在。它的設(shè)計原則與過程一直因為種種不為人知的因素所限,而未被公布出來。s-盒如下表:表3.4 s-盒函數(shù)s114 413 1 21511 8 310

20、 612 5 9 0 7 015 7 414 213 110 61211 9 5 3 8 4 114 813 6 2111512 9 7 310 5 01512 8 2 4 9 1 7 511 31410 0 613s215 1 814 611 3 4 9 7 21312 0 510 313 4 715 2 81412 0 110 6 911 5 014 71110 413 1 5 812 6 9 3 21513 810 1 315 4 211 6 712 0 514 9s310 0 914 6 315 5 11312 711 4 2 813 7 0 9 3 4 610 2 8 5141211

21、15 113 6 4 9 815 3 011 1 212 51014 7 11013 0 6 9 8 7 41514 311 5 212s4 71314 3 0 6 910 1 2 8 51112 41513 811 5 615 0 3 4 7 212 11014 910 6 9 01211 71315 1 314 5 2 8 4 315 0 610 113 8 9 4 51112 7 214s5 212 4 1 71011 6 8 5 31513 014 91411 212 4 713 1 5 01510 3 9 8 6 4 5 1111013 7 815 912 5 6 3 01411 8

22、12 7 114 213 615 0 910 4 5 3s612 11015 9 2 6 8 013 3 414 7 5111015 4 2 712 9 5 6 11314 011 3 8 91415 5 2 812 3 7 0 410 11311 6 4 3 212 9 515101114 1 7 6 0 813s7 411 21415 0 813 312 9 7 510 6 113 011 7 4 9 11014 3 512 215 8 6 1 4111312 3 7141015 6 8 0 5 9 2 61113 8 1 410 7 9 5 01514 2 312s813 2 8 4 6

23、1511 110 9 314 5 012 7 11513 810 3 7 412 5 611 014 9 2 711 4 1 91214 2 0 6101315 3 5 8 2 114 7 410 8131512 9 0 3 5 611s-盒的置換規(guī)則為:取0,1,15上的4個置換,即它的4個排列排成4行,得一4*16矩陣。若給定該s盒的6個輸入為b0 b1 b2 b3 b4 b5,在si表中找出b0 b5行,b1b2 b3b4列的元素,以4位二進制表示該元素,此為s-盒si的輸出。例3.1 s2的輸入為101011, b1 =1,b6=1,b1 b6=(11)2=3 (b2 b3 b4 b5

24、)2=(0101)2=5查s2表可知第3行第5列的輸出是15,15的二進制表示為1111。則s2的輸出為1111。8個s-盒的代換方式都是一樣的。s盒輸出的32比特經(jīng)p置換,p置換的功能是將32位的輸入,按以下順序置換,然后輸入仍為32比特。p置換的順序如表3.5:表3.5 置換p16 7202129122817 1152326 5183110 2 824143227 3 9191330 62211 4253.2.4 子密鑰的生成初始密鑰k(64bit)pc-1d0(28bit)c0(28bit)ls1ls1k1pc-2d1c1ls2ls2ls16ls16k16pc-2d16c16圖3.4 d

25、es子密鑰生成流程圖圖3.4給出了子密鑰產(chǎn)生的流程圖。首先對初始密鑰經(jīng)過置換pc-1(表2.67),將初始密鑰的8個奇偶校驗位剔除掉,而留下真正的56比特初始密鑰。表3.6 密鑰置換pc-1574941332517 9 158504234261810 259514335271911 36052443663554739312315 762544638302214 661534537292113 5282012 4然后將此56位分為c0,d0兩部分,各28比特,c0,d0如下:c0=k57k49k44k36d0=k63k55k12k4然后分別進行一個循環(huán)左移函數(shù)ls1,得到c1,d1,將c1(28

26、位),d1(28位)連成56比特數(shù)據(jù),再經(jīng)過密鑰置換pc-2(表3.7)做重排動作,從而便得到了密鑰k1(48位)。依次類推,便可得到k2,k3k16。表3.7 密鑰置換pc-214171124 1 5 32815 62110231912 426 816 7272013 2415231374755304051453348444939563453464250362932其中l(wèi)s1(1i16)表示一個或兩個位置的循環(huán)左移,當(dāng)i=1,2,9,16時,移一個位置,當(dāng)i=3,4,5,6,7,8,10,11,12,13,14,15時,移兩個位置。3.3 des算法的解密過程des算法的解密過程跟加密過程是

27、一樣的,區(qū)別僅僅在于第一次迭代時用密鑰k16,第二次k15、,最后一次用k1,算法本身沒有任何變化。第四章 des算法用c+語言實現(xiàn)4.1設(shè)置密鑰函數(shù)des_setkey()此函數(shù)的功能是由64比特的密鑰產(chǎn)生16個子密鑰ki。首先將密鑰字節(jié)組key8轉(zhuǎn)換為64比特的位組,然后進行密鑰變換pc-1(祥見pc-1置換表),置換后得到56比特的密鑰,把變換后的密鑰等分成兩部分,前28位記為c0,后28位記為d0。將c0,d0進行l(wèi)s1運算,ls1是循環(huán)左移運算。得到c1 ,d1,最后將其進行pc-2置換(見pc-2置換表),得到子密鑰k1.然后依次按循環(huán)左移lsi(i=216,循環(huán)次數(shù)見循環(huán)左移規(guī)則

28、), pc-2置換得到k2 k16。void des_setkey(const char key8);static void f_func(bool in32,const bool ki48);/f函數(shù)static void s_func(bool out32,const bool in48);/s盒代替/變換static void transform(bool *out, bool *in, const char *table, int len);static void xor(bool *ina, const bool *inb, int len);/異或static void rotat

29、el(bool *in, int len, int loop);/循環(huán)左移4.2 f函數(shù)和s函數(shù)f_func()和s_func()此函數(shù)的功能是des算法的關(guān)鍵,f是將32比特的輸入轉(zhuǎn)化為32比特的輸出。這個兩個函數(shù)中主要用到以下函數(shù):(1) transform()此函數(shù)是通用置換函數(shù),根據(jù)具體情況確定要執(zhí)行哪種置換。在f函數(shù)中,先用于e置換,然后進行p置換。void transform(bool *out,bool *in,const char *table,int len) static bool tmp256; for(int i=0;ilen;i+) tmpi=intablei-1;

30、memcpy(out,tmp,len);(2)e_table()e置換表,作用是將32比特的輸入擴展為48比特。e輸出的48比特的數(shù)據(jù)跟生成的子密鑰進行異或運算,然后把得到的48比特的數(shù)據(jù)按順序分成8組,每組6比特,分別通過s1, s2 ,,s8盒后又縮為32比特,即每盒輸入為6比特,輸出為4比特。將輸出的32比特的數(shù)據(jù)經(jīng)p置換,最后得到32比特的數(shù)據(jù)。static const char e_table48= 32, 1, 2, 3, 4, 5,4, 5, 6, 7, 8, 9,8, 9,10,11,12,11,12,13,14,15,16,17,16,17,18,19,20,21,20,21

31、,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32, 1。(3)s_box s盒。void s_func(bool out32,const bool in48)for(char i=0,j,k;i8;i+,in+=6,out+=4) j=(in01)+in5; k=(in13)+(in22)+(in31)+in4; bytetobit(out,&s_boxijk,4); (4)p_table()p置換表。const static char p_table32=16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,2,8

32、,24,14,32,27,3,9,19,13,30,6,22,11,4,25。(5)xor()此函數(shù)的功能是進行異或運算,異或運算是按位作不進位加法運算。void xor(bool *ina,const bool *inb,int len) for(int i=0;ilen;i+) inai=inbi;(6) bytetobit()此函數(shù)的功能是將輸入的字節(jié)組轉(zhuǎn)換為位組。void bytetobit(bool *out,const char *in,int bits) for(int i=0;i(i%8) &1;與此相關(guān)的還有函數(shù)ttobyte()此函數(shù)的功能是將位組轉(zhuǎn)換字節(jié)組。void bi

33、ttobyte(char *out,const bool *in,int bits) memset(out,0,(bits+7)/8); for(int i=0;ibits;i+) outi/8|=ini(i%8);4.3 des算法的運行函數(shù)des_run( )這個函數(shù)整個算法運行程序的最主要部分。這個函數(shù)用于加密還是解密取決于type的類型,如果type為encrypt,則進行加密;如果type的類型為decrypt,則進行解密。void des_run(char out8,char in8, bool type) static bool m64,tmp32,*li=&m0, *ri=&m

34、32; bytetobit(m,in,64); transform(m,m,ip_table,64); if(type=encrypt) for(int i=0;i=0;i-) memcpy(tmp,li,32); f_func(li,subkeyi); xor(li,ri,32); memcpy(ri,tmp,32); transform(m,m,ipr_table,64); bittobyte(out,m,64);這個函數(shù)用到以下函數(shù):(1) bytetobit()此函數(shù)的功能是將輸入的字節(jié)組轉(zhuǎn)換為位組。(2) transform()此函數(shù)是通用置換函數(shù),根據(jù)具體情況確定要執(zhí)行哪種置換。(

35、3) memcpy()此函數(shù)是庫函數(shù),主要作用是進行內(nèi)存單元的復(fù)制。(4) f_func() 此函數(shù)是des_run()函數(shù)運行的關(guān)鍵,是將32比特的輸入轉(zhuǎn)化為32比特的輸出(5)xor()此函數(shù)的功能是進行異或運算,異或運算是按位作不進位加法運算。(6)bittobyte()此函數(shù)的功能是將位組轉(zhuǎn)換字節(jié)組。4.4 des算法的主函數(shù)void main()主函數(shù)的流程:void main() char key8=p,r,o,g,r,a,m,str8; puts(*des*); printf(n); printf(n); puts(please input your words); gets(s

36、tr); printf(n); puts(*); des_setkey(key); des_run(str,str,encrypt); puts(after encrypting:); puts(str); printf(n); puts(*); puts(after decrypting:); des_run(str,str,decrypt); puts(str); printf(n); puts(*); printf(n);此函數(shù)貫穿整個函數(shù)。首先是初設(shè)密鑰,然后調(diào)用密鑰設(shè)置函數(shù)des_setkey()和des算法的運行函數(shù)des_run(),最后得出密文以及解密后的文字。4.5 des的

37、加密過程和舉例設(shè)明文m=computer,密鑰k為program,它們用ascii碼表示為:m= 01100011 01101111 01101101 01110000 01110101 01110100 01100101 01110010k= 01110000 01110010 01101111 01100111 01110010 01101101 01101101這里的k只有56位,由于第8,16,24,32,40,48,58,64位不起作用,所以沒有賦值。也就是其中的k8 k16 k24 k32 k40 k48 k56 k64不起作用。其中的密鑰為64比特如下: k=0111000*00

38、11100*1001101*1110110*0111011*1001001*1000010*1101101*在這里密鑰k是在主函數(shù)中已設(shè)定,所以在程序運行時只輸入明文就可以了。密鑰k經(jīng)過pc-1置換后,分成兩組c0,d0??傻胏0=11101100 10011001 00011011 1011d0=10110100 01011000 10001110 0111c0,d0 分別進行循環(huán)左移運算,得到c1,d1。c1=11011001 00110010 00110111 0111d1=01101000 10110001 00011100 1111依次類推,c1,d1繼續(xù)進行循環(huán)左移,最后得到c2,

39、d2進行循環(huán)左移,得到c3,d3c16,d16。c1,d1進行pc-2置換,得到密鑰k1,可得:k1=00111101 10001111 11001101 00110111 00111111 01001000依次類推,c2,d2進行pc-2置換,得到密鑰k2, c3,d3進行pc-2置換得到k3,c16,d16進行pc-2置換得到k16。明文m進行ip置換后,分成兩組:l0,r0,可得:l0=11111111 10111000 01110110 01010111r0=00000000 11111111 00000110 10000011r0進行e膨脹后,與密鑰k1進行異或運算,得到48比特的數(shù)

40、據(jù)s=10111101 10011000 00110011 10110111 11101011 01001110將這些數(shù)據(jù)分別裝入s盒:(1) 101111進入s1,從s1的第3行第7列的元素7,可知其輸出為0111(2) 011001進入s2,從s2的第1行第12列的元6,可知其輸出為0110(3) 100000進入s3,從s3的第2行第0列的元素13,可知其輸出為1101(4) 110011進入s4,從s4的第3行第9列的元素4,可知其輸出為0100(5) 101101進入s5,從s5的第3行第6列的元素2,可知其輸出為0010(6) 111110進入s6,從s6的第2行第15列的元素6,

41、可知其輸出為0100(7) 101101進入s7,從s7的第3行第6列的元素10,可知其輸出為1010(8) 001110進入s8,從s8的第0行第7列的元素1,可知其輸出為0001故8個s盒的輸出為:01110110 11010100 00100110 10100001最后通過p得f(r0,k1)為:01110110 11010100 00100110 10100001l0 f(r0,k1)得到r1:r1=10111011 10011001 11101001 11001100l1= r0=00000000 11111111 00000110 10000011經(jīng)過16輪的迭代最后得到:l16=

42、 r15=01010010 10011000 11000001 01011010r16=11101000 10000011 01111000 01001100最后經(jīng)過ip逆置換后得到密文如下:00100100 01100001 00000010 10011011 01011001 10001000 11001111 101101004.6 des算法的分析des算法具有極高安全性,最初,除了用窮舉搜索法對des算法進行攻擊外,并沒有發(fā)現(xiàn)更有效的辦法。而56位長的密鑰的窮舉空間為256,這意味著如果一臺計算機的速度是每一秒種檢測一百萬個密鑰,則它搜索完全部密鑰就需要將近2285年的時間,可見,這

43、是難以實現(xiàn)的,當(dāng)然,隨著科學(xué)技術(shù)的發(fā)展,當(dāng)出現(xiàn)超高速計算機后,我們可考慮把des密鑰的長度再增長一些,以此來達到更高的保密程度。在des算法作為一個標(biāo)準(zhǔn)時,曾出現(xiàn)過許多的批評,其中之一就是針對s盒的。des里的所有計算,除去s盒全是線性的,也就是說,計算兩個輸出的異或與先將兩個對應(yīng)輸入異或再計算其輸出是相同的。作為非線性部件,s盒針對密碼體制的安全性至關(guān)重要。在算法提出時,就有人懷疑s盒隱藏了“陷門”。而美國國家安全局能夠輕易的解密消息,同時還能宣稱des算法是“安全”的。當(dāng)然無法否認這一猜測,然而到目前為止,并沒有任何證據(jù)證明des里的確存在陷門。事實上,后來表明des里的s盒是被設(shè)計成能夠

44、防止某些類型的攻擊的。在20世紀90年代初,biham與shamir發(fā)現(xiàn)差分分析時,美國國家安全局就已承認某些未公布的s盒設(shè)計原則正是為了使得差分密碼分析變得不可行。事實上,差分密碼分析在des最初被研發(fā)時就已成為ibm的研究者所知,但這種方法卻被保留了將近20年,直到biham與shamir又獨立地發(fā)現(xiàn)了這種攻擊。對des算法最中肯的批評是,密鑰太短。des算法中只用到64位密鑰中的其中56位,第8、16、24、.64位8個位并未參與des運算,而是用作奇偶校驗。在所有的密鑰空間中有極少量的弱密鑰,如全0和全f的密鑰等,在選擇時應(yīng)盡量避免。這一點,向我們提出了一個應(yīng)用上的要求,即des的安全

45、性是基于除了8,16,24,.64位外的其余56位的組合變化256才得以保證的。因此,在實際應(yīng)用中,我們應(yīng)避開使用第8,16,24,.64位作為有效數(shù)據(jù)位,而使用其它的56位作為有效數(shù)據(jù)位,才能保證des算法安全可靠地發(fā)揮作用。如果不了解這一點,把密鑰key的8,16,24,. .64位作為有效數(shù)據(jù)使用,將不能保證des加密數(shù)據(jù)的安全性,對運用des來達到保密作用的系統(tǒng)產(chǎn)生數(shù)據(jù)被破譯的危險,這正是des算法在應(yīng)用上的誤區(qū),留下了被人攻擊、被人破譯的極大隱患??傊?,des密鑰太短,超期服役的時間也太長。新的攻擊手段不斷出現(xiàn),des以面臨實實在在的威脅。直接的威脅還是在于專用設(shè)備,由于芯片的速度越

46、來越快,造價越來越便宜,導(dǎo)致專用設(shè)備的造價也大大的降低。des算法除了差分密碼分析另外兩種最重要的密碼攻擊是窮盡密鑰搜索和線性密碼分析。對des算法而言,線性攻擊更有效。在1994年,一個實際的線性密碼分析由其發(fā)明者matsui提出。這是一個使用243對明文-密文,又用了40天來找到密鑰。這個密碼分析并未對des的安全性產(chǎn)生實際影響,由于這個攻擊需要數(shù)目極大的明-密文對,在現(xiàn)實世界中一個敵手很難積攢下用同一密鑰加密的如此眾多的明-密文對。雖然des加密算法已經(jīng)過時,但它的基本理論和設(shè)計思想仍有重要參考價值。參考文獻1richard spillman著,葉阮健,曹英,張長富譯.經(jīng)典密碼學(xué)與現(xiàn)代密

47、碼學(xué).北京:清華大學(xué)出版社,2005,124-133.2oded goldreich.foundations of cryptography volume basic applicationsm,beijing:publishing house of electronics industry,2005年, 375-379.3賴溪松,韓亮,張真誠著.計算機密碼學(xué)及其應(yīng)用m.北京:國防工業(yè)出版社,2007, 43-49.4d.coppersmith, the data encryption standard (des) and its strength against attacksj.ibm journal of research and development, 38(3),.243-250.5孫淑玲編著,應(yīng)用密碼學(xué).北京:清華大學(xué)出版社,2004年, 11-19.6k.campbell and m.wiener

溫馨提示

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

評論

0/150

提交評論