实现OPENSSL支持SM2算法的方法.pdf

上传人:000****221 文档编号:24348 上传时间:2018-01-12 格式:PDF 页数:11 大小:661.26KB
返回 下载 相关 举报
摘要
申请专利号:

CN201410153072.X

申请日:

2014.04.16

公开号:

CN104852803A

公开日:

2015.08.19

当前法律状态:

实审

有效性:

审中

法律详情:

实质审查的生效IPC(主分类):H04L 9/32申请日:20140416|||公开

IPC分类号:

H04L9/32

主分类号:

H04L9/32

申请人:

航天信息股份有限公司

发明人:

华刚; 邵波

地址:

100195北京市海淀区杏石口路甲18号航天信息园

优先权:

2014100511539 2014.02.14 CN

专利代理机构:

北京工信联合知识产权代理事务所(普通合伙)11266

代理人:

黄晓军

PDF下载: PDF下载
内容摘要

本发明提供了一种实现OpenSSL支持SM2算法的方法。该方法主要包括:在OpenSSL的代码文件中增加重命名的摘要算法的算法描述;在OpenSSL的代码文件中增加SM2算法的曲线参数描述及其参数;在OpenSSL的引擎机制中增加支持重命名的摘要算法的第一新引擎;在OpenSSL的引擎机制中增加对SM2算法进行支持的第二新引擎;第一新引擎在被OpenSSL所调用时,根据重命名的摘要算法的算法描述通过调用OpenSSL本身的摘要算法来实现重命名的摘要算法;第二新引擎在被OpenSSL所调用时,根据SM2算法的曲线参数描述及其参数来实现SM2算法。本发明提供的实现OpenSSL支持SM2算法的方法,可以使SM2算法更为容易地和OpenSSL原有的上下层功能结合在一起,从而实现将SM2算法有效、方便地嵌入到OpenSSL框架中。

权利要求书

1.  一种实现OpenSSL支持SM2算法的方法,其特征在于,包括:
在OpenSSL的代码文件中增加重命名的摘要算法的算法描述;
在OpenSSL的代码文件中增加SM2算法的曲线参数描述及其参数;
在OpenSSL的引擎机制中增加支持重命名的摘要算法的第一新引擎;
在OpenSSL的引擎机制中增加对SM2算法进行支持的第二新引擎;
所述第一新引擎在被OpenSSL所调用时,获取所述重命名的摘要算法的算法描述,根据所述重命名的摘要算法的算法描述通过调用OpenSSL本身的摘要算法来实现重命名的摘要算法;
所述第二新引擎在被OpenSSL所调用时,获取所述SM2算法的曲线参数描述及其参数,根据所述SM2算法的曲线参数描述及其参数来实现SM2算法。

2.
  根据权利要求1所述的实现OpenSSL支持SM2算法的方法,其特征在于,所述的方法还包括:
在OpenSSL的代码文件中增加“SM2算法-重命名摘要算法”的混合算法的算法描述及其分解成重命名的摘要算法和ECC算法的描述。

3.
  根据权利要求2所述的实现OpenSSL支持SM2算法的方法,其特征在于,所述的方法还包括:
修改OpenSSL的obj_dat.h和obj_mac.h文件,在obj_dat.h和obj_mac.h文件中增加“EH_SM2_WITH_摘要算法名”来表示“SM2签名-摘要”混合运算的算法描述;
修改OpenSSL的obj_xref.h文件,在obj_xref.h文件中增加“SM2签名-摘要”混合运算为ECC算法和重命名摘要算法组成的表示。

4.
  根据权利要求1所述的实现OpenSSL支持SM2算法的方法,其特征在 于,所述的在OpenSSL的代码文件中增加重命名的摘要算法的算法描述,包括:
修改OpenSSL的obj_dat.h和obj_mac.h文件,在所述obj_dat.h和obj_mac.h文件增加重命名的摘要算法的算法描述。

5.
  根据权利要求1所述的实现OpenSSL支持SM2算法的方法,其特征在于,所述的在OpenSSL的代码文件中增加SM2算法的曲线参数描述及其参数,包括:
