本站小編為你精心準備了電子簽章系統安全接口設計參考范文,愿這些范文能點燃您思維的火花,激發您的寫作靈感。歡迎深入閱讀并收藏。
摘要:
JNI技術使得Java語言能夠直接調用C++語言實現的本地函數,文中通過分析JNI技術,調用微軟CryptoAPI庫,實現了在USBKEY硬件中關于電子簽章系統所需要的密碼方案,實現了電子簽章服務層與密碼服務層的分離,設計了密碼設備接口,保證了電子簽章系統在互聯網環境下應用的安全。
關鍵詞:
JNI本地接口;安全接口;電子簽章
電子簽章系統目前廣泛地應用于電子政務(外網)、電子商務等,其應用環境常常暴露在互聯網上,考慮到互聯網的開放性,電子簽章系統在應用中將不可避免地面臨各種各樣的安全威脅,存在多種安全隱患,如印章數據的非法替換和修改、簽章信息的偽造、密鑰被竊取等等,系統的安全性亟待提高。本文利用JNI技術,通過調用微軟CryptoAPI接口,設計并實現了電子簽章系統密碼設備接口,保證了系統中電子印章的制作、簽發、驗證等功能的真實性、不可否認性、完整性。
1JNI概述
JNI是Java與其他編程語言的集成編程接口,又稱為本地方法接口(nativemethodinterface),最大的優勢是它沒有對Java虛擬機的實現施加任何限制,沒有更改Java語言的任何屬性,只是給Java語言提供了一種對外調用方式,是對Java語言的擴充。
1.1JNI、JaWin、JaCob對比現如今,實現Java語言的動態鏈接庫DLL交互的技術主要有三種,分別是JNI技術、JaWin(Ja-va-Win32integrationproject)技術和JaCob(Java-ComBridge)技術。其中后兩者是Sourceforge上的開源項目,也都是Windows系統上基于JNI技術的應用庫。JaCob技術提供了Java程序調用微軟的COM對象方法的功能,JaWin技術除了可以調用COM對象以外,還可以實現Win32-DLL動態鏈接庫中的方法。JNI技術是SUN公司提供的,使用Java和系統中的原始方法進行交互的技術。就功能而言,JNI的功能最為全面,其次是JaWin和Ja-Cob技術。從圖1可以看到,JNI允許從Java程序里調用本地算法,即JNI允許在虛擬機上運行的Java程序可以與C++編寫的應用程序或類庫進行相互調用。同時JNI還提供了一整套的應用程序編程接口,使得本地程序可以直接嵌入Java虛擬機,實現了Java與C++的互聯互通。
1.2JNI與C++聯合編程Java在Web編程領域得到了廣泛的應用。Java具有良好的跨平臺移植性,更易編寫沒有錯誤的代碼,易于實現多線程編程,易于編寫網絡應用程序等。但是沒有一種語言是完美的,Java在擁有眾多優點的同時同樣存在一些缺點或不足:一方面代碼效率低,在對文檔進行加解密、簽名驗簽操作時,Ja-va不是最優的選擇。另一方面,電子簽章系統需要訪問USBKEY加密設備,使用Java將會非常麻煩甚至無法實現。而C++正好彌補了Java的這些不足。尤其是在連接USBKEY加密設備方面,C++代碼執行效率高,并有豐富的類庫可供程序直接調用。所以,利用Java與C++聯合編程來實現電子簽章系統的安全接口,實現優勢互補,既能保障程序的運行效率又能保證算法在Internet環境下實現與其他Web程序的集成。
2電子簽章系統架構
電子簽章服務應用在電子政務應用層和通用密碼服務層之間,電子政務應用系統通過調用電子簽章服務接口實現具體電子簽章應用,電子印章管理系統為簽章服務提供電子印章的制作、發放、授權、驗證等功能,而電子簽章服務調用通用密碼服務層提供的相應的密碼服務,實現硬件密碼設備終端密碼算法和密鑰使用。系統分層邏輯結構如圖2所示。本文在通用密碼服務層利用JNI技術,調用了底層CryptoAPI算法庫,實現了安全密碼算法。底層的具體實現對于電子簽章服務層是透明的,因此電子簽章系統可以和符合各種安全級別的加密設備/解決方案結合,而上層代碼幾乎不需要改動,提高了系統的可兼容性、可移植性。
面向接口編程有利于理清系統各個層次之間的關系,去除依賴關系。每層并不是直接向上層提供服務,而是通過一系列的接口,僅向上層暴露接口功能,上層對下層僅僅依賴接口,并不依賴具體類。接口設計在軟件編程中至關重要。首先,設計良好、穩定性高、高內聚低耦合、可擴展性強的接口能夠保障軟件的穩定進展和進一步升級;其次,接口設計可以提高系統的靈活性,當下層需要改變時,只要接口和接口功能不變,則上層不需要做任何改變,甚至可以在不修改上層代碼的基礎上將下層整個換掉;再次,可以制定統一的接口標準,將不同模塊的代碼設計思路和代碼編寫風格封裝在下層,不影響系統的整體性;最后,有了統一的接口標準,不同層次的開發人員可以并行開發,提高效率。
3.1JNI接口設計在本系統中Java語言占主體地位,需要調用C++語言編寫的密碼算法,需要用到JIN技術。通過JNI接口設計,實現了系統上下層的分割,使得各個部分獨立的變化,底層算法、加密設備的改變不會影響上層的Java程序。本文JNI接口包含兩個類,參數打包類和方法調用類,下面對這兩個類進行詳細介紹。參數打包類(CryptObj.java)將方法調用類(CryptAPI.java)中需要傳遞到C++層的參數進行打包成類,并設有參數設置和獲取的接口,方便Java與C++之間的參數傳遞,以及上層參數的獲取。方法調用類(CryptoAPI.java)中實現對本地方法的聲明,將參數打包類(CryptObj.java)中對應的參數傳到C++中,并加載本地類庫。方法調用類中只有接口,具體實現方法使用C++語言實現,編譯成CryptoAPI.dll供Java調用。
3.2底層密碼庫設計底層的密碼庫使用C++語言編寫,調用Cryp-toAPI現有接口,通過CSP模塊連接USBKEY加密設備實現安全功能。CryptoAPI是Microsoft公司提供的加密應用程序接口(即CryptographyAPI),可以方便地在應用程序中加入強大的加密功能,而不必考慮基本算法,但必須具有密碼服務提供者模塊(CSP)。CryptoAPI函數使用“加密服務提供者”(CSP)完成數據加密、解密以及密鑰的存儲管理,在本文中,CSP與硬件加密設備USBKEY一起來進行加密。底層密碼庫(CryptoAPI.dll),從Java層獲取參數,并轉換成C++中可操作的數據類型,經過本層的密碼算法,將加解密/簽名驗簽結果轉換成Java中可操作類型返回。
4安全性分析
利用JNI技術,調用底層密碼庫,加載Cryp-toAPI現有函數連接USBKEY實現了電子簽章系統安全接口,保障了電子簽章系統在制章、發章、簽章、驗章過程的安全可靠。本文利用密碼設備的加解密功能加密系統中的敏感信息,使敏感信息的機密性得到保護,并通過USBKEY提供的簽名功能實現對印章數據、蓋章數據的完整性和不可抵賴性保護,使得電子簽章系統比傳統印章更可靠、安全,符合信息化發展趨勢。
5結束語
通過JNI技術,Java程序能夠直接調用底層C++語言編寫的DLL(動態鏈接庫),彌補了Java語言在控制硬件方面的不足。使用JNI技術設計電子簽章系統安全接口,實現了通用密碼服務層與電子簽章服務層的分離,避免了電子簽章系統對下層具體類的依賴,在接口和接口功能不變的前提下,修改底層算法、更改密碼設備不會對上層架構造成任何影響,使得簽章系統更加靈活,能夠適配各種安全級別加密設備或加密方案,具有靈活的可移植性。
參考文獻:
[1]國家密碼管理局.中華人民共和國密碼行業標準安全電子簽章密碼應用技術規范[S].2014.
[2]蔣華,劉娟,李浩亮.分級管理的電子簽章系統的設計與實現[J].科技世界,2013,21(42):50-55.
[3]錢林紅.ASP中的數據保護[D].云南:文山師范高等專科學校學報,2007.
[4]林勝利,王坤茹,孟海麗.Java優化編程[M].北京:電子工業出版社,2005.
作者:蔣華 孫婧 單位:北京電子科技學院 西安電子科技大學