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

4.結束語