修改OpenSSL的obj_dat.h和obj_mac.h文件,在所述obj_dat.h和obj_mac.h文件中增加EH_SM2相关的定义,用EH_SM2来表示SM2的曲线参数描述,
修改OpenSSL的ec_curve.c文件,在ec_curve.c文件中增加SM2曲线参数的值。

6.
  根据权利要求1所述的实现OpenSSL支持SM2算法的方法,其特征在于,所述的第一新引擎在被OpenSSL所调用时,获取所述重命名的摘要算法的算法描述,根据所述重命名的摘要算法的算法描述通过调用OpenSSL本身的摘要算法来实现重命名的摘要算法,包括:
所述第一新引擎在被OpenSSL所调用时,获取所述重命名的摘要算法的算法描述,利用OpenSSL的Engine机制,在init()和update()和final()的接口实现中,分别调用OpenSSL本身的内部摘要算法来实现。

7.
  根据权利要求1所述的实现OpenSSL支持SM2算法的方法,其特征在于,所述的第二新引擎在被OpenSSL所调用时,获取所述SM2算法的曲线参数描述及其参数,根据所述SM2算法的曲线参数描述及其参数来实现SM2算法,包括:
所述第二新引擎在被OpenSSL所调用时,获取所述调用者传来的参数,判断该参数如果是新增加的SM2算法的曲线参数描述,则根据所述曲线参数描述来实现SM2算法,否则调用OpenSSL本身的ECC的算法实现的API来实 现。

8.
  根据权利要求1所述的实现OpenSSL支持SM2算法的方法,其特征在于,所述的方法还包括:
修改OpenSSL的命令代码,将所述第一新引擎、第二新引擎的启动置于OpenSSL的中所有其他API调用之前。

9.
  根据权利要求1所述的实现OpenSSL支持SM2算法的方法,其特征在于,所述的方法还包括:
在OpenSSL的命令或者API调用时,确定非对称算法为SM2算法,摘要算法为重命名的摘要算法。

说明书

