RSA算法的應(yīng)用與實(shí)現(xiàn)_第1頁(yè)
RSA算法的應(yīng)用與實(shí)現(xiàn)_第2頁(yè)
RSA算法的應(yīng)用與實(shí)現(xiàn)_第3頁(yè)
RSA算法的應(yīng)用與實(shí)現(xiàn)_第4頁(yè)
RSA算法的應(yīng)用與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專(zhuān)心-專(zhuān)注-專(zhuān)業(yè)專(zhuān)心-專(zhuān)注-專(zhuān)業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專(zhuān)心-專(zhuān)注-專(zhuān)業(yè)RSA算法的應(yīng)用與實(shí)現(xiàn)【摘 要】RSA 算法是使用最廣泛的一種非對(duì)稱(chēng)密碼體制. 在對(duì)RSA 算法的原理、算法描述等進(jìn)行研究的基礎(chǔ)上,近一步研究了RSA 算法在數(shù)字簽名、密鑰交換等方面的應(yīng)用. 最后在.NET平臺(tái)中使用C#語(yǔ)言進(jìn)行編程,實(shí)現(xiàn)RSA數(shù)字簽名算法?!娟P(guān)鍵詞】RSA算法;數(shù)字簽名;加密;解密1 RSA簡(jiǎn)述隨著IT技術(shù)迅猛的發(fā)展,各個(gè)行業(yè)的信息化、網(wǎng)絡(luò)化的增強(qiáng),信息的安全性越來(lái)越得到人們的重視。一個(gè)完整的、先進(jìn)的信息系統(tǒng)無(wú)不考慮到信息安全技術(shù)的應(yīng)用。RSA加密體制

2、是一種公開(kāi)的密碼體制。RSA公匙密碼體制是又R.L.Rivest,A.Shamir和L.Adelman于1978年提出的。RSA算法完善,既可用于加密,又可用于簽名,并為用戶(hù)的公開(kāi)密鑰簽發(fā)公鑰證書(shū)、發(fā)放證書(shū)、管理證書(shū)等提高了服務(wù)質(zhì)量,RSA公鑰密碼體制在世界許多地方已經(jīng)成為事實(shí)上的標(biāo)準(zhǔn)。RSA是一個(gè)基于數(shù)論的非對(duì)稱(chēng)密碼體制,是一種分組密碼體制,是一種基于因子分解的指數(shù)函數(shù)作為單向陷門(mén)函數(shù)的公鑰體制算法。它基礎(chǔ)是數(shù)論的歐拉定理,素?cái)?shù)檢測(cè),它的安全性是基于大數(shù)分解,后者在數(shù)學(xué)上是一個(gè)困難問(wèn)題。2 RSA算法2.1 RSA算法描述RSA的安全性基于復(fù)雜性理論中的計(jì)算安全性,依賴(lài)于大整數(shù)分解這一NP難

3、題。可靠性與所用密鑰的長(zhǎng)度有很大關(guān)系,假如有人找到一種很快的分解因子的算法,即從一個(gè)公鑰中通過(guò)因數(shù)分解得到私鑰,那么用RSA加密的信息的可靠性肯定會(huì)極度下降。但由于其工作量巨大,按目前計(jì)算機(jī)的處理能力是不可能實(shí)現(xiàn)的。實(shí)踐證明,在當(dāng)前的技術(shù)和方法下,密鑰不小于1024 bit的RSA算法仍然是安全的。這充分說(shuō)明RSA系統(tǒng)具有良好的保密性能。因此,盡管先后出現(xiàn)了很多新的公鑰體制算法,但RSA仍然在不同應(yīng)用領(lǐng)域占據(jù)了重要的位置。隨著計(jì)算機(jī)運(yùn)算速度的提高以及因子分解算法的突破,RSA的密鑰長(zhǎng)度將越來(lái)越大,其軟硬件實(shí)現(xiàn)速度將成為制約其使用的重要因素。RSA系統(tǒng)由以下幾部分組成1:1)隨機(jī)選取的在素?cái)?shù)P和

