3DES_RSA加密算法數(shù)字簽名的實(shí)現(xiàn)

3DES_RSA加密算法數(shù)字簽名方案可有效提高數(shù)字簽名的安全性。那么我今天就給大家介紹一下3DES_RSA加密算法數(shù)字簽名是如何實(shí)現(xiàn)的。

一、3DES_RSA加密算法混合數(shù)字簽名

1、簽名方案

數(shù)字簽名的實(shí)現(xiàn)過程一般分為獲取明文消息的數(shù)字摘要、對數(shù)字摘要進(jìn)行加密和對簽名后的消息進(jìn)行認(rèn)證。

數(shù)字簽名常用的加密算法包括單一的數(shù)字簽名方法如:RSA、ECC等和混合簽名加密算法如DES_RSA混合簽名加密算法、DES ECC混合簽名加密算法,其中DES加密算法主要針對明文文件加密,而RSA加密算法主要用于密鑰。

上一世紀(jì)90年代中期對RSA加密算法的攻擊主要采用了二次篩法進(jìn)行因子分解的方法,僅具備對RSA-110攻擊的可能,而后發(fā)展的一般數(shù)域法(GNFS)其效率為二次篩法的五倍,已具備了對RSA-130攻擊的可能性,在加密算法的速度上,DES加密算法要遠(yuǎn)遠(yuǎn)快于RSA加密算法,妥提高數(shù)字簽名的可靠性,可使用增加RSA加密算法長度或采用對RSA加密算法再次加密,由于RSA加密算法相對較慢,增加長度會大大降低數(shù)字簽名的速度,我們采用了對RSA隨機(jī)大素數(shù)使用3DES進(jìn)行加密的方法既考慮了加強(qiáng)RSA數(shù)字簽名的安全性又減少對簽名過程運(yùn)算速度的影響。

3、DES加密算法

DES加密算法在窮舉攻擊中相對比較脆弱,有人提出其它方案來取代DES加密算法,而具體比較可行的方案是用DES加密算法進(jìn)行多次加密,并采用多個密鑰,現(xiàn)在廣泛被接受的方案為3DES加密算法,并采用兩個密鑰。具體運(yùn)算過程為:

3DES_RSA加密算法數(shù)字簽名的實(shí)現(xiàn)

若使用啟發(fā)性攻擊方法對3DES加密進(jìn)行攻擊,所需的期望運(yùn)算時間大約為:

3DES_RSA加密算法數(shù)字簽名的實(shí)現(xiàn)

由于一般情況下不具有相當(dāng)數(shù)量的(p,c)對,則對3DES加密算法的攻擊相當(dāng)困難。

3DES加密算法的基礎(chǔ)是DES加密算法,DES加密算法基本過程為:對64位的明文分組進(jìn)行操作.將明文分組成左半部分和右半部分,各32位長。然后進(jìn)行16輪完全相同的運(yùn)算。在運(yùn)算過程中數(shù)據(jù)與密鑰結(jié)合。經(jīng)過16輪后.左、右半部分合在一起經(jīng)過一個末置換砌始置換的逆置換)。3DES加密算法就是將上述過程重復(fù)三次,根據(jù)選擇來確定密飼的個數(shù),實(shí)現(xiàn)過程包含兩個密鑰,第一次運(yùn)算和第三次運(yùn)算采用相同的密鑰,第二次采用另一個密鑰。

3、RSA加密算法

RSA加密算法可以用如下過程簡單描述為:

選擇p.q(P和q都是素數(shù))。

計算p×q。

計算_Φ(n)=(p-1)×(q-1)。

選擇整數(shù)e,gcd(Φ(n),e)=1,1<e<Φ(n)。

計算d.d=e-1modΦ(n)。

共鑰:KU={e,n}。

私鑰:KR={d,n}。

加密:M<n,C=Me(mod n)。

RSA加密算法的安全性是基于大數(shù)分解的難度,其中共鑰和私鑰是一對大素數(shù)(100到200位十進(jìn)制或更大)的函數(shù),從一個公開的密鑰和密文中恢復(fù)出明文的難度等價于分解兩個大素數(shù)之積。

4、3DES_RSA加密算法

RSA加密算法需要兩個隨機(jī)大素數(shù),其生成的過程首先生成隨機(jī)大數(shù),生成算法采用ANSI X9.17方法生成偽隨機(jī)數(shù),該加密算法采用3DES的EDE模式,如圖1所示:

3DES_RSA加密算法數(shù)字簽名的實(shí)現(xiàn)

3DES_RSA加密算法的輸入是:一個整數(shù)m.初始化64比特的種子s,3DES的密鑰k1,k2,算法的輸出是m個64比特串V1,V2......Vm。其計算過程為:

(1)計算I=EK(D)

(2)for(i=1 to m)

(a)Vi=Ek(i+8)

(b)s=Ek(VI+1)

(3)返回(V1,V2……Vm)

然后由上述的6位比特串生成512位隨機(jī)效。

