SM2无证书及隐式证书公钥机制签名和加密过程详解(一)

前面介绍SM2无证书及隐式证书公钥机制下用户公私密钥对的Python实现(具体参看SM2隐式证书用户公私钥生成python代码实现_sm2 python 密钥生成-CSDN博客),可以看到需由用户和KGC(可信密钥生成中心)共同参与才能计算得到私钥dA。为方便展开过程详解,下面列出过程中涉及的相公私钥对。

公钥名称对应私钥作用说明可见范围
UA:用户的部分公钥d‘A:用户的部分私钥

WA=wG+UA

dA=tA+d’A

私钥d'A由用户侧随机生成,公钥UA发送给KGC,对第三方不可见
PA:用户的实际公钥dA:用户的私钥用户使用dA/PA签名验签、加密解密私钥dA由用户侧与KGC共同计算得到且仅由用户可见,PA允许任意方通过公开参数计算得到

Ppub:KGC主公钥

(CA签名公钥)

ms:KGC主私钥

(CA签名私钥)

参与dA生成计算过程ms仅KGC可见,Ppub公开

WA:用户的声明公钥

(公钥还原数据)

-PA=WA+\lambdaPpub任意方可得到公开的WA、Ppub、计算\lambda相关的参数及杂凑算法

用户声明公钥WA的引入使用户实际公钥PA不公开,而是通过相关参数计算得到,也正是这些参数保证可信用户身份。具体看用户实际公钥PA的计算过程如下:

PA = WA+\lambdaPpub = WA+ Hash(Xwa||Ywa||Hash(ENTLA||IDA||a||b||Xg||Yg||Xpub||Ypub))*Ppub

WA = wG+UA (其中w是KGC产生的随机数)

其中UA是用户部分公钥,IDA是用户标识,Xpub和Ypub则是KGC的主公钥Ppub,从而使PA同时具备用户和KGC的特征。

无证书机制不需要证书实体的参与,具体签名验签和加密解密过程如下:

(1)无证书机制签名验签过程

1.1 签名过程

输入:M - msg内容,IDA - 用户标识,WA - 声明公钥,Ppub - KGC主公钥,SM2椭圆曲线参数,dA - 用户私钥

计算:

HA = SM3(ENTLA||IDA||a||b||Xg||Yg||Xpub||Ypub)

e = SM3(HA||Xwa||Ywa||M)

KG=(X1,Y1),K为随机数

r = (e+X1)mod n

s = (K-rdA)/(dA+1)mod n

输出:(r,s)

1.2验签过程

输入:M - msg内容,IDA - 用户标识,WA - 声明公钥,Ppub - KGC主公钥,SM2椭圆曲线参数,签名值(r,s)

计算:

HA = SM3(ENTLA||IDA||a||b||Xg||Yg||Xpub||Ypub)

\lambda = SM3(Xwa||Ywa||HA)

PA = WA + \lambdaPpub = dA*G

e = SM3(HA||Xwa||Ywa||M)

sG + (r+S)PA = KG = (X1,Y1)

输出:R = (e + X1)mod n与r是否相同,若是则验签成功

(2)无证书机制加密解密过程

2.1加密过程

输入:M - msg内容,IDA - 用户标识,WA - 声明公钥,Ppub - KGC主公钥,SM2椭圆曲线参数

计算:

HA = SM3(ENTLA||IDA||a||b||Xg||Yg||Xpub||Ypub)

\lambda = SM3(Xwa||Ywa||HA)

PA = WA + \lambdaPpub = dA*G

C1 = kG,k为随机数

(X2,Y2)= kPA

C2 = M \oplus KDF(X2||Y2,mlen)

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

输出:C1||C3||C2

2.2解密过程

输入:dA - 用户私钥,C1||C3||C2

计算:

dA*C1 = dA*k*G = k*(dA*G) = k*PA = (X2,Y2)

M = C2 \oplus KDF(X2||Y2,mlen)

C3' = SM3(X2||M||Y2)

输出:C3'是否与C3相同,若是则明文为M

隐式证书公钥机制则需要遵循隐式证书格式生成证书实体,具体内容下次将讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游鲦亭长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值