APP下载

基于国密算法的证书签名值验证的分析

2019-05-24华娇王娅男

电脑知识与技术 2019年4期
关键词:数字签名

华娇 王娅男

摘要:在国家已经大力推行性能更优更安全的SM2公钥密码算法的背景下,基于国密算法的证书也将越来越广泛地被采用,则证书的合法性需要验证,因此本文主要研究了如何验证SM2证书的签名值。通过研究SM2证书的结构,获取签名原文数据和签名数据,使用基于SM3摘要算法的SM2算法实现验证签名值。文中选取了示例证书进行验证,且验证结果通过。

关键词:国密算法;数字签名;根证书;椭圆曲线

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2019)04-0034-02

1 引言

随着计算机技术及密码技术的飞速发展,1024位RSA算法这一目前常用的算法已经面临严重的安全威胁,因此2010年12月17日国家密码管理部门经过研究,决定采用SM2椭圆曲线公钥密码算法来替换RSA算法。SM2算法相较于RSA算法来说,密码复杂度更高、处理速度更快、机器性能消耗更小,整体来说性能更优更安全。

目前来说,大多数情况下常使用的X509证书仍是基于RSA算法的,但既然国家已经在大力推行国密算法,未来的各种基于PBOC3.0的IC卡也都是支持国密算法的,那基于国密算法的证书也将越来越广泛地被采用,因此本文研究一下如何验证SM2国密证书的合法性。

2 SM2证书介绍

SM2证书与RSA等其他数字证书相同点有:均使用ASN.1编码;数据格式均使用通用的TLV(Tag Length Value)形式(T为类型标识符,L为长度值标识符,V代表实际数据。数字证书中的所有项都有对应的类型。完整的证书数据是一个TLV,而 V由多个TLV组合而成);均包含证书版本、序列号、颁发者、使用者主体信息、使用者公钥、有效期、证书扩展项等内容;均以二进制或Base64格式存放。

SM2证书与RSA证书不同的是SM2证书的公钥算法是使用ECC算法的Oid标识(1.2.840.10045.2.1),公钥参数使用SM2国密算法的Oid标识(1.2.156.10197.1.301)。

3 椭圆曲线算法原理

椭圆曲线是指在射影平面上满足齐次方程Weierstrass方程的所有点的集合,( Weierstrass方程即:Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z3),并且椭圆曲线上的每个点都是非奇异(或光滑)的,在数学中,非奇异或光滑的指曲线上任意一点的偏导数不能同时都为0。下图左为一个椭圆曲线的示例;而用于密码学中的椭圆曲线与一般椭圆曲线不同的是它是离散的点,是不连续的,因此它需要定义在只由有限个元素组成的有限域上。下图右为例。

椭圆加密算法是建立在椭圆曲线离散对数问题这一数学难题之上的密码体制。所谓椭圆曲线离散对数问题即在椭圆曲线上给定两个点K和G,若使K=kG,求整数k;这相对于给定椭圆曲线上的一个点G,并选取一个整数k,求解椭圆曲线上的另一个点K=kG来说是一个难题。在K=kG中,椭圆曲线上的点K为公钥(这个点在OpenSSL里面是用结构体EC_Point来表示),整数k(实际上是一个大整数)则为私钥。

利用椭圆曲线进行加密通信的过程如下图所示:

1)接收方选取椭圆曲线Ep(a,b)上的一点G作为基点并选择一个私有密钥k,生成公开密钥K=kG,将Ep(a,b)和点K,G一起传给发送方。

2)发送方收到椭圆曲线信息后将待传输的明文编码到曲线上的一点M,产生一个随机整数r,计算点C1=M+rK;C2=rG,并将C1、C2传给接收方。

3)接收方收到信息后计算M=C1-kC2,再解码M得到的就是明文。

如果有其他用户看到这个加密通信过程中,那么其他用户只能看到Ep(a,b)、K、G、C1、C2,而并不能得到明文信息,因为想要通过K、G 求k 或通过C2、G求r 都是相对困难的。

因此橢圆加密算法与一般非对称密钥体系的验签方法对比除了需要私钥与公钥以外,还需要私钥与公钥对应的椭圆曲线,因为签名和验签的过程中用到涉及椭圆曲线得多倍点的乘法。所以仅仅知道公钥和私钥是不能调用OpenSSL自带的签名和验签API来实现椭圆加密算法的签名验证的,还需要知道对应的椭圆曲线。

4 签名值验证

验证证书的合法性主要是解析证书、验证证书的有效期、验证颁发机构根证书、验证CRL吊销状态以及使用目的等。本文主要研究证书中签名数据的有效性验证。前面已经了解了SM2证书的结构,那么可以根据ASN.1语法和对象标识符来获取相应数据,证书的第一个数据块是证书的实际内容,即为签名数据原文;第二个数据块是证书使用的签名算法,SM2证书配套的签名算法是基于SM3摘要算法的SM2签名算法,算法Oid标识为1.2.156.10197.1.501;证书的最后一个数据块就是证书的签名数据,签名数据由两个BigInteger大数组成,再使用Der编码存放。一般来说,证书的签名数据都是其上级根证书私钥签名的,故需要使用上级根证书公钥进行验证,而顶级根证书的签名数据是自签名的,故需要使用自身的证书公钥进行验证。

本文选取了样例证书进行了验证,首先解析TLV结构获取证书的签名原文数据和签名值数据,其中签名值数据为封装的ECC签名数据块,需要解析后取出两个大整数,即曲线上点的X、Y坐标,如下图中选中的数据即为签名值数据:

验证签名第一步需要组建数据ZA并计算其HASH值A:

ZA=用户ID的长度+用户ID+椭圆曲线公钥密码算法推荐曲线参数a+椭圆曲线公钥密码算法推荐曲线参数b+椭圆曲线公钥密码算法推荐曲线参数Gx+椭圆曲线公钥密码算法推荐曲线参数Gy+公钥X+公钥Y;

HashA=SM3摘要算法(ZA);

第二步,上面的SM3结果加上证书实际内容数据M,再进行SM3计算得到HASH值B:

HashB=SM3摘要算法(HashA + M);

最后使用公钥验签。

其中,曲线参数使用的国密推荐256位曲线参数,具体值如下:

5 结论

按照上述验证方法验证了示例证书的签名值、上级根证书的签名值以及顶极根证书的自签名值,均验证通过。

正确的验证SM2证书的合法性有利于国密算法的推广使用,则在应用中的秘钥生成速度和加解密速度均能达到更优。

参考文献:

[1] DayThinking. ECC算法原理的认识.https://blog.csdn.net/sszgg2006/article/details/41945163,2014.

[2] jonllen. SM2国密算法证书解析.(1998-08-16).[1998-10-04].http://www.cajcd.edu.cn/pub/wml.txt/980810-2.html,

[3] 方娜. 基于椭圆曲线的电子签章系统的研究与应用[D]. 贵州大学, 2007.

【通联编辑:唐一东】

猜你喜欢

数字签名
基于正交拉丁方理论的数字签名分组批量验证
交通运输行业数字签名系统的设计与实现分析
浅析计算机安全防护中数字签名技术的应用
数字签名助力系统安全
基于数字签名的QR码水印认证系统
以数字签名为基础的档案文件安全性管理
数字签名简述
探讨网络安全中的数字签名技术应用效果
基于数字签名和HSM的数据库篡改检测机制
基于JAVA的数字签名设计与实现