课外实践 SM2、SM3及SM4加密标准
一、概述
1.SM2椭圆曲线公钥密码算法加密标准
SM2算法就是ECC椭圆曲线密码机制,但在签名、密钥交换方面不同于ECDSA、ECDH等国际标准,而是采取了更为安全的机制.SM2-1椭圆曲线数字签名算法,SM2-2椭圆曲线密钥交换协议,SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能。SM2算法与RSA算法不同的是,SM2算法是基于椭圆曲线上点离散对数难题,相对于RSA算法,256位的SM2密码强度已经比2048位的RSA密码强度要高。
椭圆曲线算法公钥密码所基于的曲线性质:椭圆曲线多倍点运算构成一个单向函数.在多倍点运算中,已知多倍点与基点,求解倍数的问题称为椭圆曲线离散对数问题。对于一般椭圆曲线的离散对数问题,目前只存在指数级计算复杂度的求解方法。与大数分解问题及有限域上离散对数问题相比,椭圆曲线离散对数问题的求解难度要大得多。因此,在相同安全程度要求下,椭圆曲线密码较其他公钥密码所需的秘钥规模要小得多。
2.SM3哈希算法加密标准
SM3是一种密码散列函数标准.密码散列函数是散列函数的一种。它被认为是一种单向函数,也就是说极其难以由散列函数输出的结果,回推输入的数据是什么。这种散列函数的输入数据,通常被称为消息,而它的输出结果,经常被称为消息摘要。
SM3适用于商用密码应用中的数字签名和验证消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。为了保证杂凑算法的安全性,其产生的杂凑值的长度不应太短,例如MD5输出128比特杂凑值,输出长度太短,影响其安全性SHA-1算法的输出长度为160比特,SM3算法的输出长度为256比特,因此SM3算法的安全性要高于MD5算法和SHA—1算法。
一个理想的密码散列函数应该有这些特性:对于任何一个给定的消息,它都很容易就能运算出散列数值;难以由一个已知的散列数值,去推算出原始的消息;在不更动散列数值的前提下,修改消息内容是不可行的;对于两个不同的消息,它不能给与相同的散列数值。
3.SM4分组密码算法加密标准
SM4算法是一个分组对称密钥算法,明文、密钥、密文都是16字节,加密和解密密钥相同。加密算法与密钥扩展算法都采用32轮非线性迭代结构。解密过程与加密过程的结构相似,只是轮密钥的使用顺序相反。
SM4用于实现数据的加密/解密运算,以保证数据和信息的机密性。要保证一个对称密码算法的安全性的基本条件是其具备足够的密钥长度,SM4算法与AES算法具有相同的密钥长度分组长度128比特,因此在安全性上高于3DES算法。
二、SM2加密标准
1.SM2基本原理
1)基础参数
SM2的曲线方程为y2 = x3 + ax + b,其中:
a: 0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC
b: 0x28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93
c: 0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF
私钥长度:32字节
公钥长度:SM2非压缩公钥格式字节串长度为65字节,压缩格式长度为33字节,若公钥y坐标最后一位为0,则首字节为0x02,否则为0x03。非压缩格式公钥首字节为0x04。
签名长度:64字节
2)密钥对生成
密码字符串是什么
SM2密钥生成是指生成SM2算法的密钥对的过程,该密钥对包括私钥和与之对应的公钥。
输入:一个有效的Fq(q=p且p为大于3的素数,或q=2m上椭圆曲线系统参数的集合.
输出:与椭圆曲线系统参数相关的一个密钥对(d, P)
k: SM2PrivateKey,SM2私钥
      Q: SM2PublicKey,SM2公钥
    用随机数发生器产生整数 d[1, n—2];
    G为基点,计算点P=(xP, yP)=[d]G
    密钥对是(d, P),其中d为私钥,P为公钥
3)签名算法
a)预处理1
预处理1指使用签名方的用户身份标识和签名方公钥,通过运算得到Z值的过程,Z值用于预处理2。
输入:ID 字符串,用户身份标识;Q SM2PublicKey,用户的公钥.
输出:Z 字节串,预处理1的输出。
计算公式:Z=SM3(ENTL||ID||a||b||xG||yG||xA||yA
参数说明:
ENTL: 由两个字节标识的ID的比特长度;
ID: 用户身份标识,一般情况下,其长度为16字节,默认值从左至右依次是:0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38。
a, b: 为系统曲线参数;
xG, yG为基点;xA, yA为用户的公钥。
b)预处理2
预处理2是指使用Z值和待签名消息,通过SM3运算得到杂凑值H的过程。杂凑值H用户SM2数字签名。
输入:Z 字节串;M 字节串,待签名消息
输出:H 字节串,杂凑值
计算公式:H=SM3(Z||M)
c)生成签名
SM2签名是指使用预处理2的结果和签名者的私钥,通过签名计算得到签名结果的过程。
输入:d: SM2PrivateKey,签名者私钥;H 字节串,预处理2的结果
输出:sign: SM2Signature,签名值
设待签名的消息为M,为了获取消息M的数字签名(r,s)(r,s)(r,s),作为签名者的用户A应实现以下运算步骤:
置M’=ZA||M;计算e=Hv(M'),将e的数据类型转化为整数;用随机数发生器产生随机数k∈[1, n—1];计算椭圆曲线点(x1, y1)=[k]G,将x1的数据类型转化为整数;计算r=(e+x1)mod n,若r=0或r+k=n则返回第3步;计算s=((1+dA)-1*(k—r*dA))mod n,若s=0则返回第3步;将r, s转化为字节串。消息M的签名为(r, s).
d)签名验证
输入:H:字节串,预处理2的结果;sign:SM2Signature,签名值;Q:PublicKey,签名者的公钥
输出:为真表示验证通过,为假表示验证不通过。
为了检验收到的消息 M及其数字签名(r, s),作为验证者的用户B应实现以下运算步骤:
A.检验r[1,n-1],是否成立,若不成立则验证不通过;
B.检验s[1,n-1],是否成立,若不成立则验证不通过;
C.M'=ZA||M
D.计算e=Hv(M'),将e的数据类型转化为整数;
E.r,s的数据类型转化为整数,计算t=(r+s)mod n,若t=0,则验证不通过;
F.计算椭圆曲线点(x1, y1)=[s]G+[t]PA
G.将x1的数据类型转化为整数,计算R=(e+x1)mod n,检验R=r是否成立,若成立则验证通过;否则验证不通过.
2.SM2的应用
SM2在固件安全中的应用:
固件控制着整个存储系统的正常运行,倘若非法人员可以随意导入固件、修改固件,那么数据也将完全暴露,因此保护数据存储安全的首要一点就是要确保固件在导入、保存和执行过程中的安全。
在固件导入过程中使用SM2算法进行验签,其中用到的公钥保存在主控芯片内部,私钥由受信用的固件厂商保存。对于要导入的固件,需要使用私钥对其进行签名,将签名和固件一起导入到盘片,带有签名的固件下载到缓存RAM后,再用公钥进行SM2验签。只有使用合法私钥签名的固件才能通过验签,成功导入,没有签名或者使用非法私钥签名的固件无法通过验签而被丢弃。如此,拥有合法私钥的用户才拥有固件的导入权限,从源头上确保了盘片内部固件的合法性.
3.对比SM2与同类型算法
RSA算法数学原理简单,在工程应用中比较易于实现,但它的单位安全强度相对较低。目前国际上公认的对于RSA算法最有效的攻击方法,即一般数域筛方法去破译和攻击RSA算法,它的破译或求解难度是亚指数级的。
SM2算法的数学理论非常深奥复杂,在工程应用中比较难于实现,但它的单位安全强度相对较高。用国际上公认的对于SM2算法最有效的攻击方法Pollard rho去破译攻击SM2算法,它的破译或求解难度基本上是指数级的.SM2算法的单位安全强度高于RSA算法。一般认为当SM2密码体制的密钥长度为160比特时,其安全性相当于RSA使用1024比特密钥长度,密钥短意味着更短的处理时间和密钥存储空间.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。