实现OpenSSL支持SM2算法的方法
技术领域
本发明涉及计算机应用技术领域,尤其涉及一种实现OpenSSL支持SM2算法的方法。
背景技术
OpenSSL是套开放源代码的SSL(Secure Sockets Layer,安全套接层)套件,其不仅提供了基本的传输层加密功能,还提供了多种算法支持,多种编码支持。此外,OpenSSL实现了ASN.1的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及CRL(Certificate Revocation List,证书撤消列表)等数据对象的DER(Distinguished Encoding Rules,唯一编码规则)、PEM(Privacy Enhanced Mail,强隐私邮件)和BASE64的编解码功能。OpenSSL提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12和PKCS#8的编解码功能。OpenSSL在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。在此基础上,OpenSSL实现了对证书的X.509标准编解码、PKCS#12格式的编解码以及PKCS#7的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。事实上,OpenSSL提供的CA应用程序就是一个小型的CA(认证中心,certificate authority),实现了证书签发的整个流程和证书管理的大部分机制。
非对称密钥算法是指一个加密算法的加密密钥和解密密钥是不一样的,或者说不能由其中一个密钥推导出另一个密钥。非对称密钥也叫公开密钥加 密,它是用两个数学相关的密钥对信息进行编码。在此系统中,其中一个密钥叫公开密钥,可随意发给期望同密钥持有者进行安全通信的人。公开密钥用于对信息加密。第二个密钥是私有密钥,属于密钥持有者,此人要仔细保存私有密钥。密钥持有者用私有密钥对收到的信息进行解密。ECC(EllipticCurves Cryptography,椭圆曲线密码)加密算法是一种公钥加密算法,与RSA算法相比,ECC算法可以使用较短的密钥达到相同的安全程度。
SM2算法是中国自己提出的一种ECC领域下的非对称算法,在很多方面都有其应用的需求。SM2作为一个算法,在应用中一般是和数字证书等结合起来应用,所以一般的应用方式是:将SM2和现有的证书函数库、通讯函数库结合起来使用,这样可以避免大量的编解码等方面的开发工作。
ENGINE是OPENSSL预留的用以加载第三方加密库引擎,主要包括了动态库加载的代码和加密函数指针管理的一系列接口。如果要使用Engine,那么首先要加载该Engine,然后选择要使用的算法。这样你的应用程序在调用加解密算法时,它就会指向你加载的动态库里的加解密算法,而不是原先的OPENSSL的库里的加解密算法。
Engine技术的ECC算法实现外在替换机制,支持替换OpenSSL中的ECC算法为外部实现的算法代码,SM2本身是属于ECC范畴的算法,所以它的算法描述符采用和ECC一样的“签名”算法描述,只是附加额外的曲线参数来区别SM2和其他的ECC算法实现,但是由于SM2的“签名-摘要”复合运算采用独立的算法描述,其分解成“签名”和“摘要”后,“签名”算法描述中没有曲线参数,因此和原有的ECC算法冲突,不能直接在ECC的Engine技术上实现SM2算法的嵌入。
目前,现有技术中的一种在OpenSSL中嵌入SM2算法的方法是:直接修改OpenSSL本身的代码和流程来实现。该方法的缺点是:由于要深入OpenSSL本身的架构,十分繁琐;
现有技术中的另一种在OpenSSL中嵌入SM2算法的方法是:通过PMETH和AMETH的Engine的方式来实现。该方法的缺点是:在PMETH和AMETH的实现时,除了要实现算法本身外,还需要实现密钥编解码,签名、加密结果编解码等,也比较繁琐。
发明内容
本发明的实施例提供了一种实现OpenSSL支持SM2算法的方法,以实现将SM2算法有效、方便地地嵌入到OpenSSL框架中。
本发明提供了如下方案:
一种实现OpenSSL支持SM2算法的方法,包括:
在OpenSSL的代码文件中增加重命名的摘要算法的算法描述;
在OpenSSL的代码文件中增加SM2算法的曲线参数描述及其参数;
在OpenSSL的引擎机制中增加支持重命名的摘要算法的第一新引擎;
在OpenSSL的引擎机制中增加对SM2算法进行支持的第二新引擎;
所述第一新引擎在被OpenSSL所调用时,获取所述重命名的摘要算法的算法描述,根据所述重命名的摘要算法的算法描述通过调用OpenSSL本身的摘要算法来实现重命名的摘要算法;
所述第二新引擎在被OpenSSL所调用时,获取所述SM2算法的曲线参数描述及其参数,根据所述SM2算法的曲线参数描述及其参数来实现SM2算法。
在OpenSSL的代码文件中增加“SM2算法-重命名摘要算法”的混合算法的算法描述及其分解成重命名的摘要算法和ECC算法的描述。
修改OpenSSL的obj_dat.h和obj_mac.h文件,在obj_dat.h和obj_mac.h文件中增加“EH_SM2_WITH_摘要算法名”来表示“SM2签名-摘要”混合运算的算法描述;
修改OpenSSL的obj_xref.h文件,在obj_xref.h文件中增加“SM2签名-摘 要”混合运算为ECC算法和重命名摘要算法组成的表示。
所述的在OpenSSL的代码文件中增加重命名的摘要算法的算法描述,包括:
修改OpenSSL的obj_dat.h和obj_mac.h文件,在所述obj_dat.h和obj_mac.h文件增加重命名的摘要算法的算法描述。
所述的在OpenSSL的代码文件中增加SM2算法的曲线参数描述及其参数,包括:
修改OpenSSL的obj_dat.h和obj_mac.h文件,在所述obj_dat.h和obj_mac.h文件中增加EH_SM2相关的定义,用EH_SM2来表示SM2的曲线参数描述,
修改OpenSSL的ec_curve.c文件,在ec_curve.c文件中增加SM2曲线参数的值。
所述的第一新引擎在被OpenSSL所调用时,获取所述重命名的摘要算法的算法描述,根据所述重命名的摘要算法的算法描述通过调用OpenSSL本身的摘要算法来实现重命名的摘要算法,包括:
所述第一新引擎在被OpenSSL所调用时,获取所述重命名的摘要算法的算法描述,利用OpenSSL的Engine机制,在init()和update()和final()的接口实现中,分别调用OpenSSL本身的内部摘要算法来实现。
所述的第二新引擎在被OpenSSL所调用时,获取所述SM2算法的曲线参数描述及其参数,根据所述SM2算法的曲线参数描述及其参数来实现SM2算法,包括:
所述第二新引擎在被OpenSSL所调用时,获取所述调用者传来的参数,判断该参数如果是新增加的SM2算法的曲线参数描述,则根据所述曲线参数描述来实现SM2算法,否则调用OpenSSL本身的ECC的算法实现的API来实现。
所述的方法还包括:
修改OpenSSL的命令代码,将所述第一新引擎、第二新引擎的启动置于OpenSSL的中所有其他API调用之前。
所述的方法还包括:
在OpenSSL的命令或者API调用时,确定非对称算法为SM2算法,摘要算法为重命名的摘要算法。
由上述本发明的实施例提供的技术方案可以看出,本发明实施例提供的实现OpenSSL支持SM2算法的方法,可以使SM2算法更为容易地和OpenSSL原有的上下层功能结合在一起,和原有的其他算法在使用上并不相冲突,从而实现将SM2算法有效、方便地嵌入到OpenSSL框架中。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的一种实现OpenSSL支持SM2算法的方法的处理流程图。
具体实施方式
为便于对本发明实施例的理解,下面将结合附图以几个具体实施例为例做进一步的解释说明,且各个实施例并不构成对本发明实施例的限定。
实施例一
本发明实施例用Engine技术的ECC算法实现外在替换机制来实现SM2算法实现,以和其他算法和平共处的方式,将SM2算法嵌入到OpenSSL框架中。
该实施例提供了一种实现OpenSSL支持SM2算法的方法的处理流程如图1所示,包括如下的处理步骤:
步骤S110、在OpenSSL的代码文件中增加重命名的摘要算法的算法描述。修改OpenSSL的obj_dat.h和obj_mac.h文件,在obj_dat.h和obj_mac.h文件中增加重命名的摘要算法的算法描述,比如用EH_MD5来表示重命名的MD5摘要算法的算法描述。
步骤S120、在OpenSSL的代码文件中增加SM2算法的曲线参数描述及其参数。修改OpenSSL的obj_dat.h和obj_mac.h文件,在obj_dat.h和obj_mac.h文件中增加EH_SM2相关的定义,用EH_SM2来表示SM2的曲线参数描述,修改OpenSSL的ec_curve.c文件,增加seed、p、a、b、x、y、order这几个SM2曲线参数的值。
步骤S130、在OpenSSL的代码文件中增加“SM2算法-摘要算法”的混合算法的算法描述及其分解成重命名的摘要算法和ECC算法的描述。修改OpenSSL的obj_dat.h和obj_mac.h文件,在obj_dat.h和obj_mac.h文件中增加“EH_SM2_WITH_摘要算法名”来表示“SM2签名-摘要”混合运算的算法描述,比如用EH_SM2_WITH_MD5来表示“SM2签名-MD5摘要”混合运算的算法描述。修改OpenSSL的obj_xref.h文件,在OpenSSL的obj_xref.h文件中增加“SM2签名-摘要”混合运算为ECC算法和重命名摘要算法组成的表示,比如,EH_SM2_WITH_MD5应该是由NID_X9_62_id_ecPublicKey和EH_MD5组成的。
步骤S140、在OpenSSL的引擎机制中增加支持重命名的摘要算法的第一新引擎。该第一新引擎在被OpenSSL调用时,并不自己实现摘要算法,而是获取所述重命名的摘要算法的算法描述,根据所述重命名的摘要算法的算法描述通过调用OpenSSL本身的摘要算法来实现重命名的摘要算法。
比如,利用OpenSSL的Engine机制,需要在init()和update()和final ()的接口实现中,调用对应的OpenSSL内部摘要算法实现流程。比如,对于EH_MD5的实现,就是在init()和update()和final()接口实现中,分别调用OpenSSL本身的MD5算法实现中的init()和update()和final()的API来实现。
步骤S150、在OpenSSL的引擎机制中基于ECC算法引擎机制增加对SM2算法进行支持的第二新引擎。所述第二新引擎在被OpenSSL所调用时,获取所述调用者传来的参数,判断该参数如果是新增加的SM2算法的曲线参数描述及其参数,则根据所述曲线参数描述及其参数来实现SM2算法,否则调用OpenSSL本身的ECC的算法实现的API来实现。
所述第二新引擎在执行OpenSSL的ECC算法中的ecdh_compute_key()、ecdsa_do_sign()、ecdsa_sign_setup()和ecdsa_do_verify()四个API,根据传入的参数eckey获得曲线参数描述,根据所述曲线参数描述判断是否是SM2算法,如果是,根据所述曲线参数描述来实现SM2算法;否则,则调用OpenSSL中的原有的ECC算法的处理流程来处理。
步骤S160、在OpenSSL的命令代码文件中,将上述第一新引擎、第二新引擎导入置于所有其他API调用之前。修改OpenSSL的命令代码,将所述第一新引擎、第二新引擎的启动置于OpenSSL的中所有其他API调用之前。
步骤S170、在OpenSSL的命令或者API调用时,确定非对称算法为SM2算法,摘要算法为重命名的摘要算法。在OpenSSL的命令行执行或者API调用时,指明用EH_SM2算法和EH_重命名摘要算法,比如EH_MD5。
实施例二
以OpenSSL-1.0.1e里增加SM2算法,以及“SM2-SHA1”混合运算算法支持实现为例,本发明实施例的处理过程如下:
1)修改OpenSSL的obj_dat.h和obj_mac.h文件,增加EH_SM2、 EH_SHA1和EH_SM2_WITH_SHA1相关的定义等

