一种基于JCE框架实现的SM2密钥运算方法和装置与流程

文档序号:14776310发布日期:2018-06-23 03:26阅读:270来源:国知局
一种基于JCE框架实现的SM2密钥运算方法和装置与流程

本发明涉及信息安全技术领域,具体而言,涉及一种基于JCE框架实现的SM2密钥运算方法和装置。



背景技术:

市场上已有不少基于JCE框架的机密性安全服务产品,而且SUN公司也将自己的一个基于JCE框架的机密性安全服务产品集成到了Java2SDK1.5版本中,并称为SunJCE,还有BouncyCastle JCE等,但事实上,这些产品中大部分的解决方案都只支持DSA、DES、3DES等国际标准加密算法,导致在实际应用中,必须依赖国外技术,安全性不高。



技术实现要素:

有鉴于此,本发明实施例的目的在于提供一种基于JCE框架实现的SM2密钥运算方法和装置,以改善上述问题。

本发明较佳实施例提供了一种基于JCE框架实现的SM2密钥运算方法,应用于终端设备,所述方法包括:

应用程序模块发送包括密钥对象的第一SM2密钥运算请求给所述JCE实现模块;

所述JCE实现模块对接收到的所述SM2密钥运算请求对所述密钥对象进行解析,并根据解析结果发送第二SM2密钥运算请求给所述密钥运算模块;

所述密钥运算模块根据所述第二SM2密钥运算请求进行密钥运算,并将运算结果发送给所述JCE实现模块;

所述JCE实现模块发送所述运算结果给所述应用程序模块以完成对应用程序的密钥运算。

进一步地,在所述终端设备外接密码管理设备时,所述应用程序模块中的密钥对象通过以下步骤得到:

所述应用程序模块发送包括密钥标识的SM2密钥对导出请求给JCE实现模块;

所述JCE实现模块根据所述密钥对导出请求创建带有密钥标识的随机源,并将密钥标识转换成密钥号;

所述JCE实现模块发送包括密钥号的密钥获取请求给所述密钥运算模块;

所述密钥运算模块发送与所述密钥号对应的密钥数据给所述JCE实现模块;

所述JCE实现模块基于所述密钥数据、密钥号创建密钥对象并发送给所述应用程序模块。

进一步地,在所述JCE实现模块发送运算结果给所述应用程序模块的步骤之前,所述方法还包括:

所述JCE实现模块将包含安全提供者和引擎类的文件打包为属性文件;以及所述JCE实现模块调用JCE签名证书,并根据该JCE签名证书对所述属性文件进行签名。

进一步地,所述密钥运算为加密运算时,所述运算结果包括2个32byte的公钥、对明文的加密结果以及用于进行数据校验的杂凑值。

进一步地,所述方法还包括:

所述密钥运算模块根据所述JCE实现模块密钥获取请求触发密钥生成请求,并发送给外接于所述终端设备的密码管理设备;

所述密码管理设备生成SM2密钥对并发送给所述JCE实现模块;或者

所述密钥运算模块根据所述JCE实现模块发送的密钥获取请求生成SM2密钥对并发送给所述JCE实现模块。

进一步地,所述密码管理设备生成SM2密钥的步骤包括:

所述密码管理设备根据所述密钥生成请求中包含的密钥号完成SM2密钥对的生成和保存。

本发明较佳实施例还提供一种基于JCE框架实现的SM2密钥运行装置,所述装置包括应用程序模块、JCE实现模块、密钥运算模块,所述应用程序模块与所述JCE实现模块连接用于发送SM2密钥运算请求或SM2密钥对导出请求,所述JCE实现模块与所述密钥运算模块连接用于发送处理后的SM2密钥对导出请求或密钥运算请求。

进一步地,所述密钥运算模块还可与外接于所述终端设备的密码管理设备连接,用于发送将处理后的SM2密钥对导出请求或密钥运算请求发送给所述密码管理设备。

进一步地,所述密码管理设备通过PCI接口、PCI_E接口或usb接口插接到所述终端设备。

进一步地,所述密码管理设备可以是Ukey、加密机、加密卡中的一种或多种。

与现有技术相比,本发明实施例提供一种基于JCE框架实现的SM2密钥运算方法和装置,在实现产品加密、加密等过程中,不用依赖于国外的加密技术,算法自主可控,且安全性高。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本发明实施例提供的基于JCE框架实现的SM2密钥运算装置的应用场景示意图。

图2为本发明实施例图1为本发明实施例提供的基于JCE框架实现的SM2密钥运算装置的另一应用场景示意图。

图3为本发明实施例提供的基于JCE框架实现的SM2密钥运算方法的流程示意图。

图4为本发明实施例提供的基于JCE框架实现的SM2密钥运算方法的另一流程示意图。

图5为图3中所示的步骤S10的子流程示意图。

图标:10-终端设备;100-基于JCE框架实现的SM2密钥运算装置;110-应用程序模块;120-JCE实现模块;130-密钥运算模块;200-存储器;300-存储控制器;400-处理器;20-密码管理设备。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

