黃云
(渝中職業(yè)教育中心,重慶 400042)
隨著計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)的發(fā)展,計(jì)算機(jī)網(wǎng)絡(luò)在線教學(xué)、在線考試等信息系統(tǒng)作為一種新的應(yīng)用形式應(yīng)用越來(lái)越廣泛。與傳統(tǒng)的教學(xué)模式相比較,計(jì)算機(jī)網(wǎng)絡(luò)在線信息系統(tǒng)可以通過(guò)開(kāi)放的Internet突破傳統(tǒng)考試地域和空間的限制,可以組織大規(guī)模和跨地區(qū)的教育教學(xué),也可以為遠(yuǎn)程教育和終身教育提供一種便捷有效的教學(xué)方式。但在具體應(yīng)用實(shí)施過(guò)程中,計(jì)算機(jī)網(wǎng)絡(luò)在線信息系統(tǒng)也存在需要解決的技術(shù)難點(diǎn),主要體現(xiàn)在Internet的開(kāi)放性和無(wú)序性特別是信息安全傳輸問(wèn)題,計(jì)算機(jī)網(wǎng)絡(luò)在線信息系統(tǒng)在Internet上存在攻擊的可能。
在網(wǎng)絡(luò)信息傳輸中,對(duì)信息進(jìn)行加密可以保證信息的機(jī)密性。但互聯(lián)網(wǎng)是一個(gè)完全開(kāi)放的環(huán)境,在基于Internet的計(jì)算機(jī)網(wǎng)絡(luò)在線信息系統(tǒng),還需要用一種機(jī)制來(lái)對(duì)通信雙方的身份進(jìn)行認(rèn)證,以保證系統(tǒng)的安全。數(shù)字簽名是基于公開(kāi)密鑰加密體制的。在公開(kāi)密鑰加密體制下,加密密鑰是公開(kāi)的,保密性完全取決于解密密鑰,即私有密鑰的保密。從另一個(gè)角度講,私有密鑰代表信息傳輸者的身份特征。需要數(shù)字簽名時(shí),信息發(fā)送方首先通過(guò)既定的私有的加密密鑰實(shí)現(xiàn)信息加密,而在信息的接收方,則通過(guò)發(fā)送方的公開(kāi)密鑰實(shí)現(xiàn)信息的解密還原。以上的信息發(fā)送方加密、信息接收方解密的過(guò)程便是數(shù)字簽名的基本原理。此外,第三方也可以通過(guò)發(fā)送方的公鑰進(jìn)行信息解密,這時(shí),發(fā)送方可以用接收方的公鑰對(duì)信息加密,這樣只有接收方才能用自己的私鑰對(duì)信息進(jìn)行解密,從而保證信息的安全。數(shù)字簽名具備如下特點(diǎn):
(1)數(shù)字簽名具有不可偽造性,用作用戶的唯一標(biāo)識(shí),并因此確定發(fā)送方的身份;
(2)保證信息的完整性。數(shù)字簽名必須防止信息在傳輸過(guò)程中被篡改或替換;
(3)具有不可抵賴性,發(fā)送者事后不抵賴對(duì)報(bào)文的簽名。
經(jīng)過(guò)不斷的研究、發(fā)展,出現(xiàn)了多種數(shù)字簽名的加密算法,Hash簽名、RSA簽名、DSS簽名算法應(yīng)用較為廣泛。其中DSS是被建議的數(shù)字簽名標(biāo)準(zhǔn),主要包括以下步驟:
(1)發(fā)送方用一個(gè)Hash函數(shù)對(duì)報(bào)文進(jìn)行處理,產(chǎn)生消息摘要,消息摘要MD是通過(guò)Hash函數(shù)產(chǎn)生,Hash函數(shù)為單向產(chǎn)生的Hash碼,Hash碼的作用在于將消息M映射為H(M),消息M為任意長(zhǎng)度,H(M)則長(zhǎng)度固定且長(zhǎng)度較短,H(M)即為消息摘要;
(2)信息發(fā)送方將該信息的私人密鑰和報(bào)文摘要進(jìn)行DSA算法計(jì)算,產(chǎn)生數(shù)字簽名,并實(shí)現(xiàn)報(bào)文和數(shù)字簽名共同發(fā)送;
(3)在信息接收方,通過(guò)采用相同的Hash函數(shù)實(shí)現(xiàn)對(duì)報(bào)文的加密,并生成加密消息摘要,在此基礎(chǔ)上,對(duì)信息發(fā)送方的公開(kāi)密鑰和消息摘要應(yīng)用DSA算法,進(jìn)而生成數(shù)字簽名S1;
(4)將數(shù)字簽名S1和從接收到的消息中得到的數(shù)字簽名S2比較,若S1和S2相等,則數(shù)字簽名得到難,否則,數(shù)字簽名可能是篡改或偽造。
美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究所(NITS)于1991提出了數(shù)字簽名標(biāo)準(zhǔn)DDS,并在1993年和1996年進(jìn)行了修改。DSS是利用安全SHA算法的一種數(shù)字簽名技術(shù),即數(shù)字簽名算法DSA。H(x):Hash函數(shù)。DSS中選用SHA。算法中應(yīng)用了下述參數(shù):
p:素?cái)?shù),其中2L-1
q:p-1的160bits的素因子,其中2159 g:g=h((p-1)/q)mod p,h 為一整數(shù),滿足 1 x:隨機(jī)或偽隨機(jī)整數(shù),x y:y=gx mod p ,(p,q,g,y)為公鑰; k:隨機(jī)或偽隨機(jī)整數(shù),其中0 對(duì)于明文信息M,簽名及驗(yàn)證協(xié)議如下: (1)簽名。產(chǎn)生隨機(jī)數(shù) k,k 其中k-1(H(M)q=1,0 (2)驗(yàn)證。信息接收方收到M、r和s后,計(jì)算u1=(H(M)*w)mod q,u2=(r*w)mod q, 其中,w=s-1mod q,v=((gu1*yu2)mod p)mod q,如果 v=r,則判斷數(shù)字簽名是有效的。 在數(shù)據(jù)簽名的設(shè)計(jì)實(shí)現(xiàn)方面,C++、VB、Java均能有較好地實(shí)現(xiàn),作為應(yīng)用普遍的Java編程語(yǔ)言,通過(guò)其提供的密鑰管理、認(rèn)證、加密、數(shù)字簽名和存取控制功能,Java編程語(yǔ)言提供的簽名方法包括在Java.security軟件之中,在應(yīng)用過(guò)程中Java編程語(yǔ)言能夠較好地實(shí)現(xiàn)數(shù)字簽名,數(shù)字簽名實(shí)現(xiàn)過(guò)程如下: 圖1 數(shù)字簽名實(shí)現(xiàn)過(guò)程 基于Java的數(shù)字簽名密鑰生成、數(shù)字簽名和驗(yàn)證設(shè)計(jì)實(shí)現(xiàn)如下: (1)密鑰對(duì)的生成實(shí)現(xiàn) Java語(yǔ)言生成密鑰對(duì)主要是基于Key Pair Maker類來(lái)實(shí)現(xiàn),密鑰對(duì)的生成實(shí)現(xiàn)過(guò)程如下:第一步是建立加密密鑰對(duì)的生成器,通過(guò)密鑰對(duì)生成器,生成密鑰對(duì)生成器對(duì)象;第二步實(shí)現(xiàn)對(duì)密鑰對(duì)生成器對(duì)象的初始化,在初始化過(guò)程中分別針對(duì)“隨機(jī)數(shù)源”和“強(qiáng)度”兩個(gè)變量進(jìn)行設(shè)置,隨機(jī)數(shù)源變量由Secure Random類自動(dòng)生成,“強(qiáng)度”變量默認(rèn)設(shè)置為1024位;第三步是通過(guò)調(diào)用GenerateKeyPair函數(shù)返回密鑰(KeyPair)對(duì)象,并通過(guò)調(diào)用getPublic函數(shù)和getPrivate函數(shù)分別提取公開(kāi)密鑰和私人密鑰。實(shí)現(xiàn)代碼設(shè)計(jì)如下: Key Pair Maker Key Obj=Key pair Maker.getInstanc("DS A");//密鑰對(duì)生成器生成 Key Obj.initalize(1024,new Secure Random());//密鑰對(duì)生成器初始化 KeyPairDouble=KeyObj.GenerateKeyPair();//密鑰對(duì)生成 Public Key Key Public=Key Double.getPublic();//公開(kāi)密鑰提取 Private Key Key Private=dey Double.getPrivate();//私人密鑰提取 (2)數(shù)字簽名的實(shí)現(xiàn) 首先是生成和驗(yàn)證簽名對(duì)象,通過(guò)Signture簽名類實(shí)現(xiàn)。然后是實(shí)現(xiàn)對(duì)私人密鑰的初始化,主要通過(guò)SHA-1算法和DSA算法實(shí)現(xiàn)。最后是生成數(shù)字簽名,通過(guò)調(diào)用Update方法,將簽名信息提供至簽名對(duì)象,在簽名對(duì)象獲取信息之后,數(shù)字簽名便生成了。 Signture DisSign=Signture.get Instance("DSA or SHA");//數(shù)字簽名的生成 Dis Sign.inisign(DeyPrivate);//私人密鑰的初始化 Dis Sign.Update(Message);//簽名信息提供 SignMessage=DisSign.sign();//簽名操作執(zhí)行 (3)驗(yàn)證簽名 第一是驗(yàn)證簽名對(duì)象的建立,在此基礎(chǔ)上,實(shí)現(xiàn)對(duì)公開(kāi)密鑰的初始化,主要通過(guò)調(diào)用Initverify實(shí)現(xiàn)。第二是向驗(yàn)證簽名對(duì)象提供驗(yàn)證簽名信息,主要通過(guò)Update方法實(shí)現(xiàn)。第三是驗(yàn)證簽名是否正確,主要通過(guò)調(diào)用verify函數(shù)實(shí)現(xiàn),根據(jù)函數(shù)返回的邏輯值進(jìn)行判斷。主要程序代碼如下: Signature DisSign=SignaturegetInstance("DSA or SHA");//驗(yàn)證簽名對(duì)象的建立 DisSign.initVerify(KeyPublic);//公開(kāi)密鑰的初始化 DisSign update(signMessage);//簽名驗(yàn)證信息提供 Beelean Result=DisSign.verify(signMessage);//驗(yàn)證簽名 基于公開(kāi)密鑰加密體系的數(shù)字簽名,已經(jīng)成為網(wǎng)絡(luò)安全通信中的一項(xiàng)重要安全機(jī)制。對(duì)稱密鑰加密可以保證信息的機(jī)密性,而數(shù)字簽名技術(shù)可以鑒別通信雙方的身份,并實(shí)現(xiàn)網(wǎng)絡(luò)信息傳輸?shù)耐暾裕呀?jīng)成為Internet環(huán)境下實(shí)現(xiàn)信息安全傳輸?shù)谋貍涫侄?,在電子商?wù)和電子政務(wù)等Web應(yīng)用中得到了廣泛應(yīng)用。對(duì)于計(jì)算機(jī)網(wǎng)絡(luò)在線信息系統(tǒng)來(lái)說(shuō),也可于使用數(shù)字簽名技術(shù)來(lái)認(rèn)證通信雙方的身份,實(shí)現(xiàn)信息的安全傳輸。 [1]劉泉,吳濤.基于Java的數(shù)字簽名研究與實(shí)現(xiàn)[J].武漢理工大學(xué)學(xué)報(bào)(信息與管理工程版).2004(01):11-14. [2]鄭若鹢.用Java創(chuàng)建企業(yè)內(nèi)部CA[J].福建工程學(xué)院學(xué)報(bào).2006(01):123-128. [3]解亞龍,許巧祥.基于J2EE架構(gòu)的高可用性辦公自動(dòng)化系統(tǒng)[J].四川大學(xué)學(xué)報(bào)(工程科學(xué)版),2007(S1):24-26. [4]武艷麗,陶振凱.基于J2EE的Web客戶端安全驗(yàn)證[J].科技創(chuàng)新導(dǎo)報(bào),2008(02):27-29. [5]崔明磊.基于CA認(rèn)證系統(tǒng)的移動(dòng)代理安全系統(tǒng)的研究[J].福建電腦,2009(09):17-18.3.基于JAVA的數(shù)字簽名設(shè)計(jì)
4.結(jié)束語(yǔ)