密评--SM2加解密手动验算过程

1、SM2可能得考点

密评、能力验证绕不过SM2算法,考试出题基本围绕着SM2算法的随机数来进行,要不就是随机数重复、要不就是随机数简单可以爆破。这里把SM2加解密的过程,全都计算验证出来,仅供参考。

2、解析SM2加密过程

SM2加密流程图

SM2加密数据,就是为了得到C1C2C3

C1=[K]G

C1,随机数K点乘参数G,这个G是已知的G=

32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7

BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0

举个栗子,不符合要求的K值,K=0x05,求C1

有的同学,可能就看见了为什么是“点乘(基于私钥生成公钥)”,因为公钥P=[d]G,这里都是点乘G,所以可以这么算。

C2=M⨁t

M呢,就是明文;t通过X2Y2得到,(x2,y2)=[k]PB,随机数点乘公钥

t=KDF(X2||Y2,Mlen),这里我用Mlen,是因为方便记忆,就是要用到明文的长度hex

3、举个栗子计算验证SM2加密

已知

私钥

B605B0C73EB1FA7C2197547064AFFEE1258793CA62E71EC12DD7BB9AB4CB5AF1

公钥E15FB81C288B99F8A2400E2FCC91A6DC7D4F922B427114A482DF7CE769EA8964B3F38B0F84A04FA4FDD4FF84033920CD273F36819732E209B8A0D2CD6C93ED33

随机数K

0000000000000000000000000000000000000000000000000000000000000005

对数据“好好学习,天天向上”进行收工计算加密,再用工具验证是否正确

C1=[K]G

刚才已经求得了

C1=c749061668652e26040e008fdd5eb77a344a417b7fce19dba575da57cc372a9ef2df5db2d144e9454504c622b51cf38f5006206eb579ff7da6976eff5fbe6480

(x2,y2)=[k]PB

82b4588e5be4f9ff31e09bf3718e28290123f0da5a6e2d977c76763f8aa69a70
c0bc4af860c7f6d1dc8dff26b2c3d288f4787216f8178084aae3530bb6636ff8

t=KDF(X2||Y2,Mlen)

“好好学习 天天向上”16进制,34hex,597d597d5b664e60205929592954114e0a

t=81F8F2BA8EAE2B3A2005BD8536619A6C18

C2=M⨁t

D885ABC7D5C8655A005C94DC1F358B2212

C3=HASH(X2||M||Y2)

SM2加密过程使用的是SM3杂凑计算

68d7bf243a8adce6da5bbc0c365843b31fd0647c0eebaafe25d018a5af70d794

C1C3C2

把前面得到的C1C3C2拼接起来

c749061668652e26040e008fdd5eb77a344a417b7fce19dba575da57cc372a9ef2df5db2d144e9454504c622b51cf38f5006206eb579ff7da6976eff5fbe648068d7bf243a8adce6da5bbc0c365843b31fd0647c0eebaafe25d018a5af70d794D885ABC7D5C8655A005C94DC1F358B2212

使用私钥去验证下,是否正确

正确,手动计算成功

小提示,每次使用工具SM2加密都是不一样的结果,是因为工具使用随机的K,导致(X1,Y1),(X2,Y2)不一样

使用工具,使用公钥加密,和我计算的不一样,每点一次都不一样

4、顺带做个解密验证计算

解密过程,引用之前我们计算结果

C1=c749061668652e26040e008fdd5eb77a344a417b7fce19dba575da57cc372a9ef2df5db2d144e9454504c622b51cf38f5006206eb579ff7da6976eff5fbe6480

C2=D885ABC7D5C8655A005C94DC1F358B2212

C3=68d7bf243a8adce6da5bbc0c365843b31fd0647c0eebaafe25d018a5af70d794

私钥

B605B0C73EB1FA7C2197547064AFFEE1258793CA62E71EC12DD7BB9AB4CB5AF1

(x2,y2)=[d]C1

加密时候,(x2,y2)=KP,这两个计算式子结果值是一样的

解密时候,[d]C1=82b4588e5be4f9ff31e09bf3718e28290123f0da5a6e2d977c76763f8aa69a70
c0bc4af860c7f6d1dc8dff26b2c3d288f4787216f8178084aae3530bb6636ff8

后面计算t是一样的

t=81F8F2BA8EAE2B3A2005BD8536619A6C18

M=C2⨁t

最后,好好学习 天天向上

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值