版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、DES加密算法分析摘 要 DES數(shù)據(jù)加密算法是使用最廣的分組加密算法,它作為最著名的保密密鑰或?qū)ΨQ密鑰加密算法,在計(jì)算機(jī)密碼學(xué)及計(jì)算機(jī)數(shù)據(jù)通信的發(fā)展過程中起了重要作用。本次學(xué)年論文是主要是學(xué)習(xí)介紹DES對(duì)稱密鑰數(shù)據(jù)加密算法,并用c+實(shí)現(xiàn)。DES算法具有較高的安全性,為我們進(jìn)行一般的計(jì)算機(jī)數(shù)據(jù)傳輸活動(dòng)提供了安全保障。關(guān)鍵詞 加密與解密,DES算法,S-盒引言密碼學(xué)是伴隨著戰(zhàn)爭(zhēng)發(fā)展起來的一門科學(xué),其歷史可以追溯到古代,并且還有過輝煌的經(jīng)歷。但成為一門學(xué)科則是近20年來受計(jì)算機(jī)科學(xué)蓬勃發(fā)展的刺激結(jié)果。今天在計(jì)算機(jī)被廣泛應(yīng)用的信息時(shí)代,信息本身就是時(shí)間,就是財(cái)富。如何保護(hù)信息的安全(即密碼學(xué)的應(yīng)用)已
2、不再局限于軍事、政治和外交,而是擴(kuò)大到商務(wù)、金融和社會(huì)的各個(gè)領(lǐng)域。特別是在網(wǎng)絡(luò)化的今天,大量敏感信息(如考試成績(jī)、個(gè)人簡(jiǎn)歷、體檢結(jié)果、實(shí)驗(yàn)數(shù)據(jù)等)常常要通過互聯(lián)網(wǎng)進(jìn)行交換。(現(xiàn)代電子商務(wù)也是以互聯(lián)網(wǎng)為基礎(chǔ)的。)由于互聯(lián)網(wǎng)的開放性,任何人都可以自由地接入互聯(lián)網(wǎng),使得有些不誠(chéng)實(shí)者就有可能采用各種非法手段進(jìn)行破壞。因此人們十分關(guān)心在網(wǎng)絡(luò)上交換信息的安全性。普遍認(rèn)為密碼學(xué)方法是解決信息安全保護(hù)的一個(gè)最有效和可行的方法。有效是指密碼能做到使信息不被非法竊取,不被篡改或破壞,可行是說它需要付出的代價(jià)是可以接受的。密碼是形成一門新的學(xué)科是在20世紀(jì)70年代。它的理論基礎(chǔ)之一應(yīng)該首推1949年Shannon的
3、一篇文章“保密系統(tǒng)的通信理論”,該文章用信息論的觀點(diǎn)對(duì)信息保密問題作了全面的闡述。這篇文章過了30年后才顯示出它的價(jià)值。1976年,Diffie和Hellman發(fā)表了論文密碼學(xué)的新方向,提出了公鑰密碼體制的新思想,這一思想引發(fā)了科技界對(duì)研究密碼學(xué)的極大興趣,大量密碼學(xué)論文開始公開發(fā)表,改變了過去只是少數(shù)人關(guān)起門來研究密碼學(xué)的狀況。同時(shí)為了適應(yīng)計(jì)算機(jī)通信和電子商務(wù)迅速發(fā)展的需要,密碼學(xué)的研究領(lǐng)域逐漸從消息加密擴(kuò)大到數(shù)字簽名、消息認(rèn)證、身份識(shí)別、抗欺騙協(xié)議等新課題1。 美國(guó)國(guó)家標(biāo)準(zhǔn)局(NBS)1973年開始研究除國(guó)防部外的其它部門的計(jì)算機(jī)系統(tǒng)的數(shù)據(jù)加密標(biāo)準(zhǔn),并批準(zhǔn)用于非機(jī)密單位及商業(yè)上的保密通信。
4、于1973年5月15日和1974年8月27日先后兩次向公眾發(fā)出了征求加密算法的公告。1977年1月,美國(guó)政府頒布:采用IBM公司1971年設(shè)計(jì)出的一個(gè)加密算法作為非機(jī)密數(shù)據(jù)的正式數(shù)據(jù)加密標(biāo)準(zhǔn)(DES : Data Encryption Standard)。DES廣泛應(yīng)用于商用數(shù)據(jù)加密,算法完全公開,這在密碼學(xué)史上是一個(gè)創(chuàng)舉2。在密碼學(xué)的發(fā)展過程中,DES算法起了非常重要的作用。本次學(xué)年論文介紹的就是分組加密技術(shù)中最典型的加密算法DES算法。1概述1.1 加密與解密加密技術(shù)是基于密碼學(xué)原理來實(shí)現(xiàn)計(jì)算機(jī)、網(wǎng)絡(luò)乃至一切信息系統(tǒng)安全的理論與技術(shù)基礎(chǔ)。簡(jiǎn)單的說,加密的基本意思是改變信息的排列形式,使得只
5、有合法的接受才能讀懂,任何他人即使截取了該加密信息也無法使用現(xiàn)有的手段來解讀。解密是我們將密文轉(zhuǎn)換成能夠直接閱讀的文字(即明文)的過程稱為解密,它是加密的反向處理,但解密者必須利用相同類型的加密設(shè)備和密鑰對(duì)密文進(jìn)行解密。1.2 單鑰密碼系統(tǒng)密碼學(xué)中有兩種重要類型的密碼系統(tǒng),單鑰(私鑰)和雙鑰(公鑰)密碼系統(tǒng)。在單鑰密碼系統(tǒng)中,明文的加密和密文的解密是用同樣的密鑰。直到1976年Diffie、Hellman引入公鑰(雙鑰)密碼學(xué)之前,所有的密碼都是單鑰系統(tǒng),因此單鑰系統(tǒng)也稱為傳統(tǒng)密碼系統(tǒng)。傳統(tǒng)密碼系統(tǒng)廣泛地用在今天的世界上,有兩種單鑰密碼體制:流密碼和分組密碼3。流密碼是利用密鑰k產(chǎn)生一個(gè)密鑰流
6、z=z0z1,并使用如下規(guī)則對(duì)明文串x=x0x1x2加密: y=y0y1y2=Ez0(x0)Ez1(x1)Ez2(x2)。密鑰流由密鑰流發(fā)生器f產(chǎn)生: zi=f(k,i),這里i是加密器中的記憶元件(存儲(chǔ)器)在時(shí)刻i的狀態(tài),f是由密鑰k和i產(chǎn)生的函數(shù)3。而分組密碼就是將明文消息序列:m,m,m,劃分為等長(zhǎng)的消息組(m,m,m),(m,m,m),各組明文分別在密鑰k=(k1,k2,kt)的控制下,按固定的算法E一組一組進(jìn)行加密。加密后輸出等長(zhǎng)密文組(y,y),(y,y),分組密碼的模型,如圖1.1所示3。圖1.1 分組密碼的模型它與流密碼的不同之處在于輸出的每一位數(shù)字不只與相應(yīng)時(shí)刻輸入明文數(shù)字有
7、關(guān),而是與一組長(zhǎng)為m的明文數(shù)組有關(guān)。它們的區(qū)別就在于有無記憶性(如圖1.2)。流密碼的滾動(dòng)密鑰z0=f(k,0)由函數(shù)f、密鑰k和指定的初態(tài)0完全確定。此后,由于輸入加密器的明文可能影響加密器中內(nèi)部記憶元件的存儲(chǔ)狀態(tài),因而i(i0)可能依賴于k,0,x0,x1,xi-1等參數(shù)。圖1.2流密碼與分組密碼的區(qū)別分組密碼的優(yōu)點(diǎn)在于其容易實(shí)現(xiàn)同步,因?yàn)橐粋€(gè)密文組的傳輸錯(cuò)誤不會(huì)影響其他組,丟失一個(gè)明密文組不會(huì)對(duì)其后的組的解密正確性帶來影響。分組密碼又分為三類:代替密碼(Substitution)、移位密碼(Transposition)和乘積密碼。隨著計(jì)算技術(shù)的發(fā)展,早期的代替和移位密碼已無安全可言。一個(gè)
8、增加密碼強(qiáng)度的顯然的方法是合并代替和移位密碼,這樣的密碼稱為乘積密碼。如果密文是由明文運(yùn)用輪函數(shù)多次而得,這樣的乘積密碼又稱為迭代分組密碼。DES和今天的大多數(shù)分組密碼都是迭代分組密碼4。目前著名的對(duì)稱分組密碼系統(tǒng)算法有DES、IDEA、Blowfish、RC4、RC5、FEAL等4。1.3分組密碼的總體結(jié)構(gòu)分組密碼采用兩種類型的總體結(jié)構(gòu):SP網(wǎng)絡(luò)與Feistel網(wǎng)絡(luò),它們的主要區(qū)別在于:SP結(jié)構(gòu)每輪改變整個(gè)數(shù)據(jù)分組,而Feistel密碼每輪只改變輸入分組的一半。AES和DES分別是這兩種結(jié)構(gòu)的代表。Feistel網(wǎng)絡(luò)(又稱Feistel結(jié)構(gòu))可把任何輪函數(shù)轉(zhuǎn)化為一個(gè)置換,它是由Horst F
9、eistel在設(shè)計(jì)Lucifer分組密碼時(shí)發(fā)明的,并因DES的使用而流行,“加解密相似”是Feistel型密碼的實(shí)現(xiàn)優(yōu)點(diǎn)。SP網(wǎng)絡(luò)(又稱SP結(jié)構(gòu))是Feistel網(wǎng)絡(luò)的一種推廣,其結(jié)構(gòu)清晰,S一般稱為混淆層,主要起混淆作用,P一般稱為擴(kuò)散層,只要起擴(kuò)散作用。SP網(wǎng)絡(luò)可以更快速的擴(kuò)散,不過SP網(wǎng)絡(luò)的加解密通常不相似4。1.4分組密碼的安全性安全性是分組密碼最重要的設(shè)計(jì)原則,它要求即使攻擊者知道分組密碼的內(nèi)部結(jié)構(gòu),仍不能破譯該密碼,這也意味著,不存在針對(duì)該密碼的某種攻擊方法,其工作量小于窮密鑰搜索。但是隨著密碼分析技術(shù)的發(fā)展,使得對(duì)于具有更多輪的分組密碼的破譯成為可能。2.DES算法簡(jiǎn)介2.1簡(jiǎn)介
10、DES是Data Encryption Standard(數(shù)據(jù)加密標(biāo)準(zhǔn))的縮寫。它是由IBM公司在1971年設(shè)計(jì)出的一個(gè)加密算法,美國(guó)國(guó)家標(biāo)準(zhǔn)局(NBS)于1977年公布把它作為非機(jī)要部門使用的數(shù)據(jù)加密標(biāo)準(zhǔn)5。 DES自從公布以來,已成為金融界及其他各種行業(yè)最廣泛應(yīng)用的對(duì)稱密鑰密碼系統(tǒng)。DES是分組密碼的典型代表,也是第一個(gè)被公布出來的標(biāo)準(zhǔn)算法。原來規(guī)定DES算法的使用期為10年,可能是DES尚未受到嚴(yán)重威脅,更主要是新的數(shù)據(jù)加密標(biāo)準(zhǔn)研制工作尚未完成,或意見尚未統(tǒng)一,所以當(dāng)時(shí)的美國(guó)政府宣布延長(zhǎng)它的使用期。因而DES超期服役到2000年。近三十年來,盡管計(jì)算機(jī)硬件及破解密碼技術(shù)的發(fā)展日新月異,若
11、撇開DES的密鑰太短,易于被使用窮舉密鑰搜尋法找到密鑰的攻擊法不談,直到進(jìn)入20世紀(jì)90年代以后,以色列的密碼學(xué)家Shamir等人提出一種“差分分析法”,以后日本人也提出了類似的方法,這才稱得上對(duì)它有了攻擊的方法。嚴(yán)格地說Shamir的“差分分析法”也只是理論上的價(jià)值。至少到目前為止是這樣,比如后來的“線形逼迫法”,它是一種已知明文攻擊,需要2434.3981012個(gè)明、密文對(duì),在這樣苛刻的要求下,還要付出很大的代價(jià)才能解出一個(gè)密鑰。不管是差分攻擊還是線性攻擊法,對(duì)于DES的安全性也僅僅只做到了“質(zhì)疑”的地步,并未從根本上破解DES。也就是說,若是能用類似Triple-DES或是DESX的方式
12、加長(zhǎng)密鑰長(zhǎng)度,仍不失為一個(gè)安全的密碼系統(tǒng)7,5。早在DES提出不久,就有人提出造一專用的裝置來對(duì)付DES,其基本思想無非是借用硬件設(shè)備來實(shí)現(xiàn)對(duì)所有的密鑰進(jìn)行遍歷搜索。由于電子技術(shù)的突飛猛進(jìn),專門設(shè)備的造價(jià)大大降低,速度有質(zhì)的飛躍,對(duì)DES形成了實(shí)際的威脅。DES確實(shí)輝煌過,它的弱點(diǎn)在于專家們一開始就指出的,即密鑰太短。美國(guó)政府已經(jīng)征集評(píng)估和判定出了新的數(shù)據(jù)加密標(biāo)準(zhǔn)AES以取代DES對(duì)現(xiàn)代分組密碼理論的發(fā)展和應(yīng)用起了奠基性的作用,它的基本理論和設(shè)計(jì)思想仍有重要參考價(jià)值6,7。2.2 DES加密標(biāo)準(zhǔn)現(xiàn)如今,依靠Internet的分布式計(jì)算能力,用窮舉密鑰搜索攻擊方法破譯已成為可能。數(shù)據(jù)加密標(biāo)準(zhǔn)DE
13、S已經(jīng)達(dá)到它的信任終點(diǎn)。但是作為一種Feistel加密算法的例子仍然有討論的價(jià)值。DES是對(duì)二元數(shù)字分組加密的分組密碼算法,分組長(zhǎng)度為64比特。每64位明文加密成64位密文,沒有數(shù)據(jù)壓縮和擴(kuò)展,密鑰長(zhǎng)度為56比特,若輸入64比特,則第8,16,24,32,40,48,56,64為奇偶校驗(yàn)位,所以,實(shí)際密鑰只有56位。DES算法完全公開,其保密性完全依賴密鑰。它的缺點(diǎn)就在于密鑰太短。設(shè)明文串m=m1m2m64;密鑰串k=k1k2k64。在后面的介紹中可以看到k8,k16,k24,k32,k40,k48,k56,k64實(shí)際上是不起作用的。DES的加密過程可表示為:DES(m)= IP-1T16T1
14、5T2T1IP(m).下面是完全16輪DES算法框圖:圖2.1 完全16輪DES算法2.2.1 初始置換IP初始置換是將輸入的64位明文分為8個(gè)數(shù)組,每一組包括8位,按1至64編號(hào)。IP的置換規(guī)則如下表7:表2.1 IP置換規(guī)則58504234261810 260524436282012 462544638302214 664564840322416 8574941332517 9 159514335271911 361534537292113 563554739312315 7即將輸入的第58位換到第1位,第50位換到第2位,依次類推,最后一位是原來的第7位。2.2.2 IP-1是IP的逆置
15、換由于第1位經(jīng)過初始置換后,已處于第40位。逆置換就是再將第40位換回到第1位。逆置換規(guī)則如下表所示7:表2.2 IP-1置換40848165624643239 747155523633138 646145422623037 545135321612936 444125220602835 343115119592734 242105018582633 141 949175725初始置換IP及其逆置換IP-1并沒有密碼學(xué)意義,因?yàn)橹脫Q前后的一一對(duì)應(yīng)關(guān)系是已知的。它們的作用在于打亂原來輸入明文的ASC碼字劃分的關(guān)系,并將原來明文的第位m8,m16,m24,m32,m40,m48,m56,m64位(
16、校驗(yàn)位)變成IP的輸出的一個(gè)字節(jié)。2.2.3 DES算法的迭代過程 圖2.2 DES算法的迭代過程圖圖中Li-1和Ri-1分別是第i-1次迭代結(jié)果的左右兩部分,各32比特。即Li=Ri-1, Ri=Li-1 f(Ri-1,ki)。其中輪密鑰Ki為48比特,函數(shù)F(R,K)的計(jì)算過程如圖1.5所示。輪輸入的右半部分R為32比特,R首先被擴(kuò)展成48比特,擴(kuò)展過程由表3定義,其中將R的16個(gè)比特各重復(fù)一次。擴(kuò)展后的48比特再與子密鑰Ki異或,然后再通過一個(gè)S盒,產(chǎn)生32比特的輸出。該輸出再經(jīng)過一個(gè)由表4定義的置換,產(chǎn)生的結(jié)果即為函數(shù)F(R,K)的輸出。表2.3 擴(kuò)展E32 1 2 3 4 5 4 5
17、 6 7 8 9 8 9101112131213141516171617181920212021222324252425262728292829303132 1ki是由64比特的初始密鑰(亦稱種子密鑰)導(dǎo)出的第i輪子密鑰,ki是48比特DES算法的關(guān)鍵是f(Ri-1,ki)的功能,其中的重點(diǎn)又在S-盒(Substitution Boxes)上。F函數(shù)的輸出是32比特。圖2.3 F函數(shù)計(jì)算過程圖將R經(jīng)過一個(gè)擴(kuò)展運(yùn)算E變?yōu)?8位,記為E(R)。計(jì)算E(R)K=B,對(duì)B施行代換S,此代換由8個(gè)代換盒組成,即S-盒。每個(gè)S-盒有6個(gè)輸入,4個(gè)輸出,將B依次分為8組,每組6位,記B= B1B2B3B4B
18、5B6B7B8其中Bj作為第j個(gè)S-盒的輸入,其輸出為Cj,C= C1C2C3C4C5C6C7C8就是代換S的輸出,所以代換S是一個(gè)48位輸入,32位輸出的選擇壓縮運(yùn)算,將結(jié)果C再實(shí)行一個(gè)置換P(表4),即得F(R,K)。其中,擴(kuò)展運(yùn)算E與置換P主要作用是增加算法的擴(kuò)散效果。S-盒是DES算法中唯一的非線性部件,當(dāng)然也就是整個(gè)算法的安全性所在。它的設(shè)計(jì)原則與過程一直因?yàn)榉N種不為人知的因素所限,而未被公布出來。S-盒如下表7:表2.4 S-盒函數(shù)S114 413 1 21511 8 310 612 5 9 0 7 015 7 414 213 110 61211 9 5 3 8 4 114 813
19、 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 514121115 113 6 4 9 815 3 011 1 212 51014 7 11013 0 6 9 8 7 4
20、1514 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 812 7 114 213 615 0 910 4 5 3S612 11015 9 2 6 8 013 3 4
21、14 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 61511 110 9 314 5 012 7 11513 810 3 7 412 5 611 014 9 2
22、 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個(gè)置換,即它的4個(gè)排列排成4行,得一4*16矩陣。若給定該S盒的6個(gè)輸入為b0 b1 b2 b3 b4 b5,在Si表中找出b0 b5行,b1b2 b3b4列的元素,以4位二進(jìn)制表示該元素,此為S-盒Si的輸出7。例2.1 S2的輸入為, b1 =1,b6=1,b1 b6=(11)2=3 (b2 b3 b4 b5)2=(0101)2=5查S2表可知第3行第5列的輸出是15,15的二進(jìn)制表示為1111。則S2的輸出為1111。8個(gè)
23、S-盒的代換方式都是一樣的。S盒輸出的32比特經(jīng)P置換,P置換的功能是將32位的輸入,按以下順序置換,然后輸入仍為32比特。P置換的順序如表2.57:表2.5 置換P16 7202129122817 1152326 5183110 2 824143227 3 9191330 62211 4252.2.4 子密鑰的生成初始密鑰K(64bit)PC-1D0(28bit)C0(28bit)LS1LS1K1PC-2D1C1LS2LS2.LS16LS16K16PC-2D16C16圖2.4 DES子密鑰生成流程圖圖2.4給出了子密鑰產(chǎn)生的流程圖。首先對(duì)初始密鑰經(jīng)過置換PC-1(表2.67),將初始密鑰的8
24、個(gè)奇偶校驗(yàn)位剔除掉,而留下真正的56比特初始密鑰。表2.6 密鑰置換PC-1574941332517 9 158504234261810 259514335271911 36052443663554739312315 762544638302214 661534537292113 5282012 4然后將此56位分為C0,D0兩部分,各28比特,C0,D0如下:C0=k57k49k44k36D0=k63k55k12k4然后分別進(jìn)行一個(gè)循環(huán)左移函數(shù)LS1,得到C1,D1,將C1(28位),D1(28位)連成56比特?cái)?shù)據(jù),再經(jīng)過密鑰置換PC-2(表2.77)做重排動(dòng)作,從而便得到了密鑰K1(48位
25、)。依次類推,便可得到K2,K3K16。表2.7 密鑰置換PC-214171124 1 5 32815 62110231912 426 816 7272013 2415231374755304051453348444939563453464250362932其中LS1(1i16)表示一個(gè)或兩個(gè)位置的循環(huán)左移,當(dāng)i=1,2,9,16時(shí),移一個(gè)位置,當(dāng)i=3,4,5,6,7,8,10,11,12,13,14,15時(shí),移兩個(gè)位置。2.3 DES算法的解密過程DES算法的解密過程跟加密過程是一樣的,區(qū)別僅僅在于第一次迭代時(shí)用密鑰k16,第二次k15、,最后一次用k1,算法本身沒有任何變化。3.DES算
26、法用C+語(yǔ)言實(shí)現(xiàn)3.1設(shè)置密鑰函數(shù)des_setkey()此函數(shù)的功能是由64比特的密鑰產(chǎn)生16個(gè)子密鑰ki。首先將密鑰字節(jié)組key8轉(zhuǎn)換為64比特的位組,然后進(jìn)行密鑰變換PC-1(祥見PC-1置換表),置換后得到56比特的密鑰,把變換后的密鑰等分成兩部分,前28位記為C0,后28位記為D0。將C0,D0進(jìn)行LS1運(yùn)算,LS1是循環(huán)左移運(yùn)算。得到C1 ,D1,最后將其進(jìn)行PC-2置換(見PC-2置換表),得到子密鑰k1.然后依次按循環(huán)左移LSi(I=216,循環(huán)次數(shù)見循環(huán)左移規(guī)則), PC-2置換得到k2 k16。void des_setkey(const char key8);static
27、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 rotatel(bool *in, int len, int loop);/循環(huán)左移3.2 f函數(shù)和S函數(shù)f_func()和s
28、_func()此函數(shù)的功能是DES算法的關(guān)鍵,f是將32比特的輸入轉(zhuǎn)化為32比特的輸出。這個(gè)兩個(gè)函數(shù)中主要用到以下函數(shù):(1) transform()此函數(shù)是通用置換函數(shù),根據(jù)具體情況確定要執(zhí)行哪種置換。在f函數(shù)中,先用于E置換,然后進(jìn)行P置換。void transform(bool *out,bool *in,const char *table,int len) static bool tmp256; for(int i=0;ilen;i+) tmpi=intablei-1; memcpy(out,tmp,len);(2)e_table()E置換表,作用是將32比特的輸入擴(kuò)展為48比特。E輸
29、出的48比特的數(shù)據(jù)跟生成的子密鑰進(jìn)行異或運(yùn)算,然后把得到的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,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32, 1。(3)s_box
30、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,24,14,32,27,3,9,19,13,30,6,22,11,4,25。(5)xor()此函數(shù)的功能是進(jìn)行異或
31、運(yùn)算,異或運(yùn)算是按位作不進(jìn)位加法運(yùn)算。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 bittobyte(char *out,const bool *in,int bits) memset(out,0,(b
32、its+7)/8); for(int i=0;ibits;i+) outi/8|=ini(i%8);3.3 DES算法的運(yùn)行函數(shù)des_run( )這個(gè)函數(shù)整個(gè)算法運(yùn)行程序的最主要部分。這個(gè)函數(shù)用于加密還是解密取決于type的類型,如果type為encrypt,則進(jìn)行加密;如果type的類型為decrypt,則進(jìn)行解密。void des_run(char out8,char in8, bool type) static bool m64,tmp32,*li=&m0, *ri=&m32; bytetobit(m,in,64); transform(m,m,ip_table,64); if(typ
33、e=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);這個(gè)函數(shù)用到以下函數(shù):(1) bytetobit()此函數(shù)的功能是將輸入的字節(jié)組轉(zhuǎn)換為位組。(2) transform()此函數(shù)是通用置換函數(shù),根據(jù)具體情況確定要執(zhí)行哪種置換。(3) memcpy()此函數(shù)是庫(kù)函數(shù),主要作用是進(jìn)行內(nèi)存單元的復(fù)制。(4) f_func() 此函數(shù)是des_run
34、()函數(shù)運(yùn)行的關(guān)鍵,是將32比特的輸入轉(zhuǎn)化為32比特的輸出(5)xor()此函數(shù)的功能是進(jìn)行異或運(yùn)算,異或運(yùn)算是按位作不進(jìn)位加法運(yùn)算。(6)bittobyte()此函數(shù)的功能是將位組轉(zhuǎn)換字節(jié)組。3.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(str); printf(n); puts(*); des_setkey(key); des_run(str,str,
35、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ù)貫穿整個(gè)函數(shù)。首先是初設(shè)密鑰,然后調(diào)用密鑰設(shè)置函數(shù)des_setkey()和DES算法的運(yùn)行函數(shù)des_run(),最后得出密文以及解密后的文字。3.5 DES的加密過程和舉例設(shè)明文m=computer,密鑰k為program,它們用ASCII碼表示為:m= k= 這里的k只有
36、56位,由于第8,16,24,32,40,48,58,64位不起作用,所以沒有賦值。也就是其中的k8 k16 k24 k32 k40 k48 k56 k64不起作用。其中的密鑰為64比特如下: k=*在這里密鑰K是在主函數(shù)中已設(shè)定,所以在程序運(yùn)行時(shí)只輸入明文就可以了。密鑰k經(jīng)過PC-1置換后,分成兩組C0,D0。可得C0= 1011D0= 0111C0,D0 分別進(jìn)行循環(huán)左移運(yùn)算,得到C1,D1。C1= 0111D1= 1111依次類推,C1,D1繼續(xù)進(jìn)行循環(huán)左移,最后得到C2,D2進(jìn)行循環(huán)左移,得到C3,D3C16,D16。C1,D1進(jìn)行PC-2置換,得到密鑰k1,可得:K1= 依次類推,C
37、2,D2進(jìn)行PC-2置換,得到密鑰k2, C3,D3進(jìn)行PC-2置換得到k3,C16,D16進(jìn)行PC-2置換得到k16。明文M進(jìn)行IP置換后,分成兩組:L0,R0,可得:L0= R0= R0進(jìn)行E膨脹后,與密鑰k1進(jìn)行異或運(yùn)算,得到48比特的數(shù)據(jù)S= 將這些數(shù)據(jù)分別裝入S盒:(1) 進(jìn)入S1,從S1的第3行第7列的元素7,可知其輸出為0111(2) 進(jìn)入S2,從S2的第1行第12列的元6,可知其輸出為0110(3) 進(jìn)入S3,從S3的第2行第0列的元素13,可知其輸出為1101(4) 進(jìn)入S4,從S4的第3行第9列的元素4,可知其輸出為0100(5) 進(jìn)入S5,從S5的第3行第6列的元素2,可
38、知其輸出為0010(6) 進(jìn)入S6,從S6的第2行第15列的元素6,可知其輸出為0100(7) 進(jìn)入S7,從S7的第3行第6列的元素10,可知其輸出為1010(8) 進(jìn)入S8,從S8的第0行第7列的元素1,可知其輸出為0001故8個(gè)S盒的輸出為: 最后通過P得f(R0,k1)為: L0 f(R0,k1)得到R1:R1= L1= R0= 經(jīng)過16輪的迭代最后得到:L16= R15= R16= 最后經(jīng)過IP逆置換后得到密文如下: 程序解密過程(略)3.6 DES算法的分析DES算法具有極高安全性,最初,除了用窮舉搜索法對(duì)DES算法進(jìn)行攻擊外,并沒有發(fā)現(xiàn)更有效的辦法。而56位長(zhǎng)的密鑰的窮舉空間為25
39、6,這意味著如果一臺(tái)計(jì)算機(jī)的速度是每一秒種檢測(cè)一百萬(wàn)個(gè)密鑰,則它搜索完全部密鑰就需要將近2285年的時(shí)間,可見,這是難以實(shí)現(xiàn)的,當(dāng)然,隨著科學(xué)技術(shù)的發(fā)展,當(dāng)出現(xiàn)超高速計(jì)算機(jī)后,我們可考慮把DES密鑰的長(zhǎng)度再增長(zhǎng)一些,以此來達(dá)到更高的保密程度4。在DES算法作為一個(gè)標(biāo)準(zhǔn)時(shí),曾出現(xiàn)過許多的批評(píng),其中之一就是針對(duì)S盒的。DES里的所有計(jì)算,除去S盒全是線性的,也就是說,計(jì)算兩個(gè)輸出的異或與先將兩個(gè)對(duì)應(yīng)輸入異或再計(jì)算其輸出是相同的。作為非線性部件,S盒針對(duì)密碼體制的安全性至關(guān)重要。在算法提出時(shí),就有人懷疑S盒隱藏了“陷門”。而美國(guó)國(guó)家安全局能夠輕易的解密消息,同時(shí)還能宣稱DES算法是“安全”的。當(dāng)然無
40、法否認(rèn)這一猜測(cè),然而到目前為止,并沒有任何證據(jù)證明DES里的確存在陷門1。事實(shí)上,后來表明DES里的S盒是被設(shè)計(jì)成能夠防止某些類型的攻擊的。在20世紀(jì)90年代初,Biham與Shamir發(fā)現(xiàn)差分分析時(shí),美國(guó)國(guó)家安全局就已承認(rèn)某些未公布的S盒設(shè)計(jì)原則正是為了使得差分密碼分析變得不可行。事實(shí)上,差分密碼分析在DES最初被研發(fā)時(shí)就已成為IBM的研究者所知,但這種方法卻被保留了將近20年,直到Biham與Shamir又獨(dú)立地發(fā)現(xiàn)了這種攻擊7。對(duì)DES算法最中肯的批評(píng)是,密鑰太短。DES算法中只用到64位密鑰中的其中56位,第8、16、24、.64位8個(gè)位并未參與DES運(yùn)算,而是用作奇偶校驗(yàn)。在所有的密
41、鑰空間中有極少量的弱密鑰,如全0和全F的密鑰等,在選擇時(shí)應(yīng)盡量避免。這一點(diǎn),向我們提出了一個(gè)應(yīng)用上的要求,即DES的安全性是基于除了8,16,24,.64位外的其余56位的組合變化256才得以保證的。因此,在實(shí)際應(yīng)用中,我們應(yīng)避開使用第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來達(dá)到保密作用的系統(tǒng)產(chǎn)生數(shù)據(jù)被破譯的危險(xiǎn),這正是DES算法在應(yīng)用上的誤區(qū),留下了被人攻擊、被人破譯的極大隱患。總之,DES密鑰太
42、短,超期服役的時(shí)間也太長(zhǎng)。新的攻擊手段不斷出現(xiàn),DES以面臨實(shí)實(shí)在在的威脅。直接的威脅還是在于專用設(shè)備,由于芯片的速度越來越快,造價(jià)越來越便宜,導(dǎo)致專用設(shè)備的造價(jià)也大大的降低。DES算法除了差分密碼分析另外兩種最重要的密碼攻擊是窮盡密鑰搜索和線性密碼分析。對(duì)DES算法而言,線性攻擊更有效。在1994年,一個(gè)實(shí)際的線性密碼分析由其發(fā)明者M(jìn)atsui提出。這是一個(gè)使用243對(duì)明文-密文,又用了40天來找到密鑰。這個(gè)密碼分析并未對(duì)DES的安全性產(chǎn)生實(shí)際影響,由于這個(gè)攻擊需要數(shù)目極大的明-密文對(duì),在現(xiàn)實(shí)世界中一個(gè)敵手很難積攢下用同一密鑰加密的如此眾多的明-密文對(duì)5。雖然DES加密算法已經(jīng)過時(shí),但它的基
43、本理論和設(shè)計(jì)思想仍有重要參考價(jià)值。參考文獻(xiàn)1Richard Spillman著,葉阮健,曹英,張長(zhǎng)富譯.經(jīng)典密碼學(xué)與現(xiàn)代密碼學(xué).北京:清華大學(xué)出版社,2005,124-133.2Oded Goldreich.Foundations of Cryptography Volume Basic ApplicationsM,BEIJING:Publishing House of Electronics Industry,2005年, 375-379.3賴溪松,韓亮,張真誠(chéng)著.計(jì)算機(jī)密碼學(xué)及其應(yīng)用M.北京:國(guó)防工業(yè)出版社,2007, 43-49.4D.Coppersmith, The Data Encr
44、yption 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, DES is not a group,Advances in Cryptology-CRYPTO 92,Lecture Notes in Computer Science 740,Springer-Verlag,1993, 512-520.7盧開橙編
45、著.計(jì)算機(jī)密碼學(xué)計(jì)算機(jī)網(wǎng)絡(luò)中的數(shù)據(jù)保密與安全M.北京:清華大學(xué)出版社,2003年,.38-48.DES encryption algorithm analysisCai Peng(Grade04,Class4,Major information and computer science,Department of Mathematics, Shaanxi University of Technology,Hanzhong ,Shaanxi)Tutor: Zhang LingshuangAbstract:DES data encryption algorithm is the most wide
46、ly used packet encryption algorithm, the most famous as the secret key or symmetric key encryption algorithms, the computer cryptography and computer data communications in the course of development played a major role. In this paper, mainly the study of data on DES symmetric key encryption algorithms, and using c + +. DES algorithm has higher security, for our general computer data transmission activities provide a security guarantee.Key word: encryption and decipher; des algorithm; S-Boxes.附錄:DES算法用C+實(shí)現(xiàn)的源代碼 用C+實(shí)現(xiàn)的源代
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 急救技能培訓(xùn)課程設(shè)計(jì)與實(shí)施
- 礦山安全生產(chǎn)監(jiān)控制度
- 馬勇課件教學(xué)課件
- 量子糾纏與量子隱形傳態(tài)-洞察及研究
- 高鐵車輛結(jié)構(gòu)材料創(chuàng)新-洞察及研究
- 金屬制品市場(chǎng)分析-洞察及研究
- 弧菌腸道菌群在免疫調(diào)節(jié)中的作用-洞察及研究
- 腦成像技術(shù)在識(shí)別心境障礙生物標(biāo)志物中的角色-洞察及研究
- 八年級(jí)英語(yǔ)單詞全冊(cè)教學(xué)資料集
- 量子化學(xué)在預(yù)測(cè)藥物分子毒性和安全性中的作用-洞察及研究
- 學(xué)生夜間管理突發(fā)事件應(yīng)急預(yù)案
- (高清版)DB5103∕T 12-2019 自貢彩燈 工藝燈通 用規(guī)范
- JJF(冀) 3029-2023 醫(yī)用(硬性)內(nèi)窺鏡校準(zhǔn)規(guī)范
- 2025年黨支部學(xué)習(xí)計(jì)劃范文
- GB/T 18916.66-2024工業(yè)用水定額第66部分:石材
- 合伙人屠宰場(chǎng)合作協(xié)議書范文
- 《農(nóng)業(yè)信息技術(shù)》課件-第二章 農(nóng)業(yè)信息感知與管理
- DL∕T 1987-2019 六氟化硫氣體泄漏在線監(jiān)測(cè)報(bào)警裝置技術(shù)條件
- 地貌學(xué)與第四紀(jì)地質(zhì)學(xué)智慧樹知到期末考試答案章節(jié)答案2024年長(zhǎng)安大學(xué)
- 服裝店鋪運(yùn)營(yíng)規(guī)劃
- 船用導(dǎo)航雷達(dá)研究預(yù)測(cè)報(bào)告-船用導(dǎo)航雷達(dá)市場(chǎng)發(fā)展前景分析及供需格局研究預(yù)測(cè)報(bào)告(2024-2028年)
評(píng)論
0/150
提交評(píng)論