CN103425939B - 一种sm3算法在java环境中的实现方法及*** - Google Patents
一种sm3算法在java环境中的实现方法及*** Download PDFInfo
- Publication number
- CN103425939B CN103425939B CN201310340792.2A CN201310340792A CN103425939B CN 103425939 B CN103425939 B CN 103425939B CN 201310340792 A CN201310340792 A CN 201310340792A CN 103425939 B CN103425939 B CN 103425939B
- Authority
- CN
- China
- Prior art keywords
- algorithm
- sha
- realizes
- java
- module
- 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.)
- Active
Links
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是码杂凑算法,是国家密码管理局编制的商用算法,用于密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。对长度为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算法,在加密框架JCA中,借用SHA-256的算法ID。
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算法;在加密框架JCA中,借用SHA-256的算法ID。
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 CN103425939A (zh) | 2013-12-04 |
CN103425939B true 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) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105281890B (zh) * | 2014-07-22 | 2018-04-03 | 华中科技大学 | 一种折叠结构的sm3杂凑密码压缩运算电路 |
CN106452771B (zh) * | 2016-10-10 | 2018-09-18 | 山东渔翁信息技术股份有限公司 | Jce调用密码卡实现内置rsa密钥运算的方法及装置 |
CN106789037B (zh) * | 2017-01-24 | 2018-09-25 | 山东渔翁信息技术股份有限公司 | 一种pkcs#11接口调用密码设备的签名方法及装置 |
CN107818265B (zh) * | 2017-10-23 | 2020-04-24 | 中国银行股份有限公司 | 加密方法、装置和*** |
CN108199841A (zh) * | 2018-02-08 | 2018-06-22 | 山东渔翁信息技术股份有限公司 | 一种基于jce框架实现的sm2密钥运算方法和装置 |
Family Cites Families (1)
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 |
-
2013
- 2013-08-07 CN CN201310340792.2A patent/CN103425939B/zh active Active
Non-Patent Citations (2)
Title |
---|
PKI***支持SM2椭圆曲线公钥密码算法的研究;黎满贵;《信息安全与通信保密》;20110930;第80页 * |
国家电子政务外网电子认证***SM2国密算法升级改造方案研究;王勇 等;《信息网络安全》;20121031;第84-85页 * |
Also Published As
Publication number | Publication date |
---|---|
CN103425939A (zh) | 2013-12-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103138938B (zh) | 基于csp的sm2证书申请及应用方法 | |
CA2869404C (en) | Public key encryption algorithms for hard lock file encryption | |
US10027481B2 (en) | Management of cryptographic keys | |
CN101720071B (zh) | 基于安全sim卡的短消息两阶段加密传输和安全存储方法 | |
GB2555961A (en) | System of enclaves | |
CN102255729B (zh) | 一种基于媒介数字证书的ibe数据加密*** | |
CN107425971B (zh) | 无证书的数据加/解密方法和装置、终端 | |
CN103425939B (zh) | 一种sm3算法在java环境中的实现方法及*** | |
Zhao et al. | Privacy protection scheme based on remote anonymous attestation for trusted smart meters | |
CN101771699A (zh) | 一种提高SaaS应用安全性的方法及*** | |
CN103701829B (zh) | 一种离线解析dpapi加密数据的方法 | |
JP2023545895A (ja) | 信頼できる実行環境マルチノード認証方法 | |
CN104580208A (zh) | 一种身份认证方法及装置 | |
CN103067160A (zh) | 一种加密sd卡的动态密钥生成的方法及*** | |
CN111274611A (zh) | 数据脱敏方法、装置及计算机可读存储介质 | |
WO2020073712A1 (zh) | 一种移动终端中共享安全应用的方法及移动终端 | |
CN106452771B (zh) | Jce调用密码卡实现内置rsa密钥运算的方法及装置 | |
CN101627390A (zh) | 用于程序状态数据在电子设备中的安全存储的方法 | |
CN107634946A (zh) | 一种微服务节点合法性验证方法和装置 | |
CN109478214A (zh) | 用于证书注册的装置和方法 | |
WO2023184858A1 (zh) | 一种时间戳生成方法、装置、电子设备及存储介质 | |
CN102842005A (zh) | 一种基于tsm的tspi接口的csp模块和csp实现方法 | |
CN105915345B (zh) | 一种家庭网关设备生产测试中授权生产和改制的实现方法 | |
CN102970134A (zh) | 将硬件密码设备的算法用于pkcs#7数据封装的方法及*** | |
CN112398655A (zh) | 一种文件传输方法、服务器及计算机存储介质 |
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 | ||
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. |