密码学SM2,SM3,SM4加密标准 下载本文

内容发布更新时间 : 2024/5/23 20:51:37星期一 下面是文章的全部内容请认真阅读。

课外实践五 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数字签名。