(中國民航大學 計算機科學與技術學院, 天津 300300)
摘要:為保證電子公文的安全傳輸,提出了一種基于MD5算法、RSA算法和USBkey等技術的電子公章系統的設計方案。該系統能夠保證文檔信息的有效性、可認證性和不可抵賴性。實驗證明符合傳統公文的要求,易于被用戶接受,在電子商務、電子政務及其他電子辦公領域有較高的應用價值。
關鍵詞:數字簽名;電子公章;消息摘要算法5;RSA;USBkey
中圖分類號:TP3092文獻標志碼:A
文章編號:1001-3695(2008)11-3398-03
Research of electronic seal system based on Word
LI Guo,ZANG Jin-mei,WANG Li
(School of Computer Science Technology, Civil Aviation University of China, Tianjin 300300, China)
Abstract:In order to guarantee the safety of electronic official document paper,this paper put forward the plan of the electronic seal system with the technologies of MD5, RSA and USBkey. The system guaranteed the validity, authentication and non-repudiation of the documents. It proves that the system accords with traditional documents and is easy to be accepted by users. And the system is of good use in electronic commerce, electronic government and other electronic official field.
Key words:digital signature; electronic seal; MD5(message-digest algorithm 5); RSA; USBkey
隨著計算機技術的發展,信息安全越來越受到人們的關注。信息安全可靠的傳遞是電子政務、電子商務應用的前提。在電子文檔的傳送過程中,文檔的有效性和真實性是必須考慮的問題,數字簽名的出現有著極為重要的意義。雖然《電子簽名法》的頒布賦予了電子簽名與手寫簽名同等的法律地位,但電子簽名可見性較差,不易被用戶接受,沒有得到普及和推廣。而傳統的打印—加蓋公章后的文件人工傳送費用高、效率低。如果能對電子公文蓋上電子公章,而電子公章本身又具有數字簽名的合法性,用網絡傳送電子公文的問題將得到解決。所謂數字簽名是通過某種密碼運算生成一系列符號及代碼組成電子密碼進行簽名,以代替書寫簽名或印章。對于這種電子式的簽名還可進行技術驗證,其驗證的準確度是一般手工簽名和圖章的驗證無法比擬的[1]。它實際上是一個加密的信息摘要,即用簽名者的私鑰加密哈希值就構成了一個數字簽名,可用來保證網絡信息在傳輸過程中的完整性、信息發送者的身份可認證性和不可抵賴性,是保證網絡中傳輸的數據沒有被非法竄改的主要手段,可以解決否認、偽造、竄改及冒充等問題。
1電子公章系統功能概述
電子公章從其表現形式來看,可以理解為傳統印章和手寫簽名的電子化,其功能類似使用在紙制文檔上的傳統印章或手寫簽名。電子印章所面向的對象是電子文檔,這就使得對電子印章的要求變得相對復雜。因此,電子印章不可能等同于簡單的電子圖片,它必須具有以下幾種功能:a)直觀性。像傳統印章或手寫簽名一樣,符合用戶的習慣,給用戶帶來方便。b)保護電子文檔的完整性。電子文檔不能輕易被竄改;如果電子文檔已經被竄改,驗證時能夠被檢測出來。c)保護電子公章的安全性。電子印章不能輕易被盜用或是偽造。d)蓋章人或電子公章的不可否認性。應可以獲得電子印章的頒發者、所有者、使用者以及使用時間等信息。
傳統意義上的加密就是防止信息泄露,其基本過程是將消息(明文)經過某種算法進行加密,形成密文;再經過解密將密文轉變為明文,以達到信息不被竊取的目的。本文設計的電子公章系統的作用并不是防止信息泄露,而是防止文件內容被否認、偽造、竄改及冒充等問題,與傳統的文件加密概念有著明顯的區別。因此,設計過程中加密算法的實現不是本文研究的主要內容,重點是放在如何防止文件內容的否認、竄改上。
本文所研究的基于Word的電子公章系統利用數字簽名及加/解密的原理,將數字簽名與印章圖像相結合,利用USBkey來保存數字證書和私鑰,有效解決文檔信息的有效性、可認證性和不可抵賴性等信息安全問題。
2電子公章系統處理流程
在基于Word的電子公章系統中,由于加蓋公章的載體是Word文檔,這就需要將蓋章與Word文檔緊密結合起來。然而Word編輯器沒有相關的應用實現這方面的要求,因此必須使用VBA這一Word的二次開發工具對其進行二次開發[2]。電子公章系統主要是利用VBA基于對象的開發技術,開發電子公章系統的工具欄,在Word中創建工具欄對象,調用Crypto API庫實現具體的加/解密過程,從而實現對Word文檔內容的電子簽名與驗證,并將驗證的結果通過印章圖像直觀地顯示出來。本文設計的電子公章系統是基于非對稱加密的,不僅可以防止電子文檔被竄改,而且能驗證發件人的身份,更好地實現了電子公章系統的功能。其原理圖如圖1所示。
3關鍵技術分析
31VBA實現工具欄的具體操作
VBA將 MicrosoftOffice中的每一個應用程序都看成一個對象。每個應用程序都有各自的application對象[3]。在Word中,application對象包含了Word的菜單欄、工具欄、Word命令等相應對象以及文檔對象等。工具欄對象包含了各種命令按鈕;文檔對象則包含了所有的文字、表格、圖像等文檔組成部分的相應對象。該工具欄采用基于對象的開發技術,以工具欄的形式實現與用戶的友好界面接口,通過工具欄對象操作文檔對象,通過OnAction屬性來實現按鈕具體的操作。最后Office ODE版(Office開發版)將VBA編寫的程序進行封裝,這樣就可以實現電子公章系統在Word中接口模塊的功能。
32CryptoAPI應用原理
CryptoAPI是Microsoft提供的加密應用程序接口。其功能是為應用程序開發者提供在Win32環境下使用加密、驗證等安全服務時的標準加密接口,而不必考慮基本的算法。CryptoAPI同樣也使用兩種密鑰,即會話密鑰和公共/私人密鑰對。CryptoAPI支持流式編碼和塊編碼兩種基本的編碼方法。流式編碼在明碼文本的每一位上創建編碼位,速度較快,但安全性較低;塊編碼在一個完整的塊上(一般為64 bit)上工作,需要使用填充的方法對要編碼的數據進行舍入,以組成多個完整的塊。這種算法速度較慢,但更安全[4]。基于安全性的考慮,本系統采用塊編碼。
為完成數學計算,必須具有密碼服務提供者模塊CSP(cryptographicservice provider)。它是一個真正執行加密功能的獨立模塊。物理上一個CSP由兩部分組成,即一個動態鏈接庫和一個簽名文件。每個CSP的名字是惟一的,而類型則不是。
目前已有九種預定義的CSP類型,它們有自己支持的密鑰交換算法、簽名算法、對稱加密算法和hash算法。使用函數CryptAcquireContext給出欲選擇的CSP的名稱參數和類型參數,該函數返回一個指向被選擇的CSP的句柄。每個CSP有一個密鑰庫。密鑰庫用于存儲密鑰。每個密鑰庫包括一個或多個密鑰容器(key containers)。每個密鑰容器中屬于一個特定用戶的所有密鑰對。每個密鑰容器被賦予一個惟一的名字;以這個名字作為函數CryptAcquireContext的參數,從而獲得指向這個密鑰容器的句柄[5]。
本文在電子印章系統中使用的是PROV_RSA_FULL類型,MD5生成信息摘要,然后用RSA加/解密信息摘要。
以下幾個函數用于實現加密和數字簽名:
a)CryptCreateHash Lib \"advapi32.dll\" (ByVal hProv As Long, ByVal algID As Long, ByVal hKey As Long, ByVal dwFlags As Long, ByRef phHash As Long) As Long:創建hash對象,它返回CSP散列對象的句柄。
b)CryptHashData Lib \"advapi32.dll\" (ByVal hHash As Long, ByVal pbData As String, ByVal dwDataLen As Long, ByVal dwFlags As Long) As Long:該函數用來從提供的數據中計算密碼散列。
c)CryptDeriveKey Lib \"advapi32.dll\" (ByVal hProv As Long, ByVal algID As Long, ByVal hBaseData As Long, ByVal dwFlags As Long, ByRef phKey As Long) As Long:從指定的密碼hBaseData產生密鑰phKey。
33USBkey技術
在數字簽名的具體應用中,必須考慮各個環節的安全。數字證書和私鑰是整個系統中最關鍵的部分,必須保證其安全性,在此需要設置身份認證。目前,身份認證的手段主要有用戶名/密碼、IC卡、動態口令、生物特征、USBkey等幾種[6],而基于USBkey的身份認證方式是近幾年發展起來的一種方便、安全、可靠的技術,它采用一次一密的強雙因子認證模式,很好地解決了身份認證的安全可靠性,并提供USB接口與現今的電腦通用[6]。USBkey是一種USB接口的小巧的硬件設備,內置了CPU、存儲器、芯片操作系統(COS),可以存儲用戶的密鑰或數字證書,利用USBkey內置的密碼算法實現對用戶身份的認證。
每一個USBkey都具有硬件PIN碼保護。PIN碼和硬件構成了用戶使用USBkey的兩個必要因素。但是PIN碼是在用戶電腦上輸入的,黑客可以通過程序截獲用戶PIN碼,用戶不及時取走USBkey,黑客就可以通過截獲的PIN碼來取得虛假認證,仍然存在安全隱患。動態口令技術是一種讓用戶密碼按照時間或使用次數不斷變化、每個密碼只能使用一次的技術。由于每次使用的密碼必須由動態令牌或動態密碼卡來產生,在本系統中將動態口令與USBkey這兩種身份認證方法結合起來,使得PIN碼通過動態生成,黑客截取的PIN碼就是一次性的,以保證其安全傳輸。
4電子公章系統工具欄的設計與實現
41功能模塊設計
本系統有四個功能:蓋章、簽章、驗章、文件發送。其中文件發送通過調用Outlook實現。另外三個功能對應三個工具按鈕,點擊任一個都出現一系列對話框,進行向導式的操作。之所以把蓋章和簽章分別做成兩個功能,是因為實際工作中,蓋章和簽章可能由兩人完成;另外,蓋章和簽章如果做成一個向導,技術上恐怕不行。系統功能模塊具體如圖2所示。
42蓋章模塊的實現
在這個模塊中,主要實現蓋章的功能。要選擇圖章文件,默認是最近使用的圖章。圖章用口令保護。選擇圖章文件后,圖章嵌入到Word文件中,且圖章自動浮于文字上方。蓋章后的文章仍然是可以改動的。
43簽章模塊的實現
這個模塊的作用就是進行加密操作。選擇要使用的數字證書,并提示用戶簽名后的文件不能再修改;然后執行后臺操作,用MD5對原文hash,用RSA對hash加密。下面是進行加密操作的部分代碼:
bEncrypted=oCrypto.Encrypt(StrConv(unEncryptedhash, vbFrom-Unicode), _key, frezBlockEncryption)’加密操作
encryptedtext=oCrypto.ConvertStringToHex(bEncrypted)
’轉成十六進制
Set oCrypto=Nothing
ActiveDocument.CustomDocumentProperties.Add _Name:=\"bEncrypted\", LinkToContent:=False,Value:=bEncrypted, _Type:=msoPropertyTypeString
ActiveDocument.Save
fname=ActiveDocument.Name
fpath=ActiveDocument.Path
SetAttr fpath \"\\\" fname,vbReadOnly’改變文件的屬性為只讀
MsgBox \"簽名已經完成,現在您可以發送郵件\"
ActiveDocument.Save
WordBasic.MicrosoftMail’調用Outlook
’Options.SendMailAttach=True
’ActiveDocument.SendMail
’ActiveDocument.Close
44驗章模塊的實現
選擇匹配的數字證書進行驗章。用證書的公鑰對屬性中加密后的hash解密得到密文,同時比較原文再進行一次hash得到的結果。若一致,證明文件未被竄改,發件人身份有效;若不一致,印章發生變化,提示用戶“用戶文件被竄改過,發件人身份無效”。
hexbEncrypted=ActiveDocument.CustomDocumentProperties(1).Value
bDecrypted=oCrypto.Decrypt(hexbEncrypted, _key, frezBlockEncryption)
Decryptedhash=StrConv(bDecrypted, vbUnicode)
Set myRange = ActiveDocument.Range
myRange.Select
unciphertext=Selection.Text
hash=oMD5.MD5(unciphertext)
Set oCrypto=Nothing
然后比較Decryptedhash和hash,確定發件人身份,或者是否被竄改過。
5實驗結果
由于公鑰公開,任何人都可以對文檔的有效性進行驗證。如果文件未被竄改,提示“用戶文件未被竄改,發件人身份有效”,如圖3所示;若文件被竄改,提示“用戶文件被竄改過,發件人身份無效”,如圖4所示。
6電子印章安全性分析
本系統的安全性主要表現在以下幾個方面:
a)信息的有效性。由hash函數的特性可知,即使信息在傳輸過程中被竄改,真實性被破壞,接收方重新計算出的摘要不同于發送者的公鑰解密出的摘要,會提示該文件無效,不是發送者最初發送的消息。
b)信息的不可抵賴性。由于只有信息的發送方持有自己的私鑰,其他人不能冒用其身份,發送方無法否認他曾經發送過該消息。
7結束語
本文設計的電子公章系統通過數字證書保證了簽名的不可抵賴性,通過加/解密的驗證來保證文檔的有效性,利用USBkey保證數字證書和私鑰的安全性,使用Word的二次開發工具VBA來對其進行二次開發,方便易行。故該系統的開發具有廣闊的應用前景。
參考文獻:
[1]
數字電子簽名的概念及技術實現全面解析[EB/OL].(2006-10-15).http://www.laogu.com/wz_3037.htm.
[2]王飛,湯光明,孫怡峰,等.基于易損水印和數字簽名的電子印章系統[J].計算機應用研究,2004,21(4):118-121.
[3]GOEL T,CHAUDHARY R.VBA專業項目實例開發[M].王曉娟,陳代川,等譯.北京:中國水利水電出版社,2003.
[4]CUICK.Microsoft CryptoAPI加密技術(一)[EB/OL].http://www.vckbase.com/document/viewdoc/?id=974.
[5]姚巍.Windows API函數在Visual Basic中的應用實例[M].北京:人民郵電出版社,2003.
[6]生物識別智能卡公匙三種技術的有機整合[EB/OL].(2007-01-27). http://www.jinruiword.com/Article/zixun/xinwen/0184745.html.
[7]郭正榮,周城.基于PKI的電子簽章系統的實現[J].計算機科學,2006,33(9):83-84.