如图1所示,为本发明实施例提供的终端设备10的方框结构示意图。其中,所述终端设备10包括基于JCE框架实现的SM2密钥运算装置100、存储器200、存储控制器300以及处理器400。其中,所述终端设备10可以是,但不限于,电脑、移动上网设备(mobile Internet device,MID)等具有处理功能的电子设备,还可以是服务器等。

具体地,所述存储器200、存储控制器300、处理器400各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件之间通过一条或多条通讯总线或信号线实现电性连接。所述赋形基于JCE框架实现的SM2密钥运算装置100包括至少一个可以软件或固件的形式存储于所述存储器200中或固化在所述终端设备10的操作系统中的软件功能模块。所述处理器400在所述存储控制器300的控制下访问所述存储器200,以用于执行所述存储器200中存储的可执行模块,例如,所述基于JCE框架实现的SM2密钥运算装置100所包括的软件功能模块及计算机程序等。

实际实施时,所述终端设备10还可外接密钥管理设备,如Ukey、加密机、加密卡等硬件设备,且所述密钥管理设备可通过PCI接口、PCI_E接口或usb接口等插接到所述终端设备10,本实施例在此不做限制。

可以理解,图1所示的结构仅为示意,所述终端设备10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。图1中所示的各组件可以采用硬件、软件或其组合实现。

进一步地,如图2所示,为本发明实施例提供的一种基于JCE框架实现的SM2密钥运算装置100的方框结构示意图,所述JCE框架实现的SM2密钥运算装置包括应用程序模块110、JCE实现模块120、密钥运算模块130,所述JCE实现模块120分别与所述应用程序模块110和所述密钥运算模块130连接。

其中,所述应用程序模块110为用户实现需要功能的应用,所述JCE实现模块120实现一个JCE服务安全提供者的功能,所述密钥运算模块130既可以用作实现对外接的密码管理设备20进行初始化、密钥生成、删除、备份等管理功能,又可以用于密钥对的生成、加/解密、签名等密钥运算等,实际实施时,所述密钥运算模块130可根据用户对安全级别的要求或个人需求进行相关功能的灵活设定。

具体地,下面将结合图3对所述基于JCE框架实现的SM2密钥运算装置100中各模块的功能以及基于JCE框架实现的SM2密钥运算方法中的具体流程和步骤进行介绍。其中,所述基于JCE框架实现的SM2密钥运算方法应用于终端设备10。所应说明的是,本发明实施例提供的基于JCE框架实现的SM2密钥运算方法不以图2及以下所述的具体顺序为限制。

首先需要说明的是,SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法。该SM2算法是公钥密码算法,是一种更先进更安全的算法,在我们国家商用密码体系中被用来替换RSA算法,下面对基于JCE框架实现的SM2密钥运算方法进行介绍。

步骤S10,应用程序模块110发送包括密钥对象的第一SM2密钥运算请求给所述JCE实现模块120;

步骤S11,所述JCE实现模块120对接收到的所述SM2密钥运算请求对所述密钥对象进行解析,并根据解析结果发送第二SM2密钥运算请求给所述密钥运算模块130;

步骤S12,所述密钥运算模块130根据所述第二SM2密钥运算请求进行密钥运算,并将运算结果发送给所述JCE实现模块120。

步骤S13,所述JCE实现模块120发送所述运算结果给所述应用程序模块110以完成对应用程序的密钥运算。

请结合参阅图4,该图4所示为JCE框架的调用流程,其中,在所述步骤S10-步骤S13的执行过程中,所述应用程序模块110相当于所述基于JCE框架实现的SM2密钥运算装置100与上层应用的接口类或抽象类。如,在需要对上层应用进行加密、解密或其他操作时,可通过所述应用程序模块110发送包括密钥对象的第一SM2密钥运算请求给所述JCE实现模块120等。

实际实施时,由于上述基于JCE框架实现的SM2密钥运算方法既可以基于软件实现,也可以是基于如Ukey、加密机、加密卡等密码管理设备20实现,因此,根据硬件结构的不同,所述JCE框架实现的SM2密钥运算方法的具体实现步骤也存在差异。

例如,若所述上层应用是基于密码管理设备20进行加密,那么如图5所示,所述密钥对象可通过下述步骤得到:

步骤S100,所述应用程序模块110发送SM2密钥对导出请求给JCE实现模块120;

步骤S101,所述JCE实现模块120根据所述密钥对导出请求创建带有密钥标识的随机源,并将密钥标识转换成密钥号;

步骤S102,所述JCE实现模块120发送包括密钥号的密钥获取请求给所述密钥运算模块130;

步骤S103,所述密钥运算模块130发送与所述密钥号对应的密钥数据给所述JCE实现模块120;

步骤S104,所述JCE实现模块120基于所述密钥数据、密钥号创建密钥对象并发送给所述应用程序模块110。

