本站小编为你精心准备了电子签章系统安全接口设计参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。
摘要:
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.
作者:蒋华 孙婧 单位:北京电子科技学院 西安电子科技大学