CN103425939A - 一种sm3算法在java环境中的实现方法及系统 - Google Patents

一种sm3算法在java环境中的实现方法及系统 Download PDF

Info

Publication number
CN103425939A
CN103425939A CN2013103407922A CN201310340792A CN103425939A CN 103425939 A CN103425939 A CN 103425939A CN 2013103407922 A CN2013103407922 A CN 2013103407922A CN 201310340792 A CN201310340792 A CN 201310340792A CN 103425939 A CN103425939 A CN 103425939A
Authority
CN
China
Prior art keywords
algorithm
java
module
jce
standard
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2013103407922A
Other languages
English (en)
Other versions
CN103425939B (zh
Inventor
何志平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Electronics Technology Network Security Technology Co ltd
Original Assignee
Chengdu Westone Information Industry Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Chengdu Westone Information Industry Inc filed Critical Chengdu Westone Information Industry Inc
Priority to CN201310340792.2A priority Critical patent/CN103425939B/zh
Publication of CN103425939A publication Critical patent/CN103425939A/zh
Application granted granted Critical
Publication of CN103425939B publication Critical patent/CN103425939B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明涉及密码与信息安全技术领域,本发明公开了一种SM3算法在JAVA环境中的实现方法,其具体包括以下的步骤:依照PKCS#11规范开发实现算法替换的适配层,在JAVA环境中,当应用程序通过加密框架JCA标准的编程接口调用密码扩展JCE中的安全散列算法SHA-256算法时,适配层直接调用SM3算法实现的应用程序编程接口API,在下层将需要进行散列运算的数据按SM3算法进行运算和处理,实现由SHA-256算法替换为SM3算法。本发明还公开了一种SM3算法在JAVA环境中的实现系统。在加密框架JCA中,借用SHA-256算法的算法ID,实现SM3算法,解决了无法在现成的JCE实现中添加新算法的问题,同时避免了实现新JCE的巨大工作量和申请JCE授权签名的繁琐手续。

Description

一种SM3算法在JAVA环境中的实现方法及系统
技术领域
本发明涉及密码与信息安全技术领域,本发明公开了一种SM3算法在JAVA环境中的实现方法及系统。
背景技术
SM3是码杂凑算法,是国家密码管理局编制的商用算法,用于密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。对长度为l(l< 264) 比特的消息m,SM3杂凑算法经过填充和迭代压缩,生成杂凑值,杂凑值长度为256比特。
JAVA是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
然而,现有技术中的SM3算法却并不能直接在JAVA环境中实现。JAVA环境中的加密算法通过JCA和JCE来实现。
JCA是Java Cryptography Architecture的简称(Java加密框架),它是Java平台为实现密码和安全需求定义的一套完整的、独立的编程接口,它为Java环境的安全提供了全面的密码安全支撑,它们为Java应用程序加密和数字签名提供了一种统一和一致的方式。应用程序通过JCA提供的接口实现对密码算法的调用。JCA只是一套面向应用开发的统一编程接口,它不包含具体的算法实现。算法实现由它下层的JCE提供。即应用程序调用JCA接口,JCA接口再调用某一JCE,从而实现对某一加密算法的调用。
JCE是Java Cryptography Extension的简称,(Java密码扩展)提供用于加解密、密钥生成、密钥管理和密钥协商以及 Message Authentication Code(MAC)算法的框架和实现。它提供对对称、不对称、块和流密码的加密支持,它还支持安全流和密封的对象。JCE采用实现的独立和算法的独立,使JCE安全框架具有了良好的扩展性。它使用提供者(provider)的理念为管理和组织所有密码安全的实现并为应用程序提供服务。JAVA环境中可以同时存在多种不同的JCE实现,在security.provider中定义了一套标准接口,所有的JCE实现都要实现这一套标准接口。
如果通过新的提供者(provider),可以将新的算法或者新的密码设备无缝的加入到JCE中。但出于JCE框架自身安全性的考虑,只有被可信任的实体签名认证的提供者(provider)才可以嵌入JAVA安全框架中。也就是说首先要实现包括新算法的新JCE,然后向JAVA安全管理机构申请获取授权证书,并产生签名,新开发的JCE才能加入到JAVA环境中供应用程序使用。而SM3是国产的,没有现成的JCE可以支持,需要全新开发,这需要很长的时间周期,同时申请证书也需要很长的时间。
因而在JAVA环境中, 不能直接通过加密框架JCA标准的编程接口调用SM3算法。但SM3算法是国家密码管理局编制的商用算法,用于密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求,而JAVA的应用又非常广泛,在JAVA环境中不能直接通过加密框架JCA标准的编程接口调用SM3算法极大地影响了应用程序的开发和维护。
发明内容
针对在JAVA环境中不能直接通过加密框架JCA标准的编程接口调用SM3算法的技术问题,提供了一种SM3算法在JAVA环境中的使用方法。本发明还公开了SM3算法在JAVA环境中的实现系统。
本发明的发明目的通过下述技术方案来实现:
一种SM3算法在JAVA环境中的实现方法,其具体包括以下的步骤:依照PKCS#11规范开发实现算法替换的适配层,在JAVA环境中,当应用程序通过加密框架JCA标准的编程接口调用密码扩展JCE中的安全散列算法SHA-256算法时,适配层直接调用SM3算法实现的应用程序编程接口API,在下层将需要进行散列运算的数据按SM3算法进行运算和处理,实现由SHA-256算法替换为SM3算法。
更进一步地,上述SM3算法为软件实现或者硬件密码模块实现。
更进一步地,上述方法还包括通过配置实现在多种不同的SM3算法实现之间换切换。
更进一步地,上述方法还包括当应用程序通过加密框架JCA标准的编程接口调用的不是密码扩展JCE中的安全散列算法SHA-256算法时,在密码扩展JCE中,选择算法ID对应的算法处理数据。
本发明还公开了一种SM3算法在JAVA环境中的实现系统,其具体包括JAVA应用程序模块、JAVA安全框架模块、适配层模块、PKCS#11规范实现的密码模块、PKCS#11规范实现的密码模块的程序接口API、算法软件实现的程序接口API,所述应用程序模块用于调用JAVA安全框架模块,所述JAVA安全框架模块用于调用适配层模块,所述适配层模块用于调用PKCS#11规范实现的密码模块、PKCS#11规范实现的密码模块的程序接口API和算法软件实现的程序接口API,在JAVA环境中,当应用程序通过加密框架JCA标准的编程接口调用密码扩展JCE中的安全散列算法SHA-256算法时,适配层直接调用SM3算法实现的应用程序编程接口API,在下层将需要进行散列运算的数据按SM3算法进行运算和处理,实现由SHA-256算法替换为SM3算法。
本发明的有益效果:避免了实现新JCE的巨大工作量和申请JCE授权签名的繁琐手续。借用现有的算法ID解决了,通过JCA标准接口无法调用SM3算法的问题。应用层所调用的开发接口完全符合JCA/JCE编程规范。支持多种形式的SM3实现,无论是全软件实现还是基于硬件密码模块的实现。即使是自定义的API,都可以支持。通过配置可以实现在多种不同的SM3算法实现之间换切换而不用改动上层程序。
附图说明
图1为SM3算法在JAVA环境中的实现方法的流程图。
图2为SM3算法在JAVA环境中的实现的系统结构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及具体实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示的SM3算法在JAVA环境中的实现方法的流程图。本发明公开了一种SM3算法在JAVA环境中的实现方法,其具体包括以下的步骤:依照PKCS#11规范开发实现算法替换的适配层,在JAVA环境中,当应用程序通过加密框架JCA标准的编程接口调用密码扩展JCE中的安全散列算法SHA-256算法时,适配层直接调用SM3算法实现的应用程序编程接口API,在下层将需要进行散列运算的数据按SM3算法进行运算和处理,实现由SHA-256算法替换为SM3算法。在加密框架JCA中,借用SHA-256的算法ID,解决了直接通过JCA接口无法调用新算法的问题,同时避免了实现新JCE的巨大工作量和申请JCE授权签名的繁琐手续。
SM3算法是散列算法的一种,是我国国家密码管理局编制的商用算法。为满足电子认证服务系统等应用的需求,国家密码管理局在2010年12月发布了SM3算法,用于密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。
哈希(Hash)算法:散列算法,它是一种单向密码支,即它是一个从明文件到密文件的不可逆的映射。只有加密过程,没有解密过程,同时哈希算法可以将任意长度的输入经过变换以后得到固定长度的输出。哈希算法的这种单赂特征和输出数据长度因定的特征使得它可以生成消息或数据据块的“指纹”。因此在数据密码协议、数字签名、完整性认证等领域有着广泛的应用。
SHA-256算法(Secure Hash Algorithm算法的简称,安全散列算法) 是美国国家安全局 (NSA) 设计的散列算法,它会克服有关延伸长度攻击的问题。SHA-256算法已经被嵌入JAVA安全框架中。
哈希算法参数表如下:
算法 输出长度(bits) 数据区块长度(bits) 最大输入消息长度(bits) 一个words的长度(bits) 循环次数 使用到的操作符
SHA-0 160 512 264-1 32 80 +,and,or,xor,rotl
SHA-1 160 512 264-1 32 80 +,and,or,xor,rotl
BLAKE-256 256 512 264-1 32 10 +,and,or,xor,shr,rotl
SHA-512 512 1024 2128-1 64 80 +,and,or,xor,shr,rotl
SHA-256 256 512 264-1 32 64 +,and,or,xor,shr,rotl
SM3 256 512 264-1 32 64 +,and,or,xor,nor,,rotl
从上表我们可以看到,SHA-256算法和SM3算法的参数是相同的,SM3算法所需要的所有参数,都可以从应用层按照SHA-256的参数要求传入算法实现层,正是基于这一重要前提,在本申请中才可以在应用层仍然采用SHA-256的算法标识创建密码对象,在下层利用SM3来替代SHA-256算法进行数据运算处理,以达到在不用实现新的JCE的前提下调用了SM3算法。
采用本发明的方案后,应用程序可以通过调用SHA-256算法来实现对SM3算法的调用。换句说,就是在应用程序中调用的是SHA-256算法,但是数据传入下层进行处理时,被自动被按SM3算法进行处理。用SM3算法替换SHA-256算法处理数据。
PKCS#11:在密码系统中,PKCS#11是公钥加密标准(PKCS, Public-Key Cryptography Standards)中的一份子,由RSA实验室(RSA Laboratories)发布,它为加密令牌定义了一组平台无关的API,如硬件安全模块和智能卡。PKCS#11定义了一套独立于技术的程序设计接口,但不包括接口的实现。一般接口的实现是由算法实现者或设备提供商提供,如USBKEY的生产厂商会提供符合PKCS#11接口标准的API的实现。这样应用程序只要通过PKCS#11接口即可调用API函数实现的功能。
需要说明的是从JDK1.5版本开始,JAVA全面支持PKCS#11接口了,为JAVA支持硬件密码模块提供了正式的解决方案。 
虽然从JDK1.5版本开始,JAVA支持PKCS#11接口,为JAVA支持智能密码模块提供了正式的解决方案,但是SM3是我国国家密码管理局编制的商用算法,即使采用PKCS#11将SM3的实现加入到了JCA中,也由于无法采这种方式将SM3的算法标识注册到JCA中,也就无法利用JCA提供的应用开发接口创建出SM3的密码对象,应用程序也就无法调用SM3算法。
其中自动替换的过程的过程具体为:采用PKCS#11规范开发实现算法替换的适配层,通过适配层调用SM3算法的API,从而实现将SHA-256算法自动替换为SM3算法。JAVA JDK1.5开始支持PKCS#11,因此根据PKCS#11规范开发的PKCS#11适配层可以被JAVA调用。当应用程序通过JCA提供的统一开发接口调用SHA-256算法后,当信号和数据传送到的适配层后(Adapter PKCS#11 Layer)时,所有的数据都用SM3算法进行运算和处理。
采用本发明的方法,避免了实现新JCE的巨大工作量和申请JCE授权签名的繁琐手续。借用现有的算法ID解决了直接通过JCA接口无法调用新算法的问题。应用层所调用的开发接口完全符合JCA/JCE编程规范。因为应用程序调用的是JCA,因而应用层所调用的开发接口完全符合JCA/JCE编程规范。
更进一步地,上述SM3算法可以为软件实现也可以为硬件密码模块实现。本发明支持多种形式的SM3算法的实现,无论是全软件实现还是基于硬件密码模块的实现。因此无论自定义的API是其它标准的API,都可以支持。
更进一步地,上述方法还包括通过配置可以实现在多种不同的SM3算法实现之间换切换,此种切换不用改动上层程序,便于实现。
更进一步地,上述方法还包括当应用程序通过加密框架JCA标准的编程接口调用的不是密码扩展JCE中的安全散列算法SHA-256算法时,在密码扩展JCE中,选择算法ID对应的算法处理数据。本发明在实现兼容SM3算法的同时,同样能够实现原有的除SHA-256算法之外的其他JCE中的授权算法。
如图2所示的SM3算法在JAVA环境中的实现的系统结构图。本发明还公开了一种SM3算法在JAVA环境中的实现系统,其具体包括JAVA应用程序模块、JAVA安全框架模块、适配层模块、PKCS#11规范实现的密码模块、PKCS#11规范实现的密码模块的程序接口API、算法软件实现的程序接口API,所述应用程序模块用于调用JAVA安全框架模块,所述JAVA安全框架模块用于调用适配层模块,所述适配层模块用于调用PKCS#11规范实现的密码模块、PKCS#11规范实现的密码模块的程序接口API和算法软件实现的程序接口API,在JAVA环境中,当应用程序通过加密框架JCA标准的编程接口调用密码扩展JCE中的安全散列算法SHA-256算法时,适配层直接调用SM3算法实现的应用程序编程接口API,在下层将需要进行散列运算的数据按SM3算法进行运算和处理,实现由SHA-256算法替换为SM3算法。在加密框架JCA中,借用SHA-256的算法ID,解决了直接通过JCA接口无法调用新算法的问题,同时避免了实现新JCE的巨大工作量和申请JCE授权签名的繁琐手续。
上述说明示出并描述了本发明的一个优选实施例,但如前所述,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。

Claims (5)

1.一种SM3算法在JAVA环境中的实现方法,其具体包括以下的步骤:依照PKCS#11规范开发实现算法替换的适配层,在JAVA环境中,当应用程序通过加密框架JCA标准的编程接口调用密码扩展JCE中的安全散列算法SHA-256算法时,适配层直接调用SM3算法实现的应用程序编程接口API,在下层将需要进行散列运算的数据按SM3算法进行运算和处理,实现由SHA-256算法替换为SM3算法。
2.如权利要求1所述的SM3算法在JAVA环境中的实现方法,其特征在于所述SM3算法为软件实现或者硬件密码模块实现。
3.如权利要求1所述的SM3算法在JAVA环境中的实现方法,其特征在于所述方法还包括通过配置实现在多种不同的SM3算法之间换切换。
4.如权利要求1所述的SM3算法在JAVA环境中的实现方法,其特征在于所述方法还包括当应用程序通过加密框架JCA标准的编程接口调用的不是密码扩展JCE中的安全散列算法SHA-256算法时,在密码扩展JCE中,选择算法ID对应的算法处理数据。
5.一种SM3算法在JAVA环境中的实现系统,其特征在于具体包括JAVA应用程序模块、JAVA安全框架模块、适配层模块、PKCS#11规范实现的密码模块、PKCS#11规范实现的密码模块的程序接口API、算法软件实现的程序接口API,所述应用程序模块用于调用JAVA安全框架模块,所述JAVA安全框架模块用于调用适配层模块,所述适配层模块用于调用PKCS#11规范实现的密码模块、PKCS#11规范实现的密码模块的程序接口API和算法软件实现的程序接口API,在JAVA环境中,当应用程序通过加密框架JCA标准的编程接口调用密码扩展JCE中的安全散列算法SHA-256算法时,适配层直接调用SM3算法实现的应用程序编程接口API,在下层将需要进行散列运算的数据按SM3算法进行运算和处理,实现由SHA-256算法替换为SM3算法。
CN201310340792.2A 2013-08-07 2013-08-07 一种sm3算法在java环境中的实现方法及系统 Active CN103425939B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310340792.2A CN103425939B (zh) 2013-08-07 2013-08-07 一种sm3算法在java环境中的实现方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310340792.2A CN103425939B (zh) 2013-08-07 2013-08-07 一种sm3算法在java环境中的实现方法及系统

Publications (2)

Publication Number Publication Date
CN103425939A true CN103425939A (zh) 2013-12-04
CN103425939B CN103425939B (zh) 2016-08-10

Family

ID=49650659

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310340792.2A Active CN103425939B (zh) 2013-08-07 2013-08-07 一种sm3算法在java环境中的实现方法及系统

Country Status (1)

Country Link
CN (1) CN103425939B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105281890A (zh) * 2014-07-22 2016-01-27 华中科技大学 一种折叠结构的sm3杂凑密码压缩运算电路
CN106452771A (zh) * 2016-10-10 2017-02-22 山东渔翁信息技术股份有限公司 Jce调用密码卡实现内置rsa密钥运算的方法及装置
CN106789037A (zh) * 2017-01-24 2017-05-31 山东渔翁信息技术股份有限公司 一种pkcs#11接口调用密码设备的签名方法及装置
CN107818265A (zh) * 2017-10-23 2018-03-20 中国银行股份有限公司 加密方法、装置和系统
CN108199841A (zh) * 2018-02-08 2018-06-22 山东渔翁信息技术股份有限公司 一种基于jce框架实现的sm2密钥运算方法和装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130066924A1 (en) * 2008-12-23 2013-03-14 Honeywell International Inc. Method and apparatus for utilizing matlab functionality in java-enabled environment

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130066924A1 (en) * 2008-12-23 2013-03-14 Honeywell International Inc. Method and apparatus for utilizing matlab functionality in java-enabled environment

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
王勇 等: "国家电子政务外网电子认证系统SM2国密算法升级改造方案研究", 《信息网络安全》, 31 October 2012 (2012-10-31), pages 84 - 85 *
黎满贵: "PKI系统支持SM2椭圆曲线公钥密码算法的研究", 《信息安全与通信保密》, 30 September 2011 (2011-09-30), pages 80 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105281890A (zh) * 2014-07-22 2016-01-27 华中科技大学 一种折叠结构的sm3杂凑密码压缩运算电路
CN105281890B (zh) * 2014-07-22 2018-04-03 华中科技大学 一种折叠结构的sm3杂凑密码压缩运算电路
CN106452771A (zh) * 2016-10-10 2017-02-22 山东渔翁信息技术股份有限公司 Jce调用密码卡实现内置rsa密钥运算的方法及装置
CN106452771B (zh) * 2016-10-10 2018-09-18 山东渔翁信息技术股份有限公司 Jce调用密码卡实现内置rsa密钥运算的方法及装置
CN106789037A (zh) * 2017-01-24 2017-05-31 山东渔翁信息技术股份有限公司 一种pkcs#11接口调用密码设备的签名方法及装置
CN107818265A (zh) * 2017-10-23 2018-03-20 中国银行股份有限公司 加密方法、装置和系统
CN107818265B (zh) * 2017-10-23 2020-04-24 中国银行股份有限公司 加密方法、装置和系统
CN108199841A (zh) * 2018-02-08 2018-06-22 山东渔翁信息技术股份有限公司 一种基于jce框架实现的sm2密钥运算方法和装置

Also Published As

Publication number Publication date
CN103425939B (zh) 2016-08-10

Similar Documents

Publication Publication Date Title
CN103138938B (zh) 基于csp的sm2证书申请及应用方法
CN1985466B (zh) 使用分发cd按签署组向设备传递直接证据私钥的方法
CN101720071B (zh) 基于安全sim卡的短消息两阶段加密传输和安全存储方法
Zhao et al. Privacy protection scheme based on remote anonymous attestation for trusted smart meters
GB2555961A (en) System of enclaves
CN101771699A (zh) 一种提高SaaS应用安全性的方法及系统
CN104580208A (zh) 一种身份认证方法及装置
CN103425939B (zh) 一种sm3算法在java环境中的实现方法及系统
CN107425971B (zh) 无证书的数据加/解密方法和装置、终端
CN103701829B (zh) 一种离线解析dpapi加密数据的方法
CN102055770B (zh) 一种基于xml描述的安全协议代码自动实现系统
CN103902915B (zh) 一种可信工控终端及其构建方法
WO2020073712A1 (zh) 一种移动终端中共享安全应用的方法及移动终端
CN101627390A (zh) 用于程序状态数据在电子设备中的安全存储的方法
CN106452771B (zh) Jce调用密码卡实现内置rsa密钥运算的方法及装置
CN111274611A (zh) 数据脱敏方法、装置及计算机可读存储介质
CN109478214A (zh) 用于证书注册的装置和方法
JP2023545895A (ja) 信頼できる実行環境マルチノード認証方法
CN107634946A (zh) 一种微服务节点合法性验证方法和装置
CN102088349A (zh) 一种智能卡个人化的方法及系统
CN111371562A (zh) 超级账本Fabric-SDK国密算法扩展改造方法
WO2023184858A1 (zh) 一种时间戳生成方法、装置、电子设备及存储介质
Abreu et al. Identity and access management for IoT in smart grid
CN104200137A (zh) 一种保护java程序自身安全的方法
Hayati et al. A novel secure root key updating scheme for LoRaWANs based on CTR_AES DRBG 128

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CP03 Change of name, title or address

Address after: No. 333, Yunhua Road, Chengdu hi tech Zone, China (Sichuan) pilot Free Trade Zone, Chengdu, Sichuan 610041

Patentee after: China Electronics Technology Network Security Technology Co.,Ltd.

Address before: No. 333, Yunhua Road, high tech Zone, Chengdu, Sichuan 610041

Patentee before: CHENGDU WESTONE INFORMATION INDUSTRY Inc.

CP03 Change of name, title or address