其中,在生成SM2密钥对时,所述密钥运算模块130根据所述JCE实现模块120密钥获取请求触发密钥生成请求,并发送给外接于所述终端设备10的密码管理设备20;所述密码管理设备20生成SM2密钥对并发送给所述JCE实现模块120。可以理解的是,所述密码管理设备20根据所述密钥生成请求中包含的密钥号完成SM2密钥对的生成和保存。

又例如,当基于软件实现所述基于JCE框架实现的SM2密钥运算方法时,所述密钥运算模块130根据所述JCE实现模块120发送的密钥获取请求生成SM2密钥对并发送给所述JCE实现模块120。

在此应理解,无论是基于软件或硬件实现所述基于JCE框架实现的SM2密钥运算方法,所述SM2密钥对的生成均可基于JDKKeyPairGenerator类实现。KeyPairGenerator类可通过public static KeyPairGeneratorgetInstance(String algorithm,Provider provider)方法实例化一个对象,其中algorithm参数指定密钥对的算法,如SM2算法等,provider参数指定服务提供商。public void initialize(int keysize,SecureRandomrandom)方法使用给定的随机源初始化确定模长的密钥对生成器。其中,当通过密码管理设备20加密时,keysize用来确定密钥对的模长,random是指定的随机源对象,本实施例中传入前一步骤中创建的随机源SecureRandom对象ran。public KeyPair generateKeyPair()方法,根据initialize初始化的内容进行密钥生成工作,返回一对非对称密钥对的对象。

进一步地,在步骤S12中实现密钥运算时,如SM2加解密,可通过javax.crypto.Cipher类提供加密和解密功能,且该javax.crypto.Cipher类是JCE框架的核心,其中,cipher类首先调用抽象类WrapCipherSpi,然后调用JCESM2Cipher类实现SM2加解密。

具体地,在基于JCE框架实现SM2的加解密时,可利用JCE框架中提供的javax.crypto.Cipher类实现加密和解密功能。其中,cipher一般分实例化(getInstance)、初始化(init)、更新(update)和完成(doFinish)4个步骤。具体地,public final void init(int opmode,Keykey,SecureRandom random)方法进行Cipher类的初始化,其中,opmod来指定进行加密操作还是解密操作,加密运算需要传入“Cipher.ENCRYPT_MODE”,解密运算传入“Cipher.DECRYPT_MODE”;key为参加运算的密钥对象,random为指定的随机源。进行加密运算时,传入已获得的公钥pubkey,进行解密运算时,传入已获得的私钥prikey。public final byte[]doFinal(byte[]input)方法进行具体的加解密工作,其中,input参数为输入数据,当进行加密运算时,input是需要加密的明文数据,返回加密后的密文数据;当进行解密运算时,input是需要解密的密文数据,返回解密后的明文数据。

可选地,当所述密钥运算为加密运算时,所述运算结果包括2个32byte的公钥、对明文的加密结果以及用于进行数据校验的杂凑值。具体地,以国密推荐的SM2椭圆曲线公钥密码算法为例,首先产生随机数计算出曲线点C1,2个32byte的BigInterger大数(公钥),即为SM2加密结果的第1部分。第2部分则是真正的密文,是对明文的加密结果,长度和明文一样。第3部分是杂凑值,用来校验数据。在此应理解的是,SM2解密算法是加密的逆运算。首先需要从密文中取出加密机结果的3部分值,然后通过私钥计算出M’的明文值,最后校验数据。

此外,在执行上述步骤S13之前,本实施例还给出了基于SignEcc类实现的SM2签名验签步骤。具体地,所述JCE实现模块120将包含安全提供者和引擎类的文件打包为属性文件;以及所述JCE实现模块120调用JCE签名证书,并根据该JCE签名证书对所述属性文件进行签名。本实施例中,所述安全提供者和引擎类的文件为申请人自主编写且区别与所述JCE框架中原有的安全提供者和引擎类的文件,如,该安全提供者和引擎类可通过CrypticProvider类实现,以及实际实施时,可将安全提供者和引擎类打包成jar文件,其中,可以使用fatjar将依赖jar包打包成一个jar包。

另外,在获得jar包后,还可获得一个JCE签名证书,并用JCE签名证书对jar包进行签名并保存,其中,JCE签名证书必须由特定的证书授权机构签发,以确保有效性和可靠性。

上述步骤也是基于SignEcc类实现的SM2签名验签步骤,其中,可通过调用java.security.Signature签名类实现签名验证功能。实际实施时,Signature类首先调用抽象类SignatureSpi,然后是抽象类ECCBase,最后调用EccSignature类来实现SM2签名验签。综上所述,本发明实施例提供一种基于JCE框架实现的SM2密钥运算方法和装置,在实现产品加密、加密等过程中,不用依赖于国外的加密技术,算法自主可控,且安全性高。

在本发明实施例所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置和方法实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,电子设备,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本发明的可选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1