馮福偉 李瑛 杜麗萍 趙桂芬
1北京市科學技術情報研究所 北京 100044
2網絡密碼認證技術北京市重點實驗室 北京 100044
簽名和對簽名的識別是我們日常社會生活和經濟交易往來中的一個重要環節,如銀行支票、采購合同、契約和協議等,都涉及到簽名。隨著信息技術和網絡的飛速發展,人類開始進入無紙化時代,越來越多的企業開始通過網絡來完成各種交易,在網絡給我們帶來便利性的同時,安全隱患也隨之而來。如何保障信息的保密性、交易者身份的確定性、信息的不可否認性和不可修改性是網絡信息交換中需要考慮的重要問題。
數字簽名作為一項安全技術,在保證數據的完整性、私密性和不可抵賴性方面起著重要的作用。然而,當前存在的許多數字簽名系統都是基于傳統的 PKI密碼體系,過于復雜,效率低下,并且由于采用了非對稱算法,速度慢,并存在一定程度的安全缺陷。本文設計開發的數字簽名系統,提出使用先進的組合對稱密鑰技術來構建,與傳統方法相比,具有模型清晰,密鑰管理簡單,安全性強,速度快,效率高的特點。
組合對稱密鑰技術基于組合密鑰的思想,結合使用對稱算法,不僅能夠實現密鑰的一次一變,而且運算速度更快。密鑰種子是由硬件設備隨機數生成器或是軟件系統隨機數生成算法所產生的一組隨機數序列,其存儲在硬件設備的安全芯片內。在實際應用中,采用組合密鑰的思想,以時間和隨機數因子為參數,從密鑰種子中動態生成每次加密和解密數據所需要的密鑰;同時采用對稱算法加解密數據,不像非對稱算法那樣是基于復雜的數學模型和巨大的代數結構,因而具有運算速度快的特點。
密鑰種子是一組隨機數序列,如果將密鑰種子的每一個字節當成一個矩陣元素,則密鑰種子從邏輯上看就是一個M×N階的矩陣,可將其劃分為多個子矩陣,并可分成多個組,如時間的年子矩陣組、月子矩陣組、日子矩陣組、時子矩陣組、分子矩陣組,以及多個隨機數子矩陣組。若用 KM×N矩陣表示密鑰種子(假設其中的M=148,N=16),則其矩陣結構可表示如下:

其中Y10×16為年子矩陣組(10表示密鑰種子的有效年限),M12×16為月子矩陣組,D31×16為日子矩陣組,H24×16為時子矩陣組,F60×16分子矩陣組,R11×16為隨機數子矩陣組,每個子矩陣都是多個J1×16行子矩陣的組合體。
密鑰的生成基于密鑰種子,每次生成密鑰時,首先以時間和隨機數因子為參數,使用組合密鑰算法,從年子矩陣組、月子矩陣組、日子矩陣組、時子矩陣組、分子矩陣組,以及隨機數子矩陣組中產生種子矩陣,然后將獲得的種子矩陣通過控制函數運算后,即可形成密鑰。由于每次系統的時間和生成的隨機數都不相同,所以每次產生的密鑰都不一樣,實現了密鑰的不可預測性。
密鑰種子是在硬件設備內部生成并存儲在安全芯片內的,使用時不出芯片,實現了硬件級的安全。數字簽名協議、組合密鑰算法、對稱加密算法等也都是灌入在芯片內的,每次加解密數據時都在芯片內部執行,安全性高。
系統的物理網絡組成部分有用戶終端、通信網絡、防火墻、Web服務器、簽名驗證服務器、數據庫服務器。其中,用戶終端完成數字簽名;通信網絡實現數據傳輸;防火墻實現內外網的分隔,提高安全性;Web服務器實現數據報文的轉發;簽名驗證服務器完成簽名的驗證操作;數據庫服務器存儲各種數據信息。系統的總體網絡拓撲結構如圖1所示。

