同系列文章:
- 国家商用密码(一)SM2椭圆曲线公钥密码算法
- 国家商用密码(二)C#:基于BouncyCastle实现SM3密码杂凑算法
- 国家商用密码(三)C#:从HashAlgorithm类派生实现SM3密码杂凑算法
- 国家商用密码(四)开放动态库及演示程序
- 国家商用密码(五)基于SM2的软件授权码生成及校验
- 国家商用密码(六)椭圆曲线加密算法密钥生成器
- 国家商用密码(七)在Apache MINA上实现二进制流的SM4编解码器
- 国家商用密码(八)在Apache MINA上实现文本流的SM4编解码器
- 国家商用密码(九)在Apache MINA上实现二进制流数据报文的SM4编解码器
- 国家商用密码(十)在Apache MINA上实现文本流数据报文的SM4编解码器
- 国家商用密码(11)在Netty 5.0.X上实现文本流的SM4编解码器
- 国家商用密码(12)在Netty 4.1.12.Final上实现文本流的SM4编解码器
- 国家商用密码(13)在DotNetty 0.4.5上实现文本流的SM4编解码器
国家商用密码管理办公室于2010年12月17日发布了SM2椭圆曲线公钥密码算法,并要求对现有基于RSA算法的电子认证系统、密钥管理系统、应用系统进行升级改造。关于算法标准,请参见《国家密码管理局公告(第 21 号)》。
SM2算法和RSA算法有什么关系?
SM2算法和RSA算法都是公钥密码算法,SM2算法是一种更先进安全的算法,在我们国家商用密码体系中被用来替换RSA算法。
为什么要采用SM2算法替换RSA算法?
随着密码技术和计算技术的发展,目前常用的1024位RSA算法面临严重的安全威胁,我们国家密码管理部门经过研究,决定采用SM2椭圆曲线算法替换RSA算法。SM2算法在安全性、性能上都具有优势,参见表1算法攻破时间,表2算法性能。
RSA密钥强度 | 椭圆曲线密钥强度 | 攻破时间(年) |
512 | 106 | 104,已被攻破 |
768 | 132 | 108,已被攻破 |
1024 | 160 | 1011 |
2048 | 210 | 1020 |
表1 算法攻破时间
算法 | 签名速度(次/秒) | 验签速度(次/秒) |
1024位RSA | 2792 | 51224 |
2048位RSA | 455 | 15122 |
256位SM2 | 4095 | 871 |
表2 算法性能
SM2和椭圆曲线算法是什么关系?
一提起曲线,大家就会想到方程,椭圆曲线算法是通过方程确定的,SM2算法采用的椭圆曲线方程为:
y2 = x3 + ax + b
在SM2算法标准中,通过指定a、b系数,确定了唯一的标准曲线。同时,为了将曲线映射为加密算法,SM2标准中还确定了其它参数,供算法程序使用。
椭圆曲线算法是什么原理?
本文不探讨椭圆曲线的数学理论,仅通过图示展示算法原理。
加法运算运算法则:任意取椭圆曲线上两点P、Q (若P、Q两点重合,则做P点的切线)做直线交于椭圆曲线的另一点R’,过R’做y轴的平行线交于R。我们规定P+Q=R。(如图)
多倍点运算,请参见下图:
椭圆曲线方程:y2 = x3–x的曲线。
- P点为基点;
- 通过P点做切线,交与点 2P’点,在2P’点做竖线,交与2P点,2P点即为P点的2倍点;
- 进一步,P点和2P点之间做直线,交与3P’点,在3P’点做竖线,交与3P点,3P点即为P点的3倍点;
- 同理,可以计算出P点的4、5、6、… 倍点;
- 如果给定图上Q点是P的一个倍点,请问Q是P的几倍点呢?
- 直观上理解,正向计算一个倍点是容易的,反向计算一个点是P的几倍点则困难的多。
在椭圆曲线算法中,将倍数d做为私钥,将Q做为公钥。当然,椭圆曲线算法还有更严格的计算过程,相对图示要复杂的多。
SM2加密算法流程
SM2加密同样使用接收方公钥加密,公钥由一个曲线坐标点组成,在X.509证书中的公钥表示为04标记开始的2个32byte的BigInteger,即曲线点P(x,y)。SM2公钥加密算法比RSA相对复杂,加密结果由3个部分组成,SM2加密过程中使用了随机数,因此同样的明文数据每一次加密结果都不一样。SM2加密算法流程如下图所示。
根据国密推荐的SM2椭圆曲线公钥密码算法,首先产生随机数计算出曲线点C1,2个32byte的BigInteger大数,即为SM2加密结果的第1部分。第2部分则是真正的密文,是对明文的加密结果,长度和明文一样。第3部分是杂凑值,用来效验数据。按国密推荐的256位椭圆曲线,明文加密结果比原长度会大96byte。
SM2解密算法流程
SM2解密算法是加密逆运算。首先需要从密文中取出加密结果的3部分值,然后通过私钥计算出 M'明文值,最后效验数据。SM2解密算法流程如下图所示。
SM2解密同样也可以使用软算法实现。但因为涉及到私钥运算,为保护私钥安全,建议在硬件设备中运行,例如UKey等存储介质这样可以更好的保护密钥安全。拿文件加密来说,首先拿UKey里面的加密证书加密,这部分可在应用系统内完成。解密的话则需要加密证书对应UKey才能做解密,由应用系统调用UKey解密接口,在物理硬件内完成数据解密,同时可以受设备PIN码保护。
SM2算法可以进行哪些密码应用?
SM2算法做为公钥算法,可以完成签名、密钥交换以及加密应用。SM2算法标准确定了标准过程:
- 签名、验签计算过程
- 加密、解密计算过程
- 密钥协商计算过程
需要说明,其他国家的标准和SM2确定的计算过程存在差异,也就是说相互之间是不兼容的。
SM2算法速度快吗?
简单讲,SM2签名速度快,验签速度慢,这点和RSA算法的特性正好相反。参见表2。另外,加解密速度和验签速度相当。
SM2签名算法支持多大的数据量,签名结果为多少字节?
签名原始数据量长度无限制,签名结果为64字节。
SM2加密算法支持多大的数据量,加密结果增加多少字节?
支持近128G字节数据长度,加密结果增加96个字节。
SM2相关算法有哪些?
SM2为国家密码管理局公布的公钥算法,其加密强度为256位。其它几个重要的商用密码算法包括:
SM1,对称加密算法,加密强度为128位,采用硬件实现;
SM3,密码杂凑算法,杂凑值长度为32字节,和SM2算法同期公布,参见《国家密码管理局公告(第 22 号)》;
SM4,对称加密算法,随WAPI标准一起公布,可使用软件实现,加密强度为128位。
学习资料