徐霽桐
(南京市棲霞區(qū)婦幼保健所,江蘇 南京 210046)
對稱密碼算法又稱為單鑰密碼算法,一般使用與解密密鑰一樣的加密金鑰,甚至可以從任何一種密匙上導(dǎo)出另一種,即Ke=Kd。所以,在發(fā)送和處理消息的同時(shí),發(fā)送和接受的人都需要共享這個(gè)口令。對稱加密技術(shù)的安全取決于加密密鑰,泄漏密鑰就是指誰都可以加密,所以加密時(shí)要嚴(yán)格控制。它具有較高的加密密度、較低的運(yùn)算量和較高的運(yùn)算速率。但它的弊端在于,在多方通訊時(shí),由于要保持原有的密匙,所以會(huì)很麻煩,為了確保更好的保密,通常的密碼都是有期限的,必須頻繁的更新,一旦更新,就會(huì)出現(xiàn)泄漏,這就造成了很大的風(fēng)險(xiǎn)。采用數(shù)據(jù)包加密的一般方法有DES、3DES、IDEA、FEAL、AES 等。
非對稱密碼算法也稱為公開密鑰算法,其主要目的在于解決傳統(tǒng)加密技術(shù)中的密匙分發(fā)和數(shù)字簽署問題。在使用對稱密碼的情況下,提出了兩個(gè)條件:一是一方使用了一把鑰匙,另一方使用了一把鑰匙,這把鑰匙被分發(fā)到了另一端。事實(shí)上,這種方法違背了加密技術(shù)的本質(zhì)——在通訊中,它是絕對保密的。該公鑰運(yùn)算法則取決于加密金鑰和解密金鑰。作為密碼使用的鑰匙與作為解密的鑰匙是不一樣的,從該密碼算法和該密碼鍵決定該破解密鑰在該運(yùn)算1 中是無效的;任意一種鑰匙都可以用于密碼,而另外一種用于進(jìn)行解密。
作為一種完備的數(shù)字簽名體系,它首先需要考慮的是安全,RSA 體系的安全取決于RSA 的公鑰加密技術(shù),因此,在RSA 體系中,要確保RSA 體系的安全,必須考慮以下方面:
1.n 的長短取決于被密碼的文檔的重要性和密碼的時(shí)間的需要。RSA 的安全取決于大質(zhì)數(shù)的解析率。為了增強(qiáng)系統(tǒng)的安全性,可以從多個(gè)不同點(diǎn)中隨機(jī)選取大的質(zhì)點(diǎn)p 和q(當(dāng)前應(yīng)該是512 個(gè)比特),而解密密鑰d 的相關(guān)模式n 不能太少。如果d 的尺寸是n 的四分之一,而e 小于n,那么就有辦法還原d。
2.在采用RSA 的通訊網(wǎng)路協(xié)定中,不應(yīng)當(dāng)采用公用模式n,這是由于已知攻擊方可以在密碼/解密鍵索引對中對該模式進(jìn)行分解,因此也可以在不對n 進(jìn)行拆分的情況下,算出其它的密碼/解密對。
根據(jù)相關(guān)部門的數(shù)據(jù),美國每年因互聯(lián)網(wǎng)問題造成的經(jīng)濟(jì)損害達(dá)170 億美金,德國和英國都有幾百億美金的損失,法國的幾百億,日本和新加坡的問題也很大。在當(dāng)今世界各國刑法典所列出的最新的新罪行中,電腦犯罪位居第一。雖然我們現(xiàn)在已經(jīng)廣泛應(yīng)用了各類先進(jìn)的軟體技術(shù),例如防火墻、代理服務(wù)器、入侵探測器、信道控制等,然而,不管是發(fā)達(dá)國家還是發(fā)展中國家,都有愈演愈烈的駭客行為,它們無處不在,給人們的生活帶來了極大的威脅。
隨著辦公自動(dòng)化、財(cái)務(wù)管理、定值管理、市場營銷等系統(tǒng)的投入使用,大量的關(guān)鍵數(shù)據(jù)、保密信息通過網(wǎng)絡(luò)進(jìn)行傳遞。這一類的信息管理系統(tǒng),往往是針對某一類用戶而設(shè)置的,所提供的資料也僅限于某一部分的用戶,因此,在系統(tǒng)中,用戶管理的主要目的是為了建立用戶、設(shè)置權(quán)限、管理和控制用戶的權(quán)限。雖然從某種意義上說,這些方法可以增強(qiáng)網(wǎng)絡(luò)的安全性能,但是其實(shí)施過程中卻出現(xiàn)了諸如主觀惡意欺騙、信息不完全、拒不承認(rèn)等問題,從而對網(wǎng)絡(luò)安全造成了破壞[1]。比如,在許多商業(yè)活動(dòng)中,需要簽字蓋章,而在電子文檔中,手工簽字是不可能的。一些應(yīng)用程序?qū)⒑灻麍D像嵌入文件中,以達(dá)到數(shù)字簽名的目的,但這樣做也會(huì)帶來一些安全性問題,比如文件中含有簽字的照片被惡意修改,或者為了避免承擔(dān)法律后果而拒絕簽字等。
在本軟件中需要實(shí)現(xiàn)的功能有以下幾個(gè):(1)生成RSA 密鑰:公鑰ke=(e,n),私鑰kd=(d,n);(2)利用MD5 算法計(jì)算出消息摘要MD;(3)實(shí)施數(shù)字簽署:利用私有密鑰d 對報(bào)文概要進(jìn)行密碼運(yùn)算(RSA 運(yùn)算);(4)檢驗(yàn)數(shù)字簽字:用公開密鑰e 對該數(shù)字簽字進(jìn)行加密運(yùn)算(RSA 運(yùn)算),將該解密的結(jié)果與步驟(2)所算出的報(bào)文匯總相對照,若兩條報(bào)文的概要相同,則簽字就成功。
1.按要求生成非對稱密鑰——公鑰和私鑰。
2.根據(jù)任何被寫入的報(bào)文字列(明文)產(chǎn)生所要求的報(bào)文概要MD。
3.按照RSA 算法的密碼原則,利用所產(chǎn)生的私有密鑰d 對所產(chǎn)生的報(bào)文概要進(jìn)行密碼操作,從而獲得一個(gè)數(shù)字簽署。
4.按照RSA 算法的解密原則,利用該發(fā)明的公開密鑰e 將該已編碼的報(bào)文概要(在此方案中表示為已解碼的信息)進(jìn)行解碼,并將兩個(gè)報(bào)文匯總進(jìn)行對比,以確認(rèn)該數(shù)字簽名器的識(shí)別是否屬實(shí)[2]。
5.提示信息完整,操作舒適,圖形界面美觀。在整個(gè)系統(tǒng)中,所有的數(shù)字簽名系統(tǒng)都是以C++為基礎(chǔ),使用微軟Visual c++6.0 進(jìn)行了系統(tǒng)的仿真。
3.3.1 密鑰形成
在密鑰的產(chǎn)生部分中起決定性作用的是素?cái)?shù)的選擇,對隨機(jī)數(shù)作素性檢測,若通過則為素?cái)?shù);否則增加一個(gè)步長后再做素性檢測,直到找出素?cái)?shù)。素性檢測采用Fermat 測試[3]。這個(gè)算法的理論依據(jù)是費(fèi)爾馬小定理:如果m 是一個(gè)素?cái)?shù),且a 不是m 的倍數(shù),那么根據(jù)費(fèi)爾馬小定理有:a=1(mod m)。實(shí)際應(yīng)用時(shí):a=1(mod m)?a=a(mod m)?a=a(mod m),因此對于整數(shù)m,只需計(jì)算a(mod m),再將結(jié)果與a 比較,如果兩者相同,則m 為素?cái)?shù)。選取a=2,則a 一定不會(huì)是任何素?cái)?shù)的倍數(shù)。根據(jù)所選的素?cái)?shù)的不同產(chǎn)生不同的密鑰。密鑰的理論產(chǎn)生模塊流程圖如圖1 所示。
圖1 密鑰產(chǎn)生
3.3.2 消息摘要
計(jì)算消息摘要的理論實(shí)現(xiàn)流程圖如圖2 所示。
圖2 消息摘要計(jì)算流程
在以上流程圖中其中循環(huán)處理塊是最重要的一步,也是MD5 的核心算法,在這一步中包括了:(1)將四個(gè)聯(lián)結(jié)變數(shù)分別為a、b、c、d 四個(gè)變數(shù),使得a=A、b=b、c=c、d=D;將a、b、c、d 合并為128 比特的暫存器,并將中間和最后的結(jié)果分別存儲(chǔ)在實(shí)際的演算過程中;(2)將當(dāng)前的512 位塊分解為16 個(gè)子塊,每個(gè)子塊為32 位;(3)將四個(gè)回合進(jìn)行一次周期,每個(gè)回合在一個(gè)區(qū)塊內(nèi)進(jìn)行16 次操作,四次回合的第1 階段執(zhí)行各種操作,其余均是一樣的:每個(gè)回合16 個(gè)輸入子區(qū)塊M〔0〕、M〔1〕……M〔15〕,或者用M[i]來表達(dá),在這里i 是0~15;t 是一個(gè)由64 個(gè)單元組成的常數(shù)陣列,其中的每一個(gè)都是32 比特,t[1],t[2]……t[64],k 是1~64。
3.3.3 數(shù)字簽名設(shè)計(jì)
在數(shù)字簽字中采用了RSA 密碼技術(shù),其認(rèn)證方法采用了RSA 解密的基本原則。
圖3 數(shù)字簽名的實(shí)現(xiàn)流程
RSA 加密和解密都是對一個(gè)整型的方次進(jìn)行運(yùn)算,然后得到一個(gè)模組。如果按照它的意義來進(jìn)行運(yùn)算,那么它的中間結(jié)果會(huì)很大,甚至?xí)^電腦所允許的整數(shù)數(shù)值。在加解密操作中,減少了中間值,提高了索引運(yùn)算的效率。其計(jì)算程序如下(如果計(jì)算a∧m mod n):(1)將m 表示為二進(jìn)制的形式;(2)將c=0,d=1,c 代表了該指標(biāo)的一部分,其最終數(shù)值為m,d 為該中間產(chǎn)物,其最終數(shù)值為所要得到的結(jié)果;(3)從二進(jìn)制數(shù)的最高位到最低位開始對每一位都用公式1 進(jìn)行運(yùn)算,得到的d 為該步的結(jié)果,公式1:c=2*c;d=fmod(d*d,n);(4)如果二進(jìn)制數(shù)字為1,那么在上述操作之后,下面的操作將會(huì)進(jìn)行:c=c+1;d=fmod(d* a,n);這個(gè)步驟的最后的結(jié)論是d。
3.3.4 數(shù)字簽名驗(yàn)證
檢驗(yàn)數(shù)字簽章的正確率和成功率,是通過對兩份報(bào)文的結(jié)果進(jìn)行比對,如果核查者用簽名者的公開密鑰來破譯報(bào)文的概要(也就是在這個(gè)設(shè)計(jì)中獲得的報(bào)文概要),那么就可以證明該簽名的真實(shí)性,沒有被人動(dòng)過手腳,也沒有被偽造,而檢驗(yàn)簽字的基本原則就是RSA 的加密方法。
圖4 驗(yàn)證數(shù)字簽名流程
3.3.5 數(shù)字簽名運(yùn)行
在這個(gè)軟件中有兩個(gè)報(bào)文摘要:報(bào)文摘要(明文報(bào)文),解密數(shù)字簽名后的報(bào)文摘要(也就是在這個(gè)發(fā)明中的解密的消息摘要)。若兩個(gè)報(bào)文的概要相同,就可以驗(yàn)證RSA 的數(shù)字簽名器的正確性,由此可以完成RSA 的數(shù)字簽字。所生成的報(bào)文概要與所述解密后的報(bào)文概要(這里為已解密的報(bào)文)是相同的,那么所述數(shù)碼簽章的可靠性就被證實(shí)[4]。
信息技術(shù)已成為社會(huì)發(fā)展的重要戰(zhàn)略,而網(wǎng)絡(luò)安全技術(shù)是其不可缺少的保障。然而,互聯(lián)網(wǎng)的安全并非單純的技術(shù)問題,而是一種更大的社會(huì)性問題,需要加大對其的宣傳與教育。網(wǎng)絡(luò)安全是一個(gè)綜合性的系統(tǒng)工程,它不能只依賴于防火墻等單一的安全體系,而是要充分地考慮到網(wǎng)絡(luò)安全的要求,同時(shí)還要綜合運(yùn)用多種的數(shù)字簽名技術(shù),形成一個(gè)高效、通用、安全的網(wǎng)絡(luò)體系。