




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
網(wǎng)絡(luò)與信息安全》課程設(shè)計(jì)報(bào)告班級(jí):07網(wǎng)絡(luò)工程(3)班學(xué)號(hào): 姓名:韓立偉題目: 加密軟件的設(shè)計(jì)評(píng)閱:成績(jī):2010-1-07RSA算法加密軟件的設(shè)計(jì)摘要:分析RSA算法的應(yīng)用現(xiàn)狀,論證文件加密應(yīng)用RSA算法的可行性和意義。設(shè)計(jì)一套完整實(shí)用的RSA文件加密解決方案,具體編碼實(shí)現(xiàn)。對(duì)RSA算法進(jìn)行研究,從常規(guī)RSA算法出發(fā),用C#實(shí)現(xiàn)RSA加密算法類庫(kù),并在32位windows平臺(tái)封裝成組件。在.Net平臺(tái)引用此組件,實(shí)現(xiàn)可以對(duì)任意文件進(jìn)行RSA加密操作的窗體應(yīng)用程序。經(jīng)過(guò)加密的文件以及密鑰文件都是文本文件。給出關(guān)鍵類類圖、整個(gè)應(yīng)用程序的結(jié)構(gòu)描述文檔、關(guān)鍵模塊流程圖、較詳細(xì)的接口文檔、所有源代碼。對(duì)應(yīng)用程序進(jìn)行測(cè)試,對(duì)測(cè)試結(jié)果進(jìn)行分析研究,進(jìn)而對(duì)應(yīng)用程序進(jìn)行改進(jìn),對(duì)關(guān)鍵算法進(jìn)行盡可能的優(yōu)化,最終得到一個(gè)在windows運(yùn)行的可以用指定密鑰對(duì)任意文件進(jìn)行RSA加密并可解密的完整應(yīng)用程序,和一些相關(guān)的可移植組件。關(guān)鍵詞:rsa,RSA算法,文件加密,加密成文本目錄TOC\o"1-5"\h\z\o"CurrentDocument"第1章RSA應(yīng)用現(xiàn)狀及應(yīng)用于文件加密的分析 ?4\o"CurrentDocument"RSA算法介紹與應(yīng)用現(xiàn)狀 .4\o"CurrentDocument"RSA應(yīng)用于文件加密的分析 .5\o"CurrentDocument"1.2.1文件加密使用RSA的可行性 5\o"CurrentDocument"1.2.2文件加密使用RSA的意義 6\o"CurrentDocument"第2章RSA文件加密軟件的設(shè)計(jì)與實(shí)現(xiàn) 7\o"CurrentDocument"2.1需求分析與總體設(shè)計(jì) 7\o"CurrentDocument"功能分析 7\o"CurrentDocument"工程方案選擇 8\o"CurrentDocument"2.2各部分的設(shè)計(jì)與開發(fā) 10\o"CurrentDocument"2.2.1實(shí)現(xiàn)RSA加密算法的C#核心類庫(kù) 10\o"CurrentDocument"3.2測(cè)試數(shù)據(jù)與分析改進(jìn) 14\o"CurrentDocument"3.2.1密鑰生成測(cè)試 14\o"CurrentDocument"3.2.2數(shù)據(jù)輸入輸出測(cè)試 16\o"CurrentDocument"3.2.3加密解密測(cè)試 16\o"CurrentDocument"總結(jié)與體會(huì) .17致謝 .17參考文獻(xiàn)…………17—1—前言RSA公鑰加密算法是第一個(gè)既能用于數(shù)據(jù)加密也能用于數(shù)字簽名的算法。它易于理解和操作,也十分流行。算法的名字以發(fā)明者的姓氏首字母命名:RonRivest,AdiShamir和LeonardAdleman。雖然自1978年提出以來(lái),RSA的安全性一直未能得到理論上的證明,但它經(jīng)歷了各種攻擊,至今(2007年)未被完全攻破。隨著越來(lái)越多的商業(yè)應(yīng)用和標(biāo)準(zhǔn)化工作,RSA已經(jīng)成為最具代表性的公鑰加密技術(shù)。VISA、MasterCard、IBM、Microsoft等公司協(xié)力制定的安全電子交易標(biāo)準(zhǔn)(SecureElectronicTransactions,SET)就采用了標(biāo)準(zhǔn)RSA算法,這使得RSA在我們的生活中幾乎無(wú)處不在。網(wǎng)上交易加密連接、網(wǎng)上銀行身份驗(yàn)證、各種信用卡使用的數(shù)字證書、智能移動(dòng)電話和存儲(chǔ)卡的驗(yàn)證功能芯片等,大多數(shù)使用RSA技術(shù)。當(dāng)今公鑰加密更廣泛應(yīng)用于互聯(lián)網(wǎng)身份認(rèn)證,本課題將公鑰加密算法RSA應(yīng)用于小型文件加密。將任意文件加密成文本的解決方案,使其使用更加靈活。整個(gè)工程的分層設(shè)計(jì)給引用移植和后續(xù)開發(fā)帶來(lái)便利。第1章RSA應(yīng)用現(xiàn)狀及應(yīng)用于文件加密的分析1.1RSA算法介紹與應(yīng)用現(xiàn)狀RSA算法可以簡(jiǎn)單敘述如下:<密鑰生成>取素?cái)?shù)p,q,令n=pXq.取與(p-1)X(q-1)互素的整數(shù)e,由方程dXe=l(mod(p-1)X(q-1))解出d,二元組(e,n)作為公開密鑰,二元組(d,n)作為私有密鑰.<加密解密>b=aemodn,c=bdmodn.附錄中給出了證明a=c(modn).RSA公開密鑰加密算法自20世紀(jì)70年代提出以來(lái),已經(jīng)得到了廣泛認(rèn)可和應(yīng)用。發(fā)展至今,電子安全領(lǐng)域的各方面已經(jīng)形成了較為完備的國(guó)際規(guī)范。RSA作為最重要的公開密鑰算法,在各領(lǐng)域的應(yīng)用數(shù)不勝數(shù)。RSA在硬件方面,以技術(shù)成熟的IC應(yīng)用于各種消費(fèi)類電子產(chǎn)品。RSA在軟件方面的應(yīng)用,主要集中在Internet上。加密連接、數(shù)字簽名和數(shù)字證書的核心算法廣泛使用RSA。日常應(yīng)用中,有比較著名的工具包OpenSSL(SSL,SecuritySocketLayer,是一個(gè)安全傳輸協(xié)議,在Internet上進(jìn)行數(shù)據(jù)保護(hù)和身份確認(rèn)。OpenSSL是一個(gè)開放源代碼的實(shí)現(xiàn)了SSL及相關(guān)加密技術(shù)的軟件包,由加拿大的EricYang等發(fā)起編寫的。相關(guān)詳細(xì)介紹見/about/)°0penSSL應(yīng)用RSA實(shí)現(xiàn)簽名和密鑰交換,已經(jīng)在各種操作系統(tǒng)得到非常廣泛的應(yīng)用。另外,家喻戶曉的IE瀏覽器,自然也實(shí)現(xiàn)了SSL協(xié)議,集成了使用RSA技術(shù)的加密功能,結(jié)合MD5和SHA1,主要用于數(shù)字證書和數(shù)字簽名,對(duì)于習(xí)慣于使用網(wǎng)上購(gòu)物和網(wǎng)上銀行的用戶來(lái)說(shuō),幾乎天天都在使用RSA技術(shù)。RSA更出現(xiàn)在要求高度安全穩(wěn)定的企業(yè)級(jí)商務(wù)應(yīng)用中。在當(dāng)今的企業(yè)級(jí)商務(wù)應(yīng)用中,不得不提及使用最廣泛的平臺(tái)j2ee。事實(shí)上,在j2se的標(biāo)準(zhǔn)庫(kù)中,就為安全和加密服務(wù)提供了兩組API:JCA和JCE。JCA(JavaCryptographyArchitecture)提供基本的加密框架,如證書、數(shù)字簽名、報(bào)文摘要和密鑰對(duì)產(chǎn)生器;JCA由幾個(gè)實(shí)現(xiàn)了基本的加密技術(shù)功能的類和接口組成,其中最主要的是java.security包,此軟件包包含的是一組核心的類和接口,Java中數(shù)字簽名的方法就集中在此軟件包中。JCE(JavaCryptographyExtension)在JCA的基礎(chǔ)上作了擴(kuò)展,JCE也是由幾個(gè)軟件包組成,其中最主要的是javax.crypto包,此軟件包提供了JCE加密技術(shù)操作API。javax.crypto中的Cipher類用于具體的加密和解密。在上述軟件包的實(shí)現(xiàn)中,集成了應(yīng)用RSA算法的各種數(shù)據(jù)加密規(guī)范(RSA算法應(yīng)用規(guī)范介紹參見:/rsalabs/node.asp?id=2146,這些API內(nèi)部支持的算法不僅僅只有RSA,但是RSA是數(shù)字簽名和證書中最常用的),用戶程序可以直接使用java標(biāo)準(zhǔn)庫(kù)中提供的API進(jìn)行數(shù)字簽名和證書的各種操作。單機(jī)應(yīng)用程序使用RSA加密尚比較少見,例如使用RSA加密任意一個(gè)文件。RSA應(yīng)用于文件加密的分析1.2.1文件加密使用RSA的可行性通過(guò)1.1節(jié)的論述,不難看出RSA當(dāng)今的應(yīng)用多在于數(shù)字簽名和證書等方面。之所以只應(yīng)用于這些短小數(shù)據(jù)的加密解密,是因?yàn)镽SA算法加密極慢,速度是DES對(duì)稱密鑰加密速度的千分之一左右。正是因?yàn)檫@樣,把RSA應(yīng)用于普通文件加密的想法一直被忽略。通常文件被想象成大數(shù)據(jù)塊,但是實(shí)際上在日常應(yīng)用中,有些極其重要的文本資料是并不太大的,比如因擔(dān)心遺忘而用普通文本記錄的銀行帳號(hào)和密碼、不應(yīng)被陌生人知道的重要電話號(hào)碼、幾千字節(jié)大的重要小圖片等。其實(shí)從一個(gè)簡(jiǎn)單的角度來(lái)說(shuō),既然RSA用于數(shù)字簽名可行,那就完全可以用于同樣大小的普通文件。對(duì)于較大的文件,如果分成與數(shù)字簽名同樣大小的段(這里假設(shè)數(shù)字簽名較短,不分段一次計(jì)算加密完成),分開的各段逐一進(jìn)行加密運(yùn)算,那所需要的時(shí)間也只是按文件大小線性的增長(zhǎng)。通常數(shù)字簽名為幾十字節(jié),加密運(yùn)算并不需要很長(zhǎng)的等待,這就說(shuō)明對(duì)于幾百字節(jié)或一兩K字節(jié)大小的文件來(lái)說(shuō),如果進(jìn)行RSA加密,并不會(huì)是非常漫長(zhǎng)的工作。當(dāng)然,如果文件更大,加密就顯得十分漫長(zhǎng)了。比如按前面敘述的45毫秒大數(shù)運(yùn)算程序推理,加密1M字節(jié)大小的文件需要約1天的時(shí)間。所以,要在普通PC用幾百位以上的長(zhǎng)密鑰RSA加密文件,文件不能過(guò)大,一般可以接受的上限是幾KB。如果要在較短時(shí)間內(nèi)加密大文件,需要縮短密鑰長(zhǎng)度以減小運(yùn)算量,這將帶來(lái)安全性隱患。本文的第3章將根據(jù)實(shí)際調(diào)試好的軟件,測(cè)試給出具體的時(shí)間消耗數(shù)據(jù)。例如,在一臺(tái)配置為AMDAthron2800+,外頻333MHZ,物理內(nèi)存512MB的PC上測(cè)試實(shí)現(xiàn)的軟件,以560bit的n逐字節(jié)加密一個(gè)1KB大小的文件需要55秒。通常記錄如銀行帳號(hào)密碼等重要數(shù)據(jù)的文本文件大小不足百字節(jié),加密只需要數(shù)秒鐘。所以對(duì)于小型文件,進(jìn)行較長(zhǎng)密鑰的RSA加密是完全可行的。文件加密使用RSA的意義如1.2.1節(jié)所述,小型文件加密可以使用RSA。比如,因擔(dān)心遺忘而用普通文本記錄的銀行帳號(hào)和密碼、不應(yīng)被陌生人知道的重要電話號(hào)碼、幾千字節(jié)大的重要小圖片等??尚械姆椒ㄎ幢厥潜匾?,本小節(jié)討論何種文件適合用非對(duì)稱密鑰加密,即RSA加密文件的意義所在。對(duì)于前面敘述的帶有重要信息的小型文本和二進(jìn)制數(shù)據(jù)的維護(hù),①如果不加密,將無(wú)法放心的保存在計(jì)算機(jī)上,尤其是連網(wǎng)的或機(jī)房里的公共計(jì)算機(jī)。②如果借助功能強(qiáng)大的大型多用戶數(shù)據(jù)保護(hù)程序維護(hù)幾個(gè)小型文件,顯得十分煩瑣,好比殺雞用牛刀。③如果采用對(duì)稱密鑰加密,即加密解密的密鑰相同,只適合部分情況。在某些情況下,使用對(duì)稱密鑰加密文件,交流使用不夠方便。比如,張三由于某種原因,需要將自己的某個(gè)文件在公共計(jì)算機(jī)上留給李四,而不希望別人看到內(nèi)容。如果采用對(duì)稱密鑰加密,張三和李四提前約好一個(gè)密碼就可以。但是如果張三想要在同一臺(tái)公共計(jì)算機(jī)上再留一個(gè)秘密文件給王五,而不希望別人看到,就要和王五另外約定一個(gè)密碼。如果需要在這臺(tái)公共計(jì)算機(jī)上留十個(gè)文件給不同的人,自己就要記和十個(gè)人約定好的密碼,這樣以來(lái)交流起來(lái)不夠方便,因?yàn)閷?duì)于張三,要自己維護(hù)太多的密鑰。非對(duì)稱密鑰(公開密鑰方式)恰好解決這樣的問(wèn)題。只要大家都在這臺(tái)計(jì)算機(jī)或這臺(tái)計(jì)算機(jī)可以訪問(wèn)到的地方,留下自己的公開密鑰,一切就變的容易解決了。張三要留給李四的文件,就用李四的公開密鑰加密,要留給王五的文件,就用王五的公開密鑰加密。李四和王五只要把留給自己的文件用自己的私有密鑰解密,就可以得到留給自己的文件了。顯然,非對(duì)稱密鑰體制更適合多用戶交流,而將這種加密方式直接應(yīng)用于文件加密,使我們?cè)诠_場(chǎng)合的交流更加靈活方便。一種更實(shí)際的情況是,我們想通過(guò)Internet上的公眾論壇或郵件發(fā)送重要保密信息給某人。例如發(fā)送一個(gè)銀行帳號(hào)和密碼給某人。這種情況要保證安全,在當(dāng)今互聯(lián)網(wǎng)絡(luò)上是比較棘手的。①如果用公眾論壇直接留言給指定用戶,論壇管理員和服務(wù)器管理員通常有方法看到數(shù)據(jù)。②如果發(fā)送郵件,雖然傳送過(guò)程是加密的,但是密碼畢竟是由郵件服務(wù)器維護(hù),所以系統(tǒng)管理員通常也有辦法看到內(nèi)容。問(wèn)題的關(guān)鍵在于我們所有的數(shù)據(jù)包括密鑰保存在服務(wù)器之上。在這種情況下,我們需要使用公開密鑰方式,并自己維護(hù)私有密鑰oRSA文件加密可以靈活的解決這些問(wèn)題。例如,我們可以將任意一個(gè)文件用某人的公開密鑰加密變換成一段可以復(fù)制粘貼的文本,然后粘貼在公眾互聯(lián)網(wǎng)上,對(duì)方只需把需要解密的文本復(fù)制保存成一個(gè)文本文件,在本地機(jī)用自己的私有密鑰解密即可。我們可以將自己的私有密鑰通過(guò)DES加密后保存在自己的移動(dòng)磁盤上,使用的時(shí)候只要將其解密讀取即可,用完后立即從當(dāng)前操作環(huán)境清除。這樣,我們自己維護(hù)自己的私有密鑰,利用簡(jiǎn)單并且公開的方式,可以安全傳送任意小型數(shù)據(jù),包括一切二進(jìn)制文件。所以,對(duì)于使用小型文件進(jìn)行數(shù)據(jù)交換的情況,更好的方案是通過(guò)一個(gè)小型應(yīng)用程序?qū)@些文件進(jìn)行非對(duì)稱密鑰加密。為了適合前面敘述的在公共BBS與特定的某人交流重要保密信息的情況,加密生成的數(shù)據(jù)應(yīng)該是文本,這樣可以方便復(fù)制粘貼。綜上所述,使用前面敘述的方式加密文件有兩點(diǎn)重要意義:①應(yīng)用非對(duì)稱密鑰加密任意文件,使非對(duì)稱密鑰的應(yīng)用不僅僅局限于互聯(lián)網(wǎng)絡(luò)。②非對(duì)稱加密后的數(shù)據(jù)變換成文本,使得我們可以通過(guò)幾乎任何方式安全傳遞任意文件,比如在只有http的環(huán)境使用xml方式。第2章RSA文件加密軟件的設(shè)計(jì)與實(shí)現(xiàn)2.1需求分析與總體設(shè)計(jì)2.1.1功能分析經(jīng)過(guò)1.2.2節(jié)的論述,我們可以將對(duì)軟件的要求總結(jié)如下:可以按要求的位數(shù)生成非對(duì)稱密鑰。可以保存密鑰和裝載密鑰,密鑰保存為純文本。可以用指定密鑰以RSA算法加密任意一個(gè)文件,加密生成的數(shù)據(jù)為純文本??梢匝b載加密過(guò)的文件,并用指定的密鑰解密還原出原文件。提示信息完整、操作舒適、圖形界面雅觀按上述描述,給出UseCase和Statechart如圖2T。
確定了戟幾的密胡決型(pibhckeyorprwatekey)密韜文件成功打開并讀入了昭應(yīng)?■了RSA相關(guān)的各*
笄戰(zhàn)功顯示了更新結(jié)果AT7k:r^Ttc-
了保存撫柞成功中中「云賓培:E甲『I空絹確定了戟幾的密胡決型(pibhckeyorprwatekey)密韜文件成功打開并讀入了昭應(yīng)?■了RSA相關(guān)的各*
笄戰(zhàn)功顯示了更新結(jié)果AT7k:r^Ttc-
了保存撫柞成功中中「云賓培:E甲『I空絹I書竹蓋存內(nèi)publickmyu-privatAkey)功寫入丈件圖形用=界■血給出11童航辭童云,t£J尖下I 準(zhǔn)務(wù)奸了將捉作的皴據(jù)罐存區(qū)〔從:仃衿、r戸九陸丈辭密的數(shù)據(jù)圖2-1本項(xiàng)目的UseCase和Statechart根據(jù)以上分析,一般來(lái)說(shuō),需要進(jìn)行編碼的程序有①RSA密鑰生成②RSA加密解密③任意文件的讀取和保存操作④各環(huán)節(jié)必要的數(shù)據(jù)編碼轉(zhuǎn)換⑤圖形操作界面。2.1.2工程方案選擇結(jié)合現(xiàn)有的常見開發(fā)模式綜合分析,有多種實(shí)現(xiàn)方案,下面陳述其中幾種,并分析選擇一種解決方案,并給出工程框架。(1.)整個(gè)工程使用java平臺(tái)實(shí)現(xiàn)RSA密鑰生成、RSA加密解密的功能實(shí)現(xiàn)十分簡(jiǎn)單,因?yàn)闃?biāo)準(zhǔn)庫(kù)中集成幾乎所有功能,不需要從RSA算法出發(fā)進(jìn)行編碼。在j2se標(biāo)準(zhǔn)庫(kù)中,javax.crypto中的Cipher類用于具體的加密和解密,java.security包直接提供了數(shù)字簽名的相關(guān)方法。因?yàn)橛袕?qiáng)大的標(biāo)準(zhǔn)庫(kù)支持,文件的讀取和保存操作、各環(huán)節(jié)必要的數(shù)據(jù)編碼轉(zhuǎn)換、圖形操作界面的實(shí)現(xiàn)也很簡(jiǎn)單(使用java.iojava.awt或javax.swing等包),如果結(jié)合一種快速開發(fā)的IDE,比如JBuilder,整個(gè)軟件可以在很短的時(shí)間內(nèi)編碼完成。如果不考慮非PC設(shè)備和機(jī)器效率等問(wèn)題,java平臺(tái)幾乎是最佳解決方案。但是缺點(diǎn)也很明顯,如果想把核心算法和功能應(yīng)用到非PC設(shè)備(例如嵌入式手持設(shè)備),則要求設(shè)備上有支持前面提及的加密類庫(kù)的CVM;對(duì)于在PC上運(yùn)行,JVM的數(shù)據(jù)運(yùn)算速度要遠(yuǎn)遠(yuǎn)落后于本地化代碼在PC上的運(yùn)算速度,本軟件需要進(jìn)行大量運(yùn)算,這一點(diǎn)不適合由java完成。(2.)整個(gè)工程使用.Net平臺(tái)實(shí)現(xiàn)與使用java平臺(tái)完全類似,加密等有.Net基礎(chǔ)類庫(kù)的支持,不需要大量編碼實(shí)現(xiàn),另外由于VisualStudio的強(qiáng)大便利,這種規(guī)模的工程可以十分迅速的完成。缺點(diǎn)是只能在有微軟.NetFramework的環(huán)境運(yùn)行,在Windows操作系統(tǒng),.NetFramework的機(jī)器效率好于java平臺(tái),但是相比于本地化的代碼,還是十分拖沓的。(3.)整個(gè)工程使用Windows本地化程序?qū)崿F(xiàn)在不應(yīng)用Windows或第三方現(xiàn)成組件的情況下,需從RSA算法出發(fā)編碼實(shí)現(xiàn)。其他各功能的設(shè)計(jì)開發(fā),如文件操作、數(shù)據(jù)編碼轉(zhuǎn)換和圖形界面等,可以使用ATL、MFC或WindowsAPI實(shí)現(xiàn)。這種工程幾乎是為Windows量身訂做,執(zhí)行效率最好。但是對(duì)于非PC設(shè)備,只能方便的移植到運(yùn)行Windows嵌入式操作系統(tǒng)的設(shè)備,向其他操作系統(tǒng)移植困難,需要重新編寫大量代碼。通常解決本地化代碼的移植問(wèn)題,都是使用C++標(biāo)準(zhǔn)庫(kù),即功能盡量多的由C++標(biāo)準(zhǔn)庫(kù)完成,這樣在移植的時(shí)候,只需要重新編寫操作系統(tǒng)相關(guān)的代碼即可。這種開發(fā)方式比起前兩種,缺點(diǎn)就是設(shè)計(jì)開發(fā)模式陳舊,代碼煩瑣,不方便維護(hù);流行的Net上的語(yǔ)言引用各種功能比較麻煩。(4.)考慮可能的復(fù)用,針對(duì)具體情況分層開發(fā)實(shí)現(xiàn)綜合考慮復(fù)用性、可維護(hù)性和執(zhí)行效率,較妥當(dāng)?shù)姆椒ㄊ欠謱釉O(shè)計(jì)。核心的RSA算法由C++類庫(kù)實(shí)現(xiàn),針對(duì)用戶所在的操作系統(tǒng)封裝成本地化組件。其他各功能如文件操作、數(shù)據(jù)編碼轉(zhuǎn)換和圖形界面等,由托管代碼借助虛擬機(jī)平臺(tái)標(biāo)準(zhǔn)庫(kù)的功能快速開發(fā)實(shí)現(xiàn)(本文針對(duì)選用.Net上的C#論述,選用java由JNI或其他方式調(diào)用本地組件,設(shè)計(jì)模式上是完全類似的)。這種開發(fā)方式,核心功能集中在最底層,在不斷的封裝中針對(duì)具體環(huán)境對(duì)組件功能不斷擴(kuò)充,任意一個(gè)層面的封裝都可以被直接應(yīng)用到其他項(xiàng)目,比如在Web使用以前為某窗體程序?qū)懙慕M件、給嵌入式設(shè)備交叉編譯算法庫(kù)等。但是每一層都需要依賴底層的所有組件。圖2-2形象的說(shuō)明了分層設(shè)計(jì)給復(fù)用帶來(lái)的好處。選用第四種設(shè)計(jì)方案,上層使用C#,底層算法使用C++,可以由一個(gè)VisualStudio解決方案管理,給調(diào)試帶來(lái)極大的方便。整個(gè)工程分四層,實(shí)現(xiàn)RSA加密算法的C++核心類庫(kù)、封裝C++核心類庫(kù)的DLL組件、引用DLL的.Net類、實(shí)現(xiàn)文件操作功能的.Net窗體應(yīng)用程序。2.2節(jié)詳細(xì)介紹各部分的設(shè)計(jì)與開發(fā)??紤]到工作量,本軟件加解密數(shù)據(jù)沒有嚴(yán)格遵從RSA標(biāo)準(zhǔn)PKCS#1,而是在滿足設(shè)計(jì)要求的前提下,以一種盡可能簡(jiǎn)單的方式實(shí)現(xiàn)加密和解密。2.2各部分的設(shè)計(jì)與開發(fā)2.2.1實(shí)現(xiàn)RSA加密算法的C#核心類庫(kù)(1.)大數(shù)存儲(chǔ)和四則運(yùn)算根據(jù)RSA算法的要求,為了實(shí)現(xiàn)大數(shù)的各種復(fù)雜運(yùn)算,需要首先實(shí)現(xiàn)大數(shù)存儲(chǔ)和基本四則運(yùn)算的功能。當(dāng)今開源的大數(shù)運(yùn)算C++類有很多,多用于數(shù)學(xué)分析、天文計(jì)算等,本文選用了一個(gè)流行的大數(shù)類型,并針對(duì)RSA算法和本項(xiàng)目的具體需要對(duì)其進(jìn)行了擴(kuò)充和改進(jìn)。下面簡(jiǎn)單介紹大數(shù)存儲(chǔ)和四則運(yùn)算的實(shí)現(xiàn)原理。最先完成的功能是大數(shù)的存儲(chǔ),存儲(chǔ)功能由flex_unit類提供。和普通的類型一樣,每一個(gè)大數(shù)對(duì)應(yīng)一個(gè)flex_unit的實(shí)例。類flex_unit中,用一個(gè)無(wú)符號(hào)整數(shù)指針unsigned*a指向一塊內(nèi)存空間的首地址,這塊內(nèi)存空間用來(lái)存儲(chǔ)一個(gè)大數(shù),所以可以說(shuō),大數(shù)是被存儲(chǔ)在一個(gè)以u(píng)nsigned為單元的線性組中。在方法voidreserve(unsignedx)中通過(guò)C++的new來(lái)給a開辟空間,當(dāng)flex_unit的實(shí)例中被存入比當(dāng)前存儲(chǔ)的數(shù)更大的數(shù)時(shí),就會(huì)調(diào)用reserve來(lái)增加存儲(chǔ)空間,但是當(dāng)flex_unit的實(shí)例中被存入比當(dāng)前存儲(chǔ)的數(shù)更小的數(shù)時(shí),存儲(chǔ)空間并不會(huì)自動(dòng)緊縮,這是為了在運(yùn)算的時(shí)候提高執(zhí)行效率。結(jié)合指針a,有兩個(gè)重要的無(wú)符號(hào)整數(shù)來(lái)控制存儲(chǔ),unsignedz和unsignedn,z是被分配空間的單元數(shù),隨數(shù)字變大不斷增大,不會(huì)自己緊縮,而n是當(dāng)前存儲(chǔ)的大數(shù)所占的單元數(shù),組成一個(gè)大數(shù)的各unsigned單元的存入和讀出由set、get方法完成,變量n是只讀的。類型unsigned在32位機(jī)是32位的,所以對(duì)于flex_unit這個(gè)大數(shù)類來(lái)說(shuō),每個(gè)大數(shù)最大可以達(dá)到個(gè)字節(jié)長(zhǎng),這已經(jīng)超過(guò)了32位機(jī)通常的最大內(nèi)存容量,所以是足夠進(jìn)行RSA所需要的各種運(yùn)算的。圖2-3形象的說(shuō)明了大數(shù)存儲(chǔ)類flex_unit對(duì)大數(shù)的管理。(2.)尋找素?cái)?shù)?Eratosthenes篩選與Fermat素?cái)?shù)測(cè)試首先要說(shuō)明的是,事實(shí)上,當(dāng)今的計(jì)算機(jī)還不足以聰明到立刻計(jì)算生成一個(gè)很大的隨機(jī)素?cái)?shù)。一般來(lái)說(shuō),要得到100%準(zhǔn)確的大素?cái)?shù),都是通過(guò)查已經(jīng)計(jì)算好的素?cái)?shù)表的方式。但是素?cái)?shù)表的方式給RSA的安全性帶來(lái)隱患,因?yàn)楣粽呷绻玫搅嗣荑€生成時(shí)所使用的素?cái)?shù)表,攻破RSA加密的難度將會(huì)大大降低。本程序起初使用素?cái)?shù)表的方式,后來(lái)考慮到安全性問(wèn)題,生成密鑰的方式改為隨機(jī)計(jì)算生成。這樣,短時(shí)間內(nèi)如果要得到一個(gè)100%準(zhǔn)確的大素?cái)?shù)是很困難的,只能以盡可能高的概率得到一個(gè)大素?cái)?shù)。經(jīng)過(guò)和小節(jié),所有的大數(shù)運(yùn)算功能都準(zhǔn)備完畢,在此基礎(chǔ)上,本工程將尋找素?cái)?shù)的功能置于類Prime_factory_san之中。外部只要調(diào)用本類實(shí)例的成員vlongfind_prime(vlong&start)就可以以大數(shù)start為起點(diǎn),得到一個(gè)數(shù),這個(gè)數(shù)是素?cái)?shù)的概率很大。下面介紹尋找素?cái)?shù)的原理。首先在需要尋找素?cái)?shù)的整數(shù)范圍內(nèi)對(duì)整數(shù)進(jìn)行篩選,把所有確知為合數(shù)的整數(shù)排除出去。程序中構(gòu)造了一個(gè)數(shù)組b[],大小為一輪素?cái)?shù)搜索的范圍,記搜索范圍大小為SSOb[0]到b[SS]分別對(duì)應(yīng)大數(shù)start到start+SS。b[]中所有元素先初始化為1,如果對(duì)應(yīng)的大數(shù)確定為合數(shù),就將b[]中對(duì)應(yīng)的元素置為0。最后,只需對(duì)那些b[]中為1的元素對(duì)應(yīng)的大數(shù)進(jìn)行比較確切的素?cái)?shù)測(cè)試即可,只要被測(cè)試的數(shù)是素?cái)?shù)概率達(dá)到一定門限,就判這個(gè)數(shù)為素?cái)?shù)。這樣做既保證了這段程序可以在短時(shí)間內(nèi)執(zhí)行完,又保證了可以以比較高的準(zhǔn)確度得到素?cái)?shù)。函數(shù)find_prime先把b□的所有元素賦值為1,然后按參數(shù)start給標(biāo)記數(shù)組b[]的各元素賦0值。下面描述標(biāo)記數(shù)組b[]的賦0值算法。首先,在類Prime_factory_san被構(gòu)造的時(shí)候,構(gòu)造函數(shù)中從2開始搜尋一些小素?cái)?shù),記錄在數(shù)組pl[]中,共記錄NP個(gè)。這些小素?cái)?shù)用來(lái)當(dāng)作因子,他們的倍數(shù)將被從大素?cái)?shù)搜索范圍內(nèi)剔除(即把數(shù)組b[]的對(duì)應(yīng)元素標(biāo)記為0),剔除的程序代碼如下。for(i=0;i<np;i++){unsignedp=pl[i];unsignedr=start%vlong(p);if(r)r=p-r;while(r<SS)
{b[r]=0;r+=p;}}這里利用start對(duì)各小素?cái)?shù)因子p求模的辦法,得到當(dāng)前p在素?cái)?shù)搜索范圍內(nèi)的最小倍數(shù)在b[]中的對(duì)應(yīng)位置,將其剔除后,不斷后移p個(gè)位置,將這個(gè)小素?cái)?shù)因子p在搜索范圍內(nèi)的所有倍數(shù)全部剔除,如圖2-5所示。在完成對(duì)所有小素?cái)?shù)因子的類似操作后,他們的倍數(shù)在搜索范圍內(nèi)的位置標(biāo)記b[r]被全部標(biāo)記為0。實(shí)際上這就是Eratosthenes篩選法。b[x]b[x+p]b[x+2p]b[x+3p]b[x+4p] b[x+5p]數(shù)軸素?cái)?shù)搜索范圍start到start+SS小素?cái)?shù)因b[x]b[x+p]b[x+2p]b[x+3p]b[x+4p] b[x+5p]數(shù)軸素?cái)?shù)搜索范圍start到start+SS小素?cái)?shù)因.子P搜索起點(diǎn)start對(duì)應(yīng)b[0]住巨離start:p-(start丿—modp)$:剔除。b中對(duì)應(yīng)元素標(biāo)記為0設(shè)在剛執(zhí)行到while時(shí)r>0x=r圖2-5在素?cái)?shù)搜索范圍內(nèi)剔除小素?cái)?shù)因子p的倍數(shù)接下來(lái),對(duì)可能為素?cái)?shù)的數(shù)(即標(biāo)記數(shù)組b[]中值為1的元素對(duì)應(yīng)的數(shù))進(jìn)行素?cái)?shù)測(cè)試。數(shù)論學(xué)家利用費(fèi)馬小定理研究出了多種素?cái)?shù)測(cè)試方法,本程序使用一種最簡(jiǎn)單的方式,直接應(yīng)用費(fèi)馬小定理。取一個(gè)與p互素的整數(shù)A,對(duì)于大素?cái)?shù)p來(lái)說(shuō)應(yīng)該滿足Ap-1modp=1,但是我們把p代入一個(gè)大整數(shù),滿足這個(gè)關(guān)系的數(shù)不一定是素?cái)?shù)。這時(shí)我們改變A,進(jìn)行多次測(cè)試,如果多次測(cè)試都通過(guò),這個(gè)數(shù)是素?cái)?shù)的概率就比較大。按這種原理,我們編寫素?cái)?shù)測(cè)試函數(shù)如下。intis_probable_prime_san(constvlong&p){constrep=4;//測(cè)試次數(shù)constunsignedany[rep]={2,3,5,7};//測(cè)試用的底數(shù)for(unsignedi=0;i<rep;i+=1)if(modexp(any[i],p-vlong(1),p)!=vlong(1))return0;//modexp是幕模函數(shù),按上一小節(jié)敘述的算法編碼。//這里modexp計(jì)算any[i]p-imodp。return1;}測(cè)試通過(guò),程序就判定這個(gè)數(shù)為找到的素?cái)?shù),將找到的素?cái)?shù)返回給上層程序使用。在這里其實(shí)有一個(gè)不可忽視的問(wèn)題,就是得到一個(gè)測(cè)試通過(guò)的合數(shù)。對(duì)于這種情況,RSA算法加密解密是否還可以實(shí)現(xiàn),是一個(gè)需要從數(shù)學(xué)角度論證的問(wèn)題。因?yàn)榈玫剿財(cái)?shù)的概率很高經(jīng)過(guò)一整天的生成密鑰和加密操作,沒有發(fā)現(xiàn)失敗的密鑰,所以本文暫沒有對(duì)這個(gè)問(wèn)題進(jìn)行討論。綜上所述,總結(jié)素?cái)?shù)尋找的流程,如圖2-6所示。圖2-6函數(shù)find_prime尋找素?cái)?shù)的流程框圖得到了大素?cái)?shù),即RSA算法中的p、q,我們就可以計(jì)算出密鑰,進(jìn)行加密等操作了。3.2測(cè)試數(shù)據(jù)與分析改進(jìn)3.2.1密鑰生成測(cè)試生成密鑰運(yùn)算最費(fèi)時(shí)的工作是尋找素?cái)?shù)。如小節(jié)所敘述,尋找素?cái)?shù)是一項(xiàng)頗為復(fù)雜的工作,其速度可能受以下變量的影響:RSA加密需要的n的位數(shù)(尋找素?cái)?shù)的整數(shù)起點(diǎn)大小start)、大素?cái)?shù)測(cè)試時(shí)底數(shù)A的個(gè)數(shù)(針對(duì)一個(gè)整數(shù)的素?cái)?shù)測(cè)試次數(shù))、小素?cái)?shù)因子p的個(gè)數(shù)NP、一輪尋找遍歷的整數(shù)個(gè)數(shù)SS等。其中最具影響力的因素顯然是RSA加密需要的n的位數(shù)。以下對(duì)各變量分別進(jìn)行測(cè)試,暫且忽略操作系統(tǒng)調(diào)度對(duì)測(cè)試的影響。(1.)測(cè)試加密使用的n位數(shù)對(duì)耗時(shí)的影響即在固定A、NP、SS等變量的情況下,改變加密位數(shù)n,測(cè)試密鑰生成的時(shí)間消耗情況。測(cè)試時(shí),A取4個(gè)值,分別為2、3、5、7,NP取200,SS取1000。測(cè)試PC配置為CPUCR1.7GHZ/外頻100MHZ/物理內(nèi)存512MDDR/MSI6398主板845Ultra-AD芯片組,下文測(cè)試中,未說(shuō)明PC配置的也都在同一PC完成,不再重復(fù)。在較常用的1024位RSA加密時(shí),用本軟件的算法,測(cè)試時(shí)最長(zhǎng)出現(xiàn)了17秒多的計(jì)算,雖然這對(duì)于用戶來(lái)說(shuō)時(shí)漫長(zhǎng)的等待,但是考慮到安全性,還是舍棄了素?cái)?shù)表和密鑰庫(kù)的方案,而使用大素?cái)?shù)隨機(jī)生成,用戶可以把生成的私鑰單獨(dú)加密保存在可靠的存儲(chǔ)空間內(nèi),以獲得更高的安全性。表3-1僅能從實(shí)驗(yàn)的角度直觀理解,具體到一次密鑰生成的運(yùn)算,所需要的時(shí)間是很不確定的,比如,一次1280位的密鑰生成,需要的時(shí)間完全可能比一次896位的密鑰生成時(shí)間短,由于素?cái)?shù)分布規(guī)律非常奧妙,加上測(cè)試運(yùn)算需要的時(shí)間頗長(zhǎng),這里很難給出對(duì)于一個(gè)具體位數(shù)的密鑰生成所需時(shí)間的統(tǒng)計(jì)模型。另外需要說(shuō)明的是,表3-1的加密位數(shù)在實(shí)際軟件設(shè)置時(shí)并不嚴(yán)格。這是因?yàn)椋瑢?shí)際作為參數(shù)設(shè)置的是兩個(gè)大素?cái)?shù)的搜索起點(diǎn)。如果隨機(jī)生成的起點(diǎn)整數(shù)大小比較接近更長(zhǎng)一位的整數(shù)的話(例如FFFF很接近10000),向后尋找所得到的素?cái)?shù)很可能長(zhǎng)出一位。而且,兩個(gè)k位長(zhǎng)的整數(shù)相乘的結(jié)果也未必是2k位,比如100*100=10000,相乘結(jié)果是2k-1位。所以,在表3-1實(shí)際測(cè)試填寫時(shí),加密位數(shù)可能會(huì)有幾位的差距,但是這不礙大局。(2.)測(cè)試底數(shù)A對(duì)耗時(shí)的影響為了保證生成素?cái)?shù)的成功率,A至少要有4個(gè)。如果少于4個(gè),則素?cái)?shù)測(cè)試失敗的可能性比較大,經(jīng)過(guò)測(cè)試發(fā)現(xiàn)不可以忽略。小節(jié)曾經(jīng)提到,如果素?cái)?shù)測(cè)試通過(guò)了合數(shù),就可能產(chǎn)生錯(cuò)誤的密鑰,使加密解密操作失敗。所以測(cè)試A的時(shí)候,最少有讓其取4個(gè)值。而取6個(gè)值以上,測(cè)試算法失敗的概率已經(jīng)非常小,沒有什么實(shí)用意義,所以這里測(cè)試A從4個(gè)到6個(gè)的情況。固定其他變量:n取512位和1024位(即素?cái)?shù)搜索起點(diǎn)位數(shù)設(shè)置為32和64),NP取200,SS取1000。從理論上說(shuō),對(duì)于同樣的起點(diǎn),素?cái)?shù)測(cè)試次數(shù)越多,需要的時(shí)間就越長(zhǎng)??梢钥闯觯瑢?duì)于512bit密鑰,A取從4個(gè)到6個(gè),對(duì)隨機(jī)密鑰的產(chǎn)生時(shí)間影響不大。但是對(duì)于較長(zhǎng)的1024bit密鑰,A取4個(gè)和A取6個(gè)值,密鑰生成時(shí)間產(chǎn)生明顯差距,A取6個(gè)值時(shí)生成隨機(jī)密鑰需要的平均時(shí)間比A取4個(gè)值時(shí)長(zhǎng)數(shù)秒之多。為了同時(shí)保證密鑰生成速度和素?cái)?shù)的準(zhǔn)確程度,我們?cè)趯?shí)際使用時(shí)取A為5個(gè)值,即2、3、5、7、11。(3.)測(cè)試小素?cái)?shù)因子個(gè)數(shù)NP對(duì)耗時(shí)的影響固定其他變量:A取5個(gè)分別為2、3、5、7、11,n取512位和1024位(即素?cái)?shù)搜索起點(diǎn)位數(shù)設(shè)置為32和64),SS取1000。由于測(cè)試時(shí)間漫長(zhǎng),測(cè)試的數(shù)據(jù)量比較有限。這里并沒有看出什么明顯的規(guī)律。而且通過(guò)本次測(cè)試還可以發(fā)現(xiàn),表3-3中NP為200,n為1024bit測(cè)試的一行,變量設(shè)置和表3-2中A設(shè)置為2、3、5、7、11,n為1024bit的一行完全一致(對(duì)應(yīng)還有一行n為512bit的數(shù)據(jù)變量設(shè)置一致),但是耗時(shí)平均差距相差4秒之多(512bit的一行差距不到1秒)??梢妼?duì)于長(zhǎng)密鑰,同一種情況測(cè)試5個(gè)數(shù)據(jù)取均值并不能精確的說(shuō)明問(wèn)題,除非測(cè)試得到的數(shù)據(jù)有很明顯的大幅差距,例如前面兩段測(cè)試n的位數(shù)和A的個(gè)數(shù)的耗時(shí)影響情況。這里也正是因?yàn)榍懊嫣岬降?,?duì)于大整數(shù)來(lái)說(shuō),可能出現(xiàn)在較長(zhǎng)一段區(qū)間中沒有素?cái)?shù)的情況,使得同樣設(shè)置的各次密鑰生成耗時(shí)的可能范圍很大,再加上大素?cái)?shù)分布規(guī)律奧妙,觀察5次測(cè)試結(jié)果的均值對(duì)于不很明顯的規(guī)律顯得意義不大。實(shí)際使用中,設(shè)置NP值為200。(4.)測(cè)試SS對(duì)耗時(shí)的影響同樣未發(fā)現(xiàn)明顯規(guī)律,在使用中設(shè)置SS為1000。數(shù)據(jù)輸入輸出測(cè)試主要測(cè)試文件的輸入輸出性能。實(shí)際上就是測(cè)試.Net基礎(chǔ)類庫(kù)中實(shí)現(xiàn)文件操作的System.10中的StreamReader、StreamWriter等類的讀寫性能。直接在VisualStudio調(diào)試一個(gè)簡(jiǎn)單的C#文件讀寫程序,得到本軟件
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 天然土塊銷售合同范本
- 保山云南保山隆陽(yáng)區(qū)發(fā)展和改革局招聘公益性崗位人員筆試歷年參考題庫(kù)附帶答案詳解
- 營(yíng)養(yǎng)餐合同范本
- 云南2025年云南師范大學(xué)附屬小學(xué)招聘人員筆試歷年參考題庫(kù)附帶答案詳解
- 臨滄2025年云南臨滄市耿馬自治縣人民醫(yī)院編制外護(hù)理人員招聘10人筆試歷年參考題庫(kù)附帶答案詳解
- MAY0132-生命科學(xué)試劑-MCE
- FGFR1-inhibitor-13-生命科學(xué)試劑-MCE
- DIM-C-pPhtBu-生命科學(xué)試劑-MCE
- 2-3-4-Tri-O-acetyl-β-D-glucuronide-methyl-ester-β-D-Glucopyranuronic-acid-methyl-ester-2-3-4-triacetate-生命科學(xué)試劑-MCE
- 科技引領(lǐng)下的綠色建筑材料在停車場(chǎng)的創(chuàng)新應(yīng)用
- 年產(chǎn)60萬(wàn)噸摻混肥項(xiàng)目可行性研究報(bào)告申請(qǐng)立項(xiàng)
- 2025年江蘇省中職《英語(yǔ)》學(xué)業(yè)水平考試高頻必練考試題庫(kù)400題(含答案)
- 2025年濟(jì)寧職業(yè)技術(shù)學(xué)院高職單招語(yǔ)文2018-2024歷年參考題庫(kù)頻考點(diǎn)含答案解析
- 高三一模“生存與強(qiáng)弱關(guān)系思辨”審題立意及范文
- 2025年茂名市高三年級(jí)第一次綜合測(cè)試(一模)物理試卷(含答案)
- 《電子商務(wù)法律法規(guī)》電子商務(wù)專業(yè)全套教學(xué)課件
- 《產(chǎn)后出血預(yù)防與處理指南(2023)》解讀課件
- 全套教學(xué)課件《工程倫理學(xué)》
- 江蘇省建筑與裝飾工程計(jì)價(jià)定額(2014)電子表格版
- 2024年山東經(jīng)貿(mào)職業(yè)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 清華大學(xué)考生自述
評(píng)論
0/150
提交評(píng)論