4、Q,還有N ,其中N=P*Q,P和Q保密,N公開(kāi)。2)任?。╪)=(P-1)*(Q-1),其中(n)表示比n小的素?cái)?shù)的個(gè)數(shù),任取2=e=(n),且(e,(n)=1,e為加密密鑰,公開(kāi)其存在的問(wèn)題。1)RSA公鑰密碼體制在加密或解密中涉及大量的數(shù)值計(jì)算,其加密和解密的運(yùn)算時(shí)間比較長(zhǎng),以致于實(shí)際使用RSA密碼體制無(wú)法應(yīng)用到軟件產(chǎn)品,必須用超大規(guī)模集成電路的硬件產(chǎn)品。2)雖然提高N位數(shù)會(huì)大大提高RSA密碼體制的安全性,但其計(jì)算量呈指數(shù)增長(zhǎng),以致使其實(shí)現(xiàn)的難度增大,實(shí)用性降低。3)RSA公鑰密碼體制的算法完整性(指密鑰控制加密或解密變換的唯一性)和安全性(指密碼算法除密鑰本身外,不應(yīng)該存在其它可破譯密

5、碼體制的可能性)沿有等進(jìn)一步完善。4)RSA算法面臨著數(shù)學(xué)方法的進(jìn)步和計(jì)算機(jī)技術(shù)飛躍發(fā)展帶來(lái)的破譯密碼能力日趨增強(qiáng)的嚴(yán)重挑戰(zhàn)。RSA公開(kāi)密鑰密碼算法在信息交換過(guò)程中使用比較廣泛,安全性比較高。以當(dāng)前的計(jì)算機(jī)水平,如選擇1024位長(zhǎng)的密鑰(相當(dāng)于300位十進(jìn)制數(shù)字)就認(rèn)為是無(wú)法攻破的。3 基于RSA的數(shù)字簽名23.1 RSA數(shù)字簽名算法描述RSA是目前使用最為廣泛、最著名的公開(kāi)密鑰系統(tǒng),它是由麻省理工學(xué)院的三位學(xué)者Rivest、Shamir和Adleman于1978年提出的。RSA密碼系統(tǒng)可以完成數(shù)據(jù)加密、數(shù)字簽名以及密鑰交換等功能,其安全性是建立在大素?cái)?shù)因子分解困難問(wèn)題上的3。設(shè)n=pq,p、

6、q是兩個(gè)大素?cái)?shù),消息空間和簽名空間為P=A=Zn,定義K=(n,p,q,a,b)ln=pq,p,q為素?cái)?shù),ab=l(mod(n)。值n和b公開(kāi)的,p、q、a是保密的。對(duì)K=(n,p,q,a,b),簽名及驗(yàn)證算法定義如下:簽名算法:驗(yàn)證算法:如果B使用RSA解密規(guī)則Dk簽一個(gè)消息x,那么B是能產(chǎn)生簽名的唯一的人,這是因?yàn)镈k是保密的。驗(yàn)證算法使用RSA的加密規(guī)則Ek,因?yàn)镋k是公開(kāi)的,保存在公開(kāi)的信任機(jī)構(gòu)服務(wù)器中,所以任何人能驗(yàn)證一個(gè)簽名。3.2 RSA數(shù)字簽名算法實(shí)現(xiàn)步驟3.2.1 簽名算法(包括兩步:消息摘要計(jì)算,RSA加密)1)消息摘要MD的計(jì)算:消息在簽名前首先通過(guò)MD5計(jì)算,生成128

7、位的消息摘要;MD5函數(shù)是一種單向散列函數(shù),它將任意長(zhǎng)度的消息壓縮成128位的消息摘要。應(yīng)用MD5的單向性(即給定散列值,計(jì)算消息很難)和抗碰撞性(即給定消息M,要找到另一消息M并滿足兩者的散列值很難),可以實(shí)現(xiàn)信息的完整性檢驗(yàn)。另外該函數(shù)的設(shè)計(jì)不基于任何假設(shè)和密碼體制而直接構(gòu)造,執(zhí)行的速度快,是一種被廣泛認(rèn)可的單向散列算法。2)對(duì)MD作RSA加密算法:采用簽名者的私鑰加密消息摘要,得到加密后的字符串即數(shù)字簽名;3.2.2 驗(yàn)證簽名算法(RSA解密、對(duì)消息摘要計(jì)算和比較)驗(yàn)證簽名算法包括兩步:RSA解密得簽名者的消息摘要,驗(yàn)證者對(duì)原消息計(jì)算摘要,比較兩個(gè)消息摘要。驗(yàn)證簽名的過(guò)程輸入為消息,簽名

8、者的公鑰,簽名;輸出為驗(yàn)證的結(jié)果,即是否是正確的簽名。1)RSA解密:簽名實(shí)際是加密的消息摘要,用以上所述的RSA解密方法采用簽名者的公鑰對(duì)這個(gè)加密的消息摘要解密,解密的結(jié)果應(yīng)為128位的消息摘要。2)消息摘要計(jì)算和比較:驗(yàn)證者對(duì)消息用MD5算法重新計(jì)算,得到驗(yàn)證者自己的消息摘要。驗(yàn)證者比較解密得到的消息摘要和自己的消息摘要,如果兩者相同,則驗(yàn)證成功,可以確認(rèn)消息的完整性及簽名確實(shí)為簽名者的;否則,驗(yàn)證失敗,確認(rèn)簽名被冒充或是被篡改。3.3 RSA數(shù)字簽名方案的弱點(diǎn)1)隨著計(jì)算機(jī)速度的提高,以及集群計(jì)算技術(shù)的應(yīng)用,RSA算法已經(jīng)不足夠安全,對(duì)RSA的破解也成為可能。RSA算法運(yùn)行中所需要的密鑰

