密评-SM2签名验签的验算过程

目录

1、可能得考点

2、签名预处理

ZA=SM3(ENTLA ‖ IDA ‖ a ‖ b ‖ xG ‖ yG ‖ xA ‖ yA)

e=SM3(ZA || M)

3、签名值RS

r=e+X1 mod n

s = (1 + dA)^(-1) * (k - r * dA) mod n  

K=(1+d)s+r*d mod n

dA=(k-s)(s+r)^(-1) mod n

签名攻击

4、验证过程

① ZA=SM3(ENTLA ‖ IDA ‖ a ‖ b ‖ xG ‖ yG ‖ xA ‖ yA)

② e=SM3(ZA || M)

③(x1,y1)=[k]G

④ r=e+X1 mod n

⑤s = (1 + dA)^(-1) * (k - r * dA) mod n 

⑥通过r、s、d求出随机数k

⑦通过r、s、k求出私钥d


1、可能得考点

涉及SM2签名的考点,可能有几个点,ZA、随机数K、私钥d,下面对这几个值进行一下验算

2、签名预处理

下面是签名的流程图,ZA也叫预处理1值,e也叫预处理2值,签名过程的哈希算法都是SM3,计算ZA、e值,有助于理解SM2签名验签

ZA=SM3(ENTLA ‖ IDA ‖ a ‖ b ‖ xG ‖ yG ‖ xA ‖ yA)

参数n

FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123

参数P

FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF

参数a

FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC

参数b

28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93

参数G

32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7

BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0

IDA一般默认是31323334353637383132333435363738

ENTLA指的是IDA的长度0080

xA , yA 为公钥值

e=SM3(ZA || M)

3、签名值RS

r=e+X1 mod n

s = (1 + dA)^(-1) * (k - r * dA) mod n  

根据s的公式,推导出(变换公式)

K=(1+d)s+r*d mod n

dA=(k-s)(s+r)^(-1) mod n

可以看出,可以通过r、s、d求出随机数k

也可以通过r、s、k求出私钥d;

签名攻击

经常做签名攻击验证的,都知道是为了验证是否能求出私钥d,和随机数K

签名攻击是什么情况呢,使用一个私钥对两组数据进行签名,验证随机数是否重复

是已知一个私钥、两组签名值(r1,s1),(r2,s2),k重复使用,求K、da

s1 = (1 + da)^(-1)(k - r1*da) mod n

s2 = (1 + da)^(-1)(k - r2*da) mod n

如果K相同,由上面两个式子推导出da=(r2-r1)/[(r2-r1)-(S1-S2)]-1,求出da

K=(1+d)s+r*d mod n,求出K

怎么推导da的,把mod n去掉,二元一次方程组变换就行

4、验证过程

举个例子

已知私钥

34D3A275665714D891B591927813D5D8BD911865DB79C630A0BA324BC285B4A1

公钥

A3A1C53963EF116A7A9AE7DDCF449BEA8CDA574282317D7E8D9202807A8D3DEA439E688091BF448625A422304CF92C4C8AA353C11EF38FBA800AA8FDF830418D

消息

123456

随机数K

0D5CE916C79C6738E2DD82E76429107A4BFDA88E5CCA306A649A0F9BF04B3C09

问题1,求e、r、s值
问题2,通过r、s、d求出随机数k

问题3,通过r、s、k求出私钥d

ZA=SM3(ENTLA ‖ IDA ‖ a ‖ b ‖ xG ‖ yG ‖ xA ‖ yA)

f0b47be3bc3c03cc54414c57961a56973ba1454c1eeb6e7209d6c5ad314977d0

e=SM3(ZA || M)

13910ac59ca36bd57d82d4c0aae6fd4923f827d4bb8e7629b8f2093deb648f82

③(x1,y1)=[k]G

X1=fd9889fe095654663624a6fb5adf127c59203ba5eafab708bd2499dc0d87373b

r=e+X1 mod n

112994C4A5F9C03BB3A77BBC05C60FC60B14840F84C32807225AAF10BF16859A

s = (1 + dA)^(-1) * (k - r * dA) mod n 

先算(1 + dA)^(-1) mod n 

DBF01FC1C85AD5999096B1D800F379DA2D34376348E142DC9A8A304B1B4D65FC

再算r*d mod n

5088A35A0A45CD1F98DD19E889C67504614BE49CA2CDACDB84065AC77E0749B4

算k-r*d mod n

BCD445BBBD569A194A0068FEDA629B755CB5A35CDBC288BA344FA8DDAC193378

最后s=(1 + dA)^(-1) (k-r*d mod n

BBB2C09FB0C149FF863193631F76B8D856BF420C57E359288D1DB266E24C130F

签名值rs,使用工具验证一下

112994C4A5F9C03BB3A77BBC05C60FC60B14840F84C32807225AAF10BF16859A

BBB2C09FB0C149FF863193631F76B8D856BF420C57E359288D1DB266E24C130F

通过r、s、d求出随机数k

按照之前计算方法

(1+d ) *s mod n

BCD445BBBD569A194A0068FEDA629B755CB5A35CDBC288BA344FA8DDAC193378

r*d mod n

5088A35A0A45CD1F98DD19E889C67504614BE49CA2CDACDB84065AC77E0749B4

K=(1+d)s+r*d mod n,验证正确

通过r、s、k求出私钥d

k-s mod n

51AA287616DB1D395CABEF8444B257A1674245ED26ACDC6D2B38513E47D46A1D

(s+r)^-1

F3F990BF9CACCCF8AF77E32A51C702DCBCE23A8EB28C62CB70078D000C25C1AB

dA=(k-s)(s+r)^(-1) mod n,验证正确;所以这个随机数K是非常重要的,对K进行保护严禁泄露,等同于保护私钥

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值