2)修改obj_xref.h文件,用重新定义的EH_SHA1,和原有的ECC的算法描述一起,来增加对“SM2签名-SHA1摘要”混合算法分解指引的支持。

3)在Engine的ECC机制中,需要支持的ecdh_compute_key()和ecdsa_do_sign()和ecdsa_sign_setup()和ecdsa_do_verify()这四个需要实现的API中,根据传入的参数eckey获得curve_name,根据curve_name判断其是否是需要SM2的支持,如果是则按照SM2的算法处理, 如果不是,则调用OpenSSL原有的ECC的处理流程来处理。

4)在Engine的摘要机制中,提供重定义的摘要算法EH_SHA1的支持,通过调用OpenSSL原有的摘要算法流程来实现。

5)修改OpenSSL的命令代码,将Engine的启动置于所有其他API调用之前,以x.509.c为例,把

从501行往前移动到398行,置于所有其他API调用之前
6)编译OpenSSL库,编译Engine库
7)运行OpenSSL命令时,指明用EH_SM2和EH_SHA1

就可以产生一个基于SM2算法的自签名数字证书Sm2Sha1CA.pem文件,及其私钥文件Sm2Sha1CA.kp.key。
综上所述,本发明实施例提供的实现OpenSSL支持SM2算法的方法,可以使SM2算法更为容易地和OpenSSL原有的上下层功能结合在一起,和原有的其他算法在使用上并不相冲突,且能相互帮助,从而实现将SM2算法有效、方便地嵌入到OpenSSL框架中。
本发明实施例提供的实现OpenSSL支持SM2算法的方法,避免了大量修改OpenSSL本身核心代码,避免了AMETH和PMETH的Engine实现方法中对编解码的实现,由于大量实现均是建立在OpenSSL成熟的原函数库基础上,所以更为稳定,由于只做了最少量的修改,本发明实施例的方法实现起来更为快捷、方便。
本发明实施例的方法也适用于ECC算法族这个范畴下的其他非对称算法的嵌入和应用需要。
本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、 磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

实现OPENSSL支持SM2算法的方法.pdf_第1页
第1页 / 共11页
实现OPENSSL支持SM2算法的方法.pdf_第2页
第2页 / 共11页
实现OPENSSL支持SM2算法的方法.pdf_第3页
第3页 / 共11页
点击查看更多>>
资源描述

《实现OPENSSL支持SM2算法的方法.pdf》由会员分享,可在线阅读,更多相关《实现OPENSSL支持SM2算法的方法.pdf(11页珍藏版)》请在专利查询网上搜索。

本发明提供了一种实现OpenSSL支持SM2算法的方法。该方法主要包括:在OpenSSL的代码文件中增加重命名的摘要算法的算法描述;在OpenSSL的代码文件中增加SM2算法的曲线参数描述及其参数;在OpenSSL的引擎机制中增加支持重命名的摘要算法的第一新引擎;在OpenSSL的引擎机制中增加对SM2算法进行支持的第二新引擎;第一新引擎在被OpenSSL所调用时,根据重命名的摘要算法的算法描述通。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 电学 > 电通信技术


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1