9、長(zhǎng)度變得越來(lái)越大,使其計(jì)算量也猛增。經(jīng)過(guò)實(shí)驗(yàn)得到,密鑰長(zhǎng)度為1024位至2048位是比較合理的,既可以保證系統(tǒng)的安全性,計(jì)算量又可以接受。然而密鑰長(zhǎng)度的猛增,對(duì)RSA的應(yīng)用帶來(lái)嚴(yán)重的負(fù)面影響,使其應(yīng)用范圍越來(lái)越受到制約。2)任何人能通過(guò)對(duì)某一y計(jì)算x=Ek(y)來(lái)偽造一個(gè)隨機(jī)消息x關(guān)于B的簽名y,這是因?yàn)閥=sigk(x);3)如果消息x1和x2的簽名分別是y1和y2,則擁有x1、x2、y1、y2的任何人可偽造B關(guān)于消息x1x2的簽名y1y2,這是因?yàn)閟igk(x1x2)=sigk (x1) sigk (x2)modn。4)由于RSA算法每次只能對(duì)log2n比特長(zhǎng)的消息進(jìn)行簽名,這就使消息簽名

10、變得繁瑣。這就減緩了系統(tǒng)的運(yùn)行速度,降低了簽名效率??朔鲜鋈觞c(diǎn)的辦法是對(duì)消息進(jìn)行簽名之前作雜湊變換,亦稱(chēng)雜湊函數(shù)計(jì)算。變換之后再進(jìn)行簽名,降低了簽名計(jì)算量,這樣既能完成簽名任務(wù),又能保證簽名效率。4 RSA數(shù)字簽名算法實(shí)現(xiàn)本算法是在.NET平臺(tái)中使用C#語(yǔ)言編寫(xiě)的面向?qū)ο蟮膽?yīng)用程序,命名空間是System.Security.Cryptography。需要實(shí)現(xiàn)的功能有以下幾個(gè):4.1 產(chǎn)生公鑰和私鑰public void button_creatKey_Click(object sender, EventArgs e)tryRSACryptoServiceProvider rsa=new RS

11、ACryptoServiceProvider();textBox_publicKey.Text=rsa.ToXmlString(false);textBox_privateKey.Text=rsa.ToXmlString(true);catch(System.Exception ex)MessageBox.Show(“密鑰創(chuàng)建”+ex.ToString();隨機(jī)產(chǎn)生一個(gè)公鑰,一個(gè)私鑰,密鑰是XML可擴(kuò)展標(biāo)記語(yǔ)言形式,XML是一套定義語(yǔ)義表激動(dòng)額規(guī)則,這些標(biāo)記將文檔分成許多部件加以標(biāo)識(shí)?它也是元標(biāo)記語(yǔ)言,即定義了用于定義其他與特定領(lǐng)域有關(guān)的,與移動(dòng)額,結(jié)構(gòu)化的標(biāo)記語(yǔ)言的語(yǔ)句語(yǔ)法?他是一種以簡(jiǎn)單文

12、本格式存儲(chǔ)數(shù)據(jù)的方式,這意味著他可以被任何計(jì)算機(jī)讀取,此返回的是字符串?4.2 產(chǎn)生摘要private void button_getHash_Click(object sender, EventArgs e)trybyte fileSource = Encoding.UTF8.GetBytes(sendFileString);HashAlgorithm MD5 = HashAlgorithm.Create(”MD5”);byte hashData = MD5.ComputeHash(fileSource);textBox_getHash.Text = BitConverter.ToStrin

13、g(hashData);catch(System.Exception ex)MessageBox.Show(“獲取哈希值”+ex.ToString();4.3 數(shù)字簽名的驗(yàn)證private void button_ensureSign_Click(object sender, EventArgs e)tryRSACryptoServiceProvider rsa = new RSACryptoServiceProvider();rsa.FromXmlString(textBox_privateKey.Text);RSAPKCS1SignatureDeformatterrsadDeformatt

14、er=new RSAPKCS1SignatureDeformatter(rsa);rsadDeformatter.SetHashAlgorithm(“MD5”);string strSplit=textBox_receiveHash.Text.Split(-);byte receiveByteHash=new bytestrSplit.Length;for (int i = 0; i strSplit.Length; i+)receiveByteHashi=byte.Parse(strSpliti, System.Globalization.NumberStyles.AllowHexSpeci

15、fier);string strSignedSplit=textBox_signHash.Text.Split(-);byte signedByteHash=new bytestrSignedSplit.Length;for (int i = 0; i strSignedSplit.Length; i+)signedByteHashi=byte.Parse(strSignedSpliti, System.Globalization.NumberStyles.AllowHexSpecifier);if(rsadDeformatter.VerifySignature(receiveByteHash,signedByteHash)MessageBox.Show(”數(shù)字簽名驗(yàn)證成功!”);elseMessageBox.Show(”數(shù)字簽名驗(yàn)證失?。 保?;catch(Exception ex)throw ex;數(shù)字簽名驗(yàn)證另一個(gè)實(shí)體的標(biāo)識(shí)并保護(hù)數(shù)據(jù)的完整性,即當(dāng)使用公鑰系統(tǒng)對(duì)消息進(jìn)行數(shù)字簽名,發(fā)送方先向該消息應(yīng)用哈希函數(shù)以創(chuàng)建消息的摘要?然后,發(fā)送方使用發(fā)送的私鑰加密消息摘要以創(chuàng)建發(fā)送方的個(gè)人簽名,因?yàn)榇怂借€唯一的標(biāo)識(shí)該發(fā)送方,在收到消息和簽名后,接

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論