国密SM2算法

1 前言

比原链的智能合约支持国密算法的函数。SM2是国密标准的椭圆曲线加密算法,遵循以下SM2国家标准:

  • GB/T 32918.1-2016
  • GB/T 32918.2-2016
  • GB/T 32918.3-2016
  • GB/T 32918.4-2016
  • GB/T 32918.5-2017
  • GB/T 35275-2017
  • GB/T 35276-2017

椭圆曲线算法那公钥密码所基于的曲线性质:椭圆曲线多倍点运算构成一个单向函数。在多倍点运算中,已知多倍点与基点,求解倍数的问题称为椭圆曲线离散对数问题。对于一般椭圆曲线的离散对数问题,目前只存在指数级计算复杂度的求解方法。与大数分解问题及有限域上离散对数问题相比,椭圆曲线离散对数问题的求解难度要大得多。因此,在相同安全程度要求下,椭圆曲线密码较其他公钥密码所需的秘钥规模要小得多。

数字签名算法由一个签名者对数据产生数字签名,并由一个验证者验证签名的可靠性。每个签名者都有一个公钥和一个私钥,其中私钥用于产生签名,验证者用签名者的公钥验证签名。在签名的生成过程之前,要用密码杂凑算法对 Z A Z_A ZA 和待签消息 M M M 进行压缩;在验证过程之前,要用密码杂凑算法对 Z A Z_A ZA 和待签消息 M M M 进行同样的压缩。

2 基础参数

SM2的曲线方程为 y 2 = x 3 + a x + b \displaystyle y^2 = x^3 + ax + b y2=x3+ax+b ,其中:

  • a a a0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC
  • b b b0x28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93
  • p p p0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF

私钥长度:32字节。

公钥长度:SM2非压缩公钥格式字节串长度为65字节,压缩格式长度为33字节,若公钥y坐标最后一位为0,则首字节为0x02,否则为0x03。非压缩格式公钥首字节为0x04

签名长度:64字节。

3 密钥对生成

SM2密钥生成是指生成SM2算法的密钥对的过程,该密钥对包括私钥和与之对应的公钥。

  • 输入:无
  • 输出:
    • k:SM2PrivateKey,SM2私钥
    • Q:SM2PublicKey,SM2公钥
  1. 用随机数发生器产生整数 d ∈ [ 1 , n − 2 ] \displaystyle d\in[1,n-2] d[1,n2]
  2. G G G 为基点,计算点 P = ( x P , y P ) = [ d ] G \displaystyle P=(x_P,y_P)=[d]G P=(xP,yP)=[d]G

则私钥是 d d d,公钥为 P P P

4 签名算法

4.1 预处理1

预处理1是指使用签名方的用户身份标识和签名方公钥,通过运算得到Z值的过程。Z值用于预处理2。

  • 输入:
    • ID:字符串,用户身份标识
    • Q:SM2PublicKey,用户的公钥
  • 输出:
    • Z:字节串,预处理1的输出
  • 计算公式: Z = S M 3 ( E N T L ∣ ∣ I D ∣ ∣ a ∣ ∣ b ∣ ∣ x G ∣ ∣ y G ∣ ∣ x A ∣ ∣ y A ) Z=SM3(ENTL||ID||a||b||x_G||y_G||x_A||y_A) Z=SM3(ENTLIDabxGyGxAyA)
  • 参数说明:
    • E N T L ENTL E
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值