RSA加密算法中所需的兩個隨機(jī)大素數(shù)通過上述的512位隨機(jī)數(shù)獲得,其生成的過程為:首先將最高位置為1以保證素數(shù)要求的位數(shù),最低位置為1確保它是奇數(shù),然后測試它能否被小于等于4001的素數(shù)整除,最后用10個小素致對這個素數(shù)用Miller_Rabin法進(jìn)行測試,如果通過測試則認(rèn)為概效為素數(shù),實(shí)際上這個數(shù)為素數(shù)的概率為99.9999%,否則將這個數(shù)減2重復(fù)上述方法繼續(xù)進(jìn)行測試。

二、3DES_RSA加密算法數(shù)字簽名的實(shí)現(xiàn)

1、大數(shù)的處理方法

目前大多數(shù)的編譯器只支持到64位的整數(shù)運(yùn)算,因此在進(jìn)行運(yùn)算中的正數(shù)都必須小于64位,因此需專用方法來處理大數(shù).最簡單的方法是采用數(shù)組,但1024位的大數(shù)用十進(jìn)制表示也需要300多位,效率很低,如用二進(jìn)制表示則效率更低。

比較有效的方法是采用n進(jìn)制的數(shù)組,對32位機(jī)而言n為鏟是比較合適的選擇。這樣對于各種運(yùn)算最多只需要進(jìn)行32次循環(huán)。在數(shù)字簽名實(shí)現(xiàn)方案中采用了0×100000000進(jìn)制的方法。

冪模運(yùn)算是RSA加密算法的核心,模乘運(yùn)算A*B%N的運(yùn)算過程中,如直接進(jìn)行計算則會產(chǎn)生1024位中間結(jié)果,需動態(tài)分配內(nèi)存,否則會造成效組空間增加1倍,而動態(tài)分配內(nèi)存會造成大斂存儲的不連續(xù)性,為避免以上兩個問題,可采用圖2所示的計算方法:

3DES_RSA加密算法數(shù)字簽名的實(shí)現(xiàn)

2、對文檔的數(shù)字簽名

信息發(fā)送者對Word、Excel、txt等文檔進(jìn)行數(shù)字簽名的過程主要包括:讀取明文的信息摘要、對信息摘要進(jìn)行數(shù)字簽名、在原文中附加簽名內(nèi)容。

信息接受者在獲得文檔后對經(jīng)過數(shù)字簽名的文檔進(jìn)行認(rèn)證。確認(rèn)文檔為原始文檔。如果文檔被篡改則不能通過認(rèn)證。

讀取明文的信息摘要通過SHA_1(哈希-1)加密算法計算散列值的方法。對于不同的文檔讀取明文信息的方法略有不同,對于txt文檔,讀取方式相對比較簡單,可以采用直接讀取文檔字符,然后采用SHA_1加密算法即可解決。但對于Office相關(guān)的文檔相對比較復(fù)雜,Office辦公軟件是基于com接口的,其中相關(guān)文檔的格式并未公布,故無法直接獲得其相關(guān)內(nèi)容,我們采用在讀取Office文件時直接讀取相關(guān)字節(jié)碼,然后對字節(jié)碼進(jìn)行數(shù)字簽名,再采用寫文件的方式將字節(jié)碼轉(zhuǎn)換成Office相關(guān)文件,認(rèn)證過程以同樣的方法實(shí)現(xiàn)。

3、3DES_RSA加密算法數(shù)字簽名的實(shí)現(xiàn)

數(shù)字簽名方案的實(shí)現(xiàn)流程圖如圖3所示:

3DES_RSA加密算法數(shù)字簽名的實(shí)現(xiàn)

3DES_RSA加密算法數(shù)字簽名方案在VC6.0環(huán)境中實(shí)現(xiàn),采用面向?qū)ο蟮某绦蛟O(shè)計方法,分別構(gòu)造了CBiglnt類和CRSA類,其中CBiglnt類主要完成對大數(shù)的各種運(yùn)算。CRSA類主要完成索性測試、密鑰生
成等,主要類均以文件形式處理,以提高軟件的復(fù)用性。該過程使用3DES- RSA混合加密算法,并實(shí)現(xiàn)了可視化對文件的數(shù)字簽名。

小知識之SHA 1

SHA (Secure Hash Algorithm,譯作安全散列算法) 是美國國家安全局 (NSA) 設(shè)計,美國國家標(biāo)準(zhǔn)與技術(shù)研究院(NIST) 發(fā)布的一系列密碼散列函數(shù)。正式名稱為 SHA 的家族第一個成員發(fā)布于 1993年。然而人們給它取了一個非正式的名稱 SHA-0 以避免與它的后繼者混淆。兩年之后, SHA-1,第一個 SHA 的后繼者發(fā)布了。 另外還有四種變體,曾經(jīng)發(fā)布以提升輸出的范圍和變更一些細(xì)微設(shè)計: SHA-224, SHA-256, SHA-384 和 SHA-512 (這些有時候也被稱做 SHA-2)。