圖1 系統網絡拓撲圖
本系統由用戶端系統、數據轉發Web端系統、簽名驗證服務端系統、密鑰種子統一管理系統四個部分組成。
用戶端系統:用戶設備端上配有安全芯片,安全芯片中灌有安全協議,包含有數字簽名協議和加密傳輸協議兩部分,同時保存有密鑰種子數據。當執行數字簽名操作時,首先用戶設備端獲取服務器時間,并調用安全芯片內的安全協議接口,生成數字簽名值,然后將信息加密后提交給服務器,并接收服務器端返回的結果。
數據轉發Web端系統:完成用戶設備端與簽名驗證服務端之間數據報文的轉發。
簽名驗證服務端系統:系統服務端基于Linux平臺,采用MySQL數據庫管理系統,使用支持PCI卡槽接口的加密卡,加密卡內灌有數字簽名協議和加密傳輸協議。服務端系統實現與Web服務器、密鑰種子數據庫和日記數據庫之間的數據通信;完成對用戶設備端數字簽名的驗證功能;定時對密鑰種子數據庫進行備份,并能夠在密鑰種子數據庫出現異常時完成密鑰種子庫的恢復;實時記錄系統運行時的各種狀態信息,實現當簽名驗證系統出現異常時,系統管理員可快速定位問題并修復系統。
密鑰種子統一管理系統:通過密鑰種子統一管理系統實現對密鑰種子的維護,用戶設備端的安全芯片和密鑰種子數據庫服務器共同維護同一組密鑰種子,密鑰從密鑰種子中動態產生。分發密鑰種子時,首先啟動密鑰種子統一管理系統,初始化連接安全芯片和密鑰種子數據庫服務器,密鑰種子在安全芯片內部由硬件隨機數發生器生成,加密后存儲在安全芯片內部,同時將加密后的密鑰種子同步到密鑰種子數據庫服務器中。更新密鑰種子時,同樣經由密鑰種子統一管理系統向安全芯片發出更新密鑰種子指令,指示安全芯片重新生成新的密鑰種子并替換舊的密鑰種子,并將新生成的密鑰種子加密后同步更新到遠程密鑰種子數據庫服務器中。若要刪除密鑰種子,則僅需通過密鑰種子統一管理系統刪除密鑰種子數據庫服務器中對應 ID號的密鑰種子數據記錄,并設置標識為失效狀態。
集中式數字簽名及驗證模式,其在用戶設備端上進行數字簽名,在簽名驗證服務器上完成對簽名的驗證,并保存數字簽名相關的信息。集中式數字簽名及驗證流程如下。
用戶設備端:1)向Web服務器發送請求獲取當前的系統時間;2)將獲得的系統時間、數據文件通過調用安全芯片接口傳入芯片;3)在安全芯片內由硬件隨機數生成器產生隨機數;4)在安全芯片內利用組合密鑰算法從密鑰種子中產生本次使用的密鑰;5)對數據文件使用摘要算法運算后獲得數據文件的Hash值;6)使用對稱加密算法對數據文件的Hash值進行加密,獲得數字簽名值;7)使用對稱加密算法對數據文件加密生成密文;8)將參數信息、數字簽名值、密文等內容加密后發送給Web服務器。
數據轉發Web服務器:完成用戶設備端與簽名驗證服務器之間數據報文的轉發。
簽名驗證服務器:1)獲取用戶設備端的數據報文,并通過調用加密卡接口,將數據報文傳入加密卡;2)在加密卡內解密數據報文;3)根據用戶設備端ID號定位密鑰種子,并利用組合密鑰算法生成密鑰;4)使用解密算法解密數據密文;5)對明文數據使用摘要算法運算后獲取數據文件的Hash值;6)在加密卡內使用對稱算法加密數據后獲得本地端的數字簽名值;7)將本地端的數字簽名值和用戶設備端的數字簽名值做等值比較即可完成簽名驗證的工作。
在數字簽名驗證通過的情況下,簽名驗證服務器會將本次的文件密文、數字簽名值、用戶設備端 ID號、時間值、隨機數等信息保存到數據庫中,當以后某個用戶需要查看文件內容時,可再次使用這些信息進行驗簽。
請求查看數據文件的具體流程如下。1)用戶設備端向簽名驗證服務器發出查看文件內容的請求;2)簽名驗證服務器接收到請求后,要求對用戶設備端的身份進行認證;3)用戶設備端接收到反饋后開始向簽名驗證服務器發起身份認證請求;4)簽名驗證服務器對用戶設備端進行身份認證處理,如果認證通過并且此用戶具有查看文件內容的權限,則從數據庫中對應的密鑰種子中使用組合密鑰算法生成密鑰,并將文件密文解密后做摘要運算所獲得的 Hash值、密鑰和數字簽名值等一起發送給加密卡,在卡內完成簽名驗證的操作;5)如果簽名驗證通過則簽名驗證服務器會將密鑰和文件密文加密后發送給用戶設備端;6)用戶設備端將接收到的數據報文解密,并把密鑰和密文通過調用安全芯片接口即可獲得數據文件的明文。
端對端數字簽名及驗證模式,其在用戶設備端A上進行數字簽名,在簽名驗證服務器上完成對A簽名的驗證,簽名驗證通過后會再次對該數據文件進行簽名,然后將信息發送給用戶設備端B,由用戶設備端B完成對服務器數字簽名的驗證。端對端的數字簽名及驗證流程如下。
用戶設備端A:1)向Web服務器發送請求獲取當前的系統時間;2)將系統時間、數據文件通過調用接口傳入芯片;3)在安全芯片內由硬件隨機數生成器產生隨機數;4)在安全芯片內利用組合密鑰算法從密鑰種子中產生本次使用的密鑰;5)對數據文件使用摘要算法運算后獲取數據文件的Hash值;6)使用對稱加密算法對數據文件的Hash值進行加密獲得數字簽名值;7)使用對稱加密算法對數據文件進行加密生成密文;8)將參數信息、數字簽名值、密文等內容加密后發送給Web服務器。
數據轉發Web服務器:完成用戶設備端A、簽名驗證服務器以及用戶設備端B之間數據報文的轉發。
簽名驗證服務器:1)獲取用戶設備端A的數據報文,并通過調用加密卡接口,將數據報文傳入加密卡;2)在加密卡內解密數據報文;3)根據用戶設備端A的ID號定位密鑰種子,并利用組合密鑰算法生成密鑰;4)在加密卡內使用解密算法解密數據密文;5)對明文數據使用摘要算法運算后獲取數據文件的Hash值;6)在加密卡內使用對稱算法加密數據后獲得本地端的數字簽名值;7)將本地端的數字簽名值和用戶設備端A的數字簽名值做等值比較即可完成簽名驗證的工作。
在簽名獲得驗證后,簽名驗證服務器:1)根據用戶設備端B的ID號定位密鑰種子,并利用組合密鑰算法生成密鑰;2)對明文數據使用摘要算法運算后獲取數據文件的Hash值;3)使用對稱加密算法對數據文件的Hash值進行加密,獲得數字簽名值;4)使用對稱算法對數據文件進行加密生成密文;5)將參數信息、數字簽名值、密文等內容加密后發送給Web服務器,由Web服務器轉發給用戶設備端B。
用戶設備端 B:1)獲取簽名驗證服務器的數據報文,并通過調用接口將數據報文傳入芯片;2)在安全芯片內解密數據報文;3)在安全芯片內利用組合密鑰算法生成密鑰;4)在安全芯片內解密密文;5)對明文數據使用摘要算法運算后獲取數據文件的Hash值;6)使用對稱算法加密Hash值獲得本端的數字簽名值;7)將本地端的數字簽名值和驗證服務器端的數字簽名值做等值比較即可完成簽名驗證的工作。
數字簽名系統運行于 Linux平臺,Linux是一種自由和開放源碼的類 Unix操作系統,支持多用戶、多任務、多線程、安全可靠,具有強大的網絡功能。本方案選擇Linux平臺還因為Linux易于安裝和部署,管理和維護也十分方便。與Windows相比,Linux性能更加穩定,響應時間更快,安全和可靠性也更強。最大的特點是Linux系統開源,能夠方便地對系統做各種防護,即使系統被非法入侵了,也能夠很快地定位問題并加以修復。Linux系統源碼開放,能夠根據實際情況有針對性地對其做出調整和修改,從而實現軟件性能最大程度的優化。
數字簽名系統采用MySQL數據庫管理系統,MySQL是一種開放源碼的關系型數據庫管理系統,具有支持多線程、高并發、多用戶的特性。數據庫服務器設計了兩個數據庫,分別是密鑰種子數據庫和簽名驗證日記信息數據庫。密鑰種子數據庫中有三個表,分別是存放設備端用戶信息和密鑰種子信息的表,存放數字簽名驗證信息的表,存放密鑰種子監控信息的表;簽名驗證日記信息數據庫中有存放數字簽名驗證結果信息的表。
本文所設計的數字簽名系統,通過采用組合對稱密鑰技術,不僅能夠保證數據的完整性、私密性、簽名的不可抵賴性,而且可以有效解決傳統的數字簽名系統在構建時過于復雜、運行效率低下、密鑰難以管理的問題。同時通過采用硬件加密技術,進一步提高了數據的安全性。
系統運行于Linux平臺,使用MySQL數據庫,安全、可靠、穩定,并且易于維護和管理。系統耦合度低,可方便地嵌入到現有的各種應用中,其支持規模化密鑰管理的技術尤其適用于海量終端用戶的環境。
[1]陳迪鋒.淺談 PKI網格安全技術及應用[J].科技與社會.2008.
[2]蘭麗娜,劉辛越.電子商務安全體系研究[J].信息安全與通信保密.2007.
[3]王化群,徐名海,郭顯久.幾種無證書數字簽名方案的安全性分析及改進[J].通信學報.2008.
[4]南湘浩.CPK 組合公鑰體制(v7.0)[J].信息安全與通信保密.2012.
[5]鄧輝舫,鄧文,田文春,等.CPK 標識認證系統的設計及實現[J].計算機工程與設計.2008.
[6]張曉豐,樊啟華,程紅斌.密碼算法研究[J].計算機技術與發展.2006.
[7]吳杰芳.兩種密碼學體制的研究與分析[J].科技資訊.2009.
[8]劉勇,陳宇,陳鐘.對稱密碼算法的性能優化[J].北京大學學報(自然科學版).2008.
[9]李占才,王許書,涂序彥.RSA 快速硬件實現研究[J].計算機研究與發展.2001.
[10]陳燕.一種改進的快速 RSA密鑰生成算法[J].重慶郵電大學學報(自然科學版).2011.
[11]李云飛,柳青,李彤,等.一種可有效并行的RSA算法的研究[J].計算機應用研究.2011.
[12]Sandra K.Johnson,Gerrit Huizenga,Badari Pulavarty(編著).Linux服務器性能調整.清華大學出版社.2009.
[13]簡朝陽(編著).MySQL性能調優與架構設計.電子工業出版社.2009.