版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、摘 要DES數(shù)據(jù)加密算法是使用最廣的分組加密算法,它作為最著名的保密密鑰或?qū)ΨQ(chēng)密鑰加密算法,在計(jì)算機(jī)密碼學(xué)及計(jì)算機(jī)數(shù)據(jù)通信的發(fā)展過(guò)程中起了重要作用。本次學(xué)年論文是主要是學(xué)習(xí)介紹DES對(duì)稱(chēng)密鑰數(shù)據(jù)加密算法,并用c+實(shí)現(xiàn)。DES算法具有較高的安全性,為我們進(jìn)行一般的計(jì)算機(jī)數(shù)據(jù)傳輸活動(dòng)提供了安全保障。關(guān)鍵詞: 加密與解密,DES算法,S-盒目 錄摘 要II目 錄III第一章 引 言1第二章 概 述22.1 加密與解密22.2 單鑰密碼系統(tǒng)22.3分組密碼的總體結(jié)構(gòu)42.4分組密碼的安全性4第三章 DES算法簡(jiǎn)介53.1簡(jiǎn)介53.2 DES加密標(biāo)準(zhǔn)63.2.1 初始置換IP73.2.2 IP-1是IP
2、的逆置換73.2.3 DES算法的迭代過(guò)程83.2.4 子密鑰的生成123.3 DES算法的解密過(guò)程13第四章 DES算法用C+語(yǔ)言實(shí)現(xiàn)144.1設(shè)置密鑰函數(shù)des_setkey()144.2 f函數(shù)和S函數(shù)f_func()和s_func()144.3 DES算法的運(yùn)行函數(shù)des_run( )164.4 DES算法的主函數(shù)void main()184.5 DES的加密過(guò)程和舉例194.6 DES算法的分析20參考文獻(xiàn)22結(jié)束語(yǔ)23附錄1 DES算法用C+實(shí)現(xiàn)的源代碼24第一章 引 言密碼學(xué)是伴隨著戰(zhàn)爭(zhēng)發(fā)展起來(lái)的一門(mén)科學(xué),其歷史可以追溯到古代,并且還有過(guò)輝煌的經(jīng)歷。但成為一門(mén)學(xué)科則是近20年來(lái)受
3、計(jì)算機(jī)科學(xué)蓬勃發(fā)展的刺激結(jié)果。今天在計(jì)算機(jī)被廣泛應(yīng)用的信息時(shí)代,信息本身就是時(shí)間,就是財(cái)富。如何保護(hù)信息的安全(即密碼學(xué)的應(yīng)用)已不再局限于軍事、政治和外交,而是擴(kuò)大到商務(wù)、金融和社會(huì)的各個(gè)領(lǐng)域。特別是在網(wǎng)絡(luò)化的今天,大量敏感信息(如考試成績(jī)、個(gè)人簡(jiǎn)歷、體檢結(jié)果、實(shí)驗(yàn)數(shù)據(jù)等)常常要通過(guò)互聯(lián)網(wǎng)進(jìn)行交換。(現(xiàn)代電子商務(wù)也是以互聯(lián)網(wǎng)為基礎(chǔ)的。)由于互聯(lián)網(wǎng)的開(kāi)放性,任何人都可以自由地接入互聯(lián)網(wǎng),使得有些不誠(chéng)實(shí)者就有可能采用各種非法手段進(jìn)行破壞。因此人們十分關(guān)心在網(wǎng)絡(luò)上交換信息的安全性。普遍認(rèn)為密碼學(xué)方法是解決信息安全保護(hù)的一個(gè)最有效和可行的方法。有效是指密碼能做到使信息不被非法竊取,不被篡改或破壞,可
4、行是說(shuō)它需要付出的代價(jià)是可以接受的。密碼是形成一門(mén)新的學(xué)科是在20世紀(jì)70年代。它的理論基礎(chǔ)之一應(yīng)該首推1949年Shannon的一篇文章“保密系統(tǒng)的通信理論”,該文章用信息論的觀點(diǎn)對(duì)信息保密問(wèn)題作了全面的闡述。這篇文章過(guò)了30年后才顯示出它的價(jià)值。1976年,Diffie和Hellman發(fā)表了論文密碼學(xué)的新方向,提出了公鑰密碼體制的新思想,這一思想引發(fā)了科技界對(duì)研究密碼學(xué)的極大興趣,大量密碼學(xué)論文開(kāi)始公開(kāi)發(fā)表,改變了過(guò)去只是少數(shù)人關(guān)起門(mén)來(lái)研究密碼學(xué)的狀況。同時(shí)為了適應(yīng)計(jì)算機(jī)通信和電子商務(wù)迅速發(fā)展的需要,密碼學(xué)的研究領(lǐng)域逐漸從消息加密擴(kuò)大到數(shù)字簽名、消息認(rèn)證、身份識(shí)別、抗欺騙協(xié)議等新課題。 美
5、國(guó)國(guó)家標(biāo)準(zhǔn)局(NBS)1973年開(kāi)始研究除國(guó)防部外的其它部門(mén)的計(jì)算機(jī)系統(tǒng)的數(shù)據(jù)加密標(biāo)準(zhǔn),并批準(zhǔn)用于非機(jī)密單位及商業(yè)上的保密通信。于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ù)加密,算法完全公開(kāi),這在密碼學(xué)史上是一個(gè)創(chuàng)舉。在密碼學(xué)的發(fā)展過(guò)程中,DES算法起了非常重要的作用。本次學(xué)年論文介紹的就是分組加密技術(shù)中最典型的加密算法DES算法。第二章 概 述2.1 加密與解
6、密加密技術(shù)是基于密碼學(xué)原理來(lái)實(shí)現(xiàn)計(jì)算機(jī)、網(wǎng)絡(luò)乃至一切信息系統(tǒng)安全的理論與技術(shù)基礎(chǔ)。簡(jiǎn)單的說(shuō),加密的基本意思是改變信息的排列形式,使得只有合法的接受才能讀懂,任何他人即使截取了該加密信息也無(wú)法使用現(xiàn)有的手段來(lái)解讀。解密是我們將密文轉(zhuǎn)換成能夠直接閱讀的文字(即明文)的過(guò)程稱(chēng)為解密,它是加密的反向處理,但解密者必須利用相同類(lèi)型的加密設(shè)備和密鑰對(duì)密文進(jìn)行解密。2.2 單鑰密碼系統(tǒng)密碼學(xué)中有兩種重要類(lèi)型的密碼系統(tǒng),單鑰(私鑰)和雙鑰(公鑰)密碼系統(tǒng)。在單鑰密碼系統(tǒng)中,明文的加密和密文的解密是用同樣的密鑰。直到1976年Diffie、Hellman引入公鑰(雙鑰)密碼學(xué)之前,所有的密碼都是單鑰系統(tǒng),因此單
7、鑰系統(tǒng)也稱(chēng)為傳統(tǒng)密碼系統(tǒng)。傳統(tǒng)密碼系統(tǒng)廣泛地用在今天的世界上,有兩種單鑰密碼體制:流密碼和分組密碼。流密碼是利用密鑰k產(chǎn)生一個(gè)密鑰流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ù)。而分組密碼就是將明文消息序列:m,m,m,劃分為等長(zhǎng)的消息組(m,m,m),(m,m,m),各組明文分別在密鑰k=(k1,k2,kt)的控制下,按固定的算法E一組一組進(jìn)行加密。加密后輸出等長(zhǎng)密文組(y,y),(y,y
8、),分組密碼的模型,如圖2.1所示。圖2.1 分組密碼的模型它與流密碼的不同之處在于輸出的每一位數(shù)字不只與相應(yīng)時(shí)刻輸入明文數(shù)字有關(guān),而是與一組長(zhǎng)為m的明文數(shù)組有關(guān)。它們的區(qū)別就在于有無(wú)記憶性(如圖2.2)。流密碼的滾動(dòng)密鑰z0=f(k,0)由函數(shù)f、密鑰k和指定的初態(tài)0完全確定。此后,由于輸入加密器的明文可能影響加密器中內(nèi)部記憶元件的存儲(chǔ)狀態(tài),因而i(i0)可能依賴(lài)于k,0,x0,x1,xi-1等參數(shù)。圖2.2流密碼與分組密碼的區(qū)別分組密碼的優(yōu)點(diǎn)在于其容易實(shí)現(xiàn)同步,因?yàn)橐粋€(gè)密文組的傳輸錯(cuò)誤不會(huì)影響其他組,丟失一個(gè)明密文組不會(huì)對(duì)其后的組的解密正確性帶來(lái)影響。分組密碼又分為三類(lèi):代替密碼(Subs
9、titution)、移位密碼(Transposition)和乘積密碼。隨著計(jì)算技術(shù)的發(fā)展,早期的代替和移位密碼已無(wú)安全可言。一個(gè)增加密碼強(qiáng)度的顯然的方法是合并代替和移位密碼,這樣的密碼稱(chēng)為乘積密碼。如果密文是由明文運(yùn)用輪函數(shù)多次而得,這樣的乘積密碼又稱(chēng)為迭代分組密碼。DES和今天的大多數(shù)分組密碼都是迭代分組密碼。目前著名的對(duì)稱(chēng)分組密碼系統(tǒng)算法有DES、IDEA、Blowfish、RC4、RC5、FEAL等。2.3分組密碼的總體結(jié)構(gòu)分組密碼采用兩種類(lèi)型的總體結(jié)構(gòu):SP網(wǎng)絡(luò)與Feistel網(wǎng)絡(luò),它們的主要區(qū)別在于:SP結(jié)構(gòu)每輪改變整個(gè)數(shù)據(jù)分組,而Feistel密碼每輪只改變輸入分組的一半。AES和
10、DES分別是這兩種結(jié)構(gòu)的代表。Feistel網(wǎng)絡(luò)(又稱(chēng)Feistel結(jié)構(gòu))可把任何輪函數(shù)轉(zhuǎn)化為一個(gè)置換,它是由Horst Feistel在設(shè)計(jì)Lucifer分組密碼時(shí)發(fā)明的,并因DES的使用而流行,“加解密相似”是Feistel型密碼的實(shí)現(xiàn)優(yōu)點(diǎn)。SP網(wǎng)絡(luò)(又稱(chēng)SP結(jié)構(gòu))是Feistel網(wǎng)絡(luò)的一種推廣,其結(jié)構(gòu)清晰,S一般稱(chēng)為混淆層,主要起混淆作用,P一般稱(chēng)為擴(kuò)散層,只要起擴(kuò)散作用。SP網(wǎng)絡(luò)可以更快速的擴(kuò)散,不過(guò)SP網(wǎng)絡(luò)的加解密通常不相似。2.4分組密碼的安全性安全性是分組密碼最重要的設(shè)計(jì)原則,它要求即使攻擊者知道分組密碼的內(nèi)部結(jié)構(gòu),仍不能破譯該密碼,這也意味著,不存在針對(duì)該密碼的某種攻擊方法,其
11、工作量小于窮密鑰搜索。但是隨著密碼分析技術(shù)的發(fā)展,使得對(duì)于具有更多輪的分組密碼的破譯成為可能。第三章 DES算法簡(jiǎn)介3.1簡(jiǎn)介DES是Data Encryption Standard(數(shù)據(jù)加密標(biāo)準(zhǔn))的縮寫(xiě)。它是由IBM公司在1971年設(shè)計(jì)出的一個(gè)加密算法,美國(guó)國(guó)家標(biāo)準(zhǔn)局(NBS)于1977年公布把它作為非機(jī)要部門(mén)使用的數(shù)據(jù)加密標(biāo)準(zhǔn)5。 DES自從公布以來(lái),已成為金融界及其他各種行業(yè)最廣泛應(yīng)用的對(duì)稱(chēng)密鑰密碼系統(tǒng)。DES是分組密碼的典型代表,也是第一個(gè)被公布出來(lái)的標(biāo)準(zhǔn)算法。原來(lái)規(guī)定DES算法的使用期為10年,可能是DES尚未受到嚴(yán)重威脅,更主要是新的數(shù)據(jù)加密標(biāo)準(zhǔn)研制工作尚未完成,或意見(jiàn)尚未統(tǒng)一,所
12、以當(dāng)時(shí)的美國(guó)政府宣布延長(zhǎng)它的使用期。因而DES超期服役到2000年。近三十年來(lái),盡管計(jì)算機(jī)硬件及破解密碼技術(shù)的發(fā)展日新月異,若撇開(kāi)DES的密鑰太短,易于被使用窮舉密鑰搜尋法找到密鑰的攻擊法不談,直到進(jìn)入20世紀(jì)90年代以后,以色列的密碼學(xué)家Shamir等人提出一種“差分分析法”,以后日本人也提出了類(lèi)似的方法,這才稱(chēng)得上對(duì)它有了攻擊的方法。嚴(yán)格地說(shuō)Shamir的“差分分析法”也只是理論上的價(jià)值。至少到目前為止是這樣,比如后來(lái)的“線(xiàn)形逼迫法”,它是一種已知明文攻擊,需要2434.3981012個(gè)明、密文對(duì),在這樣苛刻的要求下,還要付出很大的代價(jià)才能解出一個(gè)密鑰。不管是差分攻擊還是線(xiàn)性攻擊法,對(duì)于D
13、ES的安全性也僅僅只做到了“質(zhì)疑”的地步,并未從根本上破解DES。也就是說(shuō),若是能用類(lèi)似Triple-DES或是DESX的方式加長(zhǎng)密鑰長(zhǎng)度,仍不失為一個(gè)安全的密碼系統(tǒng)。早在DES提出不久,就有人提出造一專(zhuān)用的裝置來(lái)對(duì)付DES,其基本思想無(wú)非是借用硬件設(shè)備來(lái)實(shí)現(xiàn)對(duì)所有的密鑰進(jìn)行遍歷搜索。由于電子技術(shù)的突飛猛進(jìn),專(zhuān)門(mén)設(shè)備的造價(jià)大大降低,速度有質(zhì)的飛躍,對(duì)DES形成了實(shí)際的威脅。DES確實(shí)輝煌過(guò),它的弱點(diǎn)在于專(zhuān)家們一開(kāi)始就指出的,即密鑰太短。美國(guó)政府已經(jīng)征集評(píng)估和判定出了新的數(shù)據(jù)加密標(biāo)準(zhǔn)AES以取代DES對(duì)現(xiàn)代分組密碼理論的發(fā)展和應(yīng)用起了奠基性的作用,它的基本理論和設(shè)計(jì)思想仍有重要參考價(jià)值。3.2
14、DES加密標(biāo)準(zhǔn)現(xiàn)如今,依靠Internet的分布式計(jì)算能力,用窮舉密鑰搜索攻擊方法破譯已成為可能。數(shù)據(jù)加密標(biāo)準(zhǔn)DES已經(jīng)達(dá)到它的信任終點(diǎn)。但是作為一種Feistel加密算法的例子仍然有討論的價(jià)值。DES是對(duì)二元數(shù)字分組加密的分組密碼算法,分組長(zhǎng)度為64比特。每64位明文加密成64位密文,沒(méi)有數(shù)據(jù)壓縮和擴(kuò)展,密鑰長(zhǎng)度為56比特,若輸入64比特,則第8,16,24,32,40,48,56,64為奇偶校驗(yàn)位,所以,實(shí)際密鑰只有56位。DES算法完全公開(kāi),其保密性完全依賴(lài)密鑰。它的缺點(diǎn)就在于密鑰太短。設(shè)明文串m=m1m2m64;密鑰串k=k1k2k64。在后面的介紹中可以看到k8,k16,k24,k3
15、2,k40,k48,k56,k64實(shí)際上是不起作用的。DES的加密過(guò)程可表示為:DES(m)= IP-1T16T15T2T1IP(m).下面是完全16輪DES算法框圖:圖3.1 完全16輪DES算法3.2.1 初始置換IP初始置換是將輸入的64位明文分為8個(gè)數(shù)組,每一組包括8位,按1至64編號(hào)。IP的置換規(guī)則如下表:表3.1 IP置換規(guī)則58504234261810 260524436282012 462544638302214 664564840322416 8574941332517 9 159514335271911 361534537292113 563554739312315 7即將
16、輸入的第58位換到第1位,第50位換到第2位,依次類(lèi)推,最后一位是原來(lái)的第7位。3.2.2 IP-1是IP的逆置換由于第1位經(jīng)過(guò)初始置換后,已處于第40位。逆置換就是再將第40位換回到第1位。逆置換規(guī)則如下表所示:表3.2 IP-1置換40848165624643239 747155523633138 646145422623037 545135321612936 444125220602835 343115119592734 242105018582633 141 949175725初始置換IP及其逆置換IP-1并沒(méi)有密碼學(xué)意義,因?yàn)橹脫Q前后的一一對(duì)應(yīng)關(guān)系是已知的。它們的作用在于打亂原來(lái)輸入
17、明文的ASC碼字劃分的關(guān)系,并將原來(lái)明文的第位m8,m16,m24,m32,m40,m48,m56,m64位(校驗(yàn)位)變成IP的輸出的一個(gè)字節(jié)。3.2.3 DES算法的迭代過(guò)程 圖3.2 DES算法的迭代過(guò)程圖圖中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ì)算過(guò)程如圖1.5所示。輪輸入的右半部分R為32比特,R首先被擴(kuò)展成48比特,擴(kuò)展過(guò)程由表3定義,其中將R的16個(gè)比特各重復(fù)一次。擴(kuò)展后的48比特再與子密鑰Ki異或,然后再通過(guò)一個(gè)S盒,產(chǎn)生32比特的輸出。該輸出再經(jīng)
18、過(guò)一個(gè)由表4定義的置換,產(chǎn)生的結(jié)果即為函數(shù)F(R,K)的輸出。表3.3 擴(kuò)展E32 1 2 3 4 5 4 5 6 7 8 9 8 9101112131213141516171617181920212021222324252425262728292829303132 1ki是由64比特的初始密鑰(亦稱(chēng)種子密鑰)導(dǎo)出的第i輪子密鑰,ki是48比特DES算法的關(guān)鍵是f(Ri-1,ki)的功能,其中的重點(diǎn)又在S-盒(Substitution Boxes)上。F函數(shù)的輸出是32比特。圖3.3 F函數(shù)計(jì)算過(guò)程圖將R經(jīng)過(guò)一個(gè)擴(kuò)展運(yùn)算E變?yōu)?8位,記為E(R)。計(jì)算E(R)K=B,對(duì)B施行代換S,此代換由8
19、個(gè)代換盒組成,即S-盒。每個(gè)S-盒有6個(gè)輸入,4個(gè)輸出,將B依次分為8組,每組6位,記B= B1B2B3B4B5B6B7B8其中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算法中唯一的非線(xiàn)性部件,當(dāng)然也就是整個(gè)算法的安全性所在。它的設(shè)計(jì)原則與過(guò)程一直因?yàn)榉N種不為人知的因素所限,而未被公布出來(lái)。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個(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的輸出。例3.1 S2的輸入為, b1 =1,b6=1,b1 b6=(11)2=3 (b2 b3 b4 b5)2=(01
24、01)2=5查S2表可知第3行第5列的輸出是15,15的二進(jìn)制表示為1111。則S2的輸出為1111。8個(gè)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 DES子密鑰生
25、成流程圖圖3.4給出了子密鑰產(chǎn)生的流程圖。首先對(duì)初始密鑰經(jīng)過(guò)置換PC-1(表2.67),將初始密鑰的8個(gè)奇偶校驗(yàn)位剔除掉,而留下真正的56比特初始密鑰。表3.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(
26、28位)連成56比特?cái)?shù)據(jù),再經(jīng)過(guò)密鑰置換PC-2(表3.7)做重排動(dòng)作,從而便得到了密鑰K1(48位)。依次類(lèi)推,便可得到K2,K3K16。表3.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è)位置。3.3 DES算法的解密過(guò)程DES算法的解密過(guò)程跟加密過(guò)程是一樣的,區(qū)別
27、僅僅在于第一次迭代時(shí)用密鑰k16,第二次k15、,最后一次用k1,算法本身沒(méi)有任何變化。第四章 DES算法用C+語(yǔ)言實(shí)現(xiàn)4.1設(shè)置密鑰函數(shù)des_setkey()此函數(shù)的功能是由64比特的密鑰產(chǎn)生16個(gè)子密鑰ki。首先將密鑰字節(jié)組key8轉(zhuǎn)換為64比特的位組,然后進(jìn)行密鑰變換PC-1(祥見(jiàn)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置換(見(jiàn)PC-2置換表),得到子密鑰k1.然后依次按循環(huán)左移LSi(I=216,循環(huán)次數(shù)見(jiàn)循環(huán)左移規(guī)則), PC-
28、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 rotatel(boo
29、l *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比特的輸出。這個(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
30、(out,tmp,len);(2)e_table()E置換表,作用是將32比特的輸入擴(kuò)展為48比特。E輸出的48比特的數(shù)據(jù)跟生成的子密鑰進(jìn)行異或運(yùn)算,然后把得到的48比特的數(shù)據(jù)按順序分成8組,每組6比特,分別通過(guò)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
31、,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,24,14
32、,32,27,3,9,19,13,30,6,22,11,4,25。(5)xor()此函數(shù)的功能是進(jìn)行異或運(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 bittobyt
33、e(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算法的運(yùn)行函數(shù)des_run( )這個(gè)函數(shù)整個(gè)算法運(yùn)行程序的最主要部分。這個(gè)函數(shù)用于加密還是解密取決于type的類(lèi)型,如果type為encrypt,則進(jìn)行加密;如果type的類(lèi)型為decrypt,則進(jìn)行解密。void des_run(char out8,char in8, bool type) static bool m64,tmp32,*li=&m0, *ri=&m32; by
34、tetobit(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);這個(gè)函數(shù)用到以下函數(shù):(1) bytetobit()此函數(shù)的功能是將輸入的字節(jié)組轉(zhuǎn)換為位組。(2) transform()此函數(shù)是通用置換函數(shù),根據(jù)具體情況確定要執(zhí)行哪種置換。(3) mem
35、cpy()此函數(shù)是庫(kù)函數(shù),主要作用是進(jìn)行內(nèi)存單元的復(fù)制。(4) f_func() 此函數(shù)是des_run()函數(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é)組。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(str); p
36、rintf(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ù)貫穿整個(gè)函數(shù)。首先是初設(shè)密鑰,然后調(diào)用密鑰設(shè)置函數(shù)des_setkey()和DES算法的運(yùn)行函數(shù)des_run(),最后得出密文以及解密后的文字。4.5 DES的加密過(guò)程和舉
37、例設(shè)明文m=computer,密鑰k為program,它們用ASCII碼表示為:m= k= 這里的k只有56位,由于第8,16,24,32,40,48,58,64位不起作用,所以沒(méi)有賦值。也就是其中的k8 k16 k24 k32 k40 k48 k56 k64不起作用。其中的密鑰為64比特如下: k=*在這里密鑰K是在主函數(shù)中已設(shè)定,所以在程序運(yùn)行時(shí)只輸入明文就可以了。密鑰k經(jīng)過(guò)PC-1置換后,分成兩組C0,D0??傻肅0= 1011D0= 0111C0,D0 分別進(jìn)行循環(huán)左移運(yùn)算,得到C1,D1。C1= 0111D1= 1111依次類(lèi)推,C1,D1繼續(xù)進(jìn)行循環(huán)左移,最后得到C2,D2進(jìn)行循環(huán)
38、左移,得到C3,D3C16,D16。C1,D1進(jìn)行PC-2置換,得到密鑰k1,可得:K1= 依次類(lèi)推,C2,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)入S
39、4,從S4的第3行第9列的元素4,可知其輸出為0100(5) 進(jìn)入S5,從S5的第3行第6列的元素2,可知其輸出為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盒的輸出為: 最后通過(guò)P得f(R0,k1)為: L0 f(R0,k1)得到R1:R1= L1= R0= 經(jīng)過(guò)16輪的迭代最后得到:L16= R15= R16= 最后經(jīng)過(guò)IP逆置換后得到密文如下: 4.6 DES算法的分析DES算法具有極高安全性,最初,除了用窮舉
40、搜索法對(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算法作為一個(gè)標(biāo)準(zhǔn)時(shí),曾出現(xiàn)過(guò)許多的批評(píng),其中之一就是針對(duì)S盒的。DES里的所有計(jì)算,除去S盒全是線(xiàn)性的,也就是說(shuō),計(jì)算兩個(gè)輸出的異或與先將兩個(gè)對(duì)應(yīng)輸入異或再計(jì)算其輸出是相同的。作為非線(xiàn)性部件,S盒針對(duì)密碼體制的安全性至關(guān)重要。在算法提出時(shí),就有人懷疑S盒隱藏了“陷
41、門(mén)”。而美國(guó)國(guó)家安全局能夠輕易的解密消息,同時(shí)還能宣稱(chēng)DES算法是“安全”的。當(dāng)然無(wú)法否認(rèn)這一猜測(cè),然而到目前為止,并沒(méi)有任何證據(jù)證明DES里的確存在陷門(mén)。事實(shí)上,后來(lái)表明DES里的S盒是被設(shè)計(jì)成能夠防止某些類(lèi)型的攻擊的。在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)了這種攻擊。對(duì)DES算法最中肯的批評(píng)是,密鑰太短。DES算法中只用到64位密鑰中的其中56位,
42、第8、16、24、.64位8個(gè)位并未參與DES運(yùn)算,而是用作奇偶校驗(yàn)。在所有的密鑰空間中有極少量的弱密鑰,如全0和全F的密鑰等,在選擇時(shí)應(yīng)盡量避免。這一點(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),這正是
43、DES算法在應(yīng)用上的誤區(qū),留下了被人攻擊、被人破譯的極大隱患。總之,DES密鑰太短,超期服役的時(shí)間也太長(zhǎng)。新的攻擊手段不斷出現(xiàn),DES以面臨實(shí)實(shí)在在的威脅。直接的威脅還是在于專(zhuān)用設(shè)備,由于芯片的速度越來(lái)越快,造價(jià)越來(lái)越便宜,導(dǎo)致專(zhuān)用設(shè)備的造價(jià)也大大的降低。DES算法除了差分密碼分析另外兩種最重要的密碼攻擊是窮盡密鑰搜索和線(xiàn)性密碼分析。對(duì)DES算法而言,線(xiàn)性攻擊更有效。在1994年,一個(gè)實(shí)際的線(xiàn)性密碼分析由其發(fā)明者M(jìn)atsui提出。這是一個(gè)使用243對(duì)明文-密文,又用了40天來(lái)找到密鑰。這個(gè)密碼分析并未對(duì)DES的安全性產(chǎn)生實(shí)際影響,由于這個(gè)攻擊需要數(shù)目極大的明-密文對(duì),在現(xiàn)實(shí)世界中一個(gè)敵手很難積
44、攢下用同一密鑰加密的如此眾多的明-密文對(duì)。雖然DES加密算法已經(jīng)過(guò)時(shí),但它的基本理論和設(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賴(lài)溪松,韓亮,張真誠(chéng)著.計(jì)算機(jī)密碼學(xué)及其應(yīng)用M.北京:國(guó)防工業(yè)出版社,20
45、07, 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, DES is not a group,Advances in Cryptology-CRYPTO 92,Lecture Notes in Computer Science
46、740,Springer-Verlag,1993, 512-520.7盧開(kāi)橙編著.計(jì)算機(jī)密碼學(xué)計(jì)算機(jī)網(wǎng)絡(luò)中的數(shù)據(jù)保密與安全M.北京:清華大學(xué)出版社,2003年,.38-48.結(jié)束語(yǔ)經(jīng)過(guò)一個(gè)多月的學(xué)習(xí),在老師和同學(xué)的支持與幫助之下,我順利地完成了這次論文設(shè)計(jì)。使我對(duì)DES加密算法有了一定的了解,隨著Internet的高速發(fā)展和應(yīng)用,其安全越來(lái)越引起人們的關(guān)注、如何保護(hù)企業(yè)和個(gè)人在網(wǎng)絡(luò)上的敏感信息不受侵犯己成為當(dāng)前擺在人們面前的一個(gè)重大問(wèn)題。加密作為一種用來(lái)保護(hù)用戶(hù)內(nèi)部第一道安全屏障,始終受到人們的關(guān)注和重視,并成為網(wǎng)絡(luò)安全產(chǎn)品的首選。從當(dāng)初確定題目到最后一個(gè)功能模塊的完成,經(jīng)歷了無(wú)數(shù)次的錯(cuò)誤、修改代碼、重啟服務(wù)器、運(yùn)行的過(guò)程,感覺(jué)到平時(shí)學(xué)的知識(shí)是多么的淺薄,書(shū)到用時(shí)方恨少,現(xiàn)在是體驗(yàn)的真真切切。本來(lái)已經(jīng)耳熟能詳?shù)拇a,一到IDE中書(shū)寫(xiě),卻提筆忘字,這充分的反應(yīng)了我平時(shí)的基本功不扎實(shí),常用代碼的不熟練。給我以后的工作敲響了警鐘,有了努力的方向。本次設(shè)計(jì)是我工作前一次很好的演練和實(shí)踐的機(jī)會(huì),是培養(yǎng)獨(dú)立思考問(wèn)題和自學(xué)能力的鍛煉,使我
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《微波技術(shù)總結(jié)》課件
- 2022年浙江省嘉興市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2023年黑龍江省鶴崗市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2021年黑龍江省齊齊哈爾市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2024年內(nèi)蒙古自治區(qū)烏海市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 《夢(mèng)想學(xué)堂使用手冊(cè)》課件
- 經(jīng)典搞笑句子
- 英語(yǔ)請(qǐng)假條的格式
- 遼寧省本溪市(2024年-2025年小學(xué)六年級(jí)語(yǔ)文)統(tǒng)編版小升初模擬(上學(xué)期)試卷及答案
- 2025年電池化學(xué)品項(xiàng)目規(guī)劃申請(qǐng)報(bào)告模板
- GB 19272-2024室外健身器材的安全通用要求
- 2024版企業(yè)股權(quán)收購(gòu)并購(gòu)重組方案合同3篇
- 2024AIGC創(chuàng)新應(yīng)用洞察報(bào)告
- 統(tǒng)編版2024-2025學(xué)年三年級(jí)上冊(cè)語(yǔ)文期末情景試卷(含答案)
- 2024北京通州初三(上)期末數(shù)學(xué)試卷(含答案解析)
- 市場(chǎng)營(yíng)銷(xiāo)習(xí)題庫(kù)(附參考答案)
- 2024年馬拉松比賽項(xiàng)目合作計(jì)劃書(shū)
- 2024年演出經(jīng)紀(jì)人資格《思想政治與法律基礎(chǔ)》考前必刷必練題庫(kù)500題(含真題、必會(huì)題)
- 苗圃購(gòu)銷(xiāo)合同范本
- 《二十四節(jié)氣融入幼兒園教育活動(dòng)的個(gè)案研究》
- 麻醉與舒適醫(yī)療
評(píng)論
0/150
提交評(píng)論