粗略看了《商用密码——应用与安全性评估》的第一章和第三章(第三章没看完)
工程性太强了,过目即忘,便有此文
0. 前言
官方文档还没看呢,慢慢来……
1. SM2椭圆曲线公钥密码算法
其实在置顶文章已经写过了,我搬运一遍。
……
SM2、SM9是我国颁布的商用密码标准算法中的公钥密码算法,下面介绍SM2
Alice与Bob事先协商好相同的公开参数,包括p,n,E and G
其中p是大素数,E是定义在GF§上的椭圆曲线群,G是E的生成元
1.1. SM2数字签名算法
①密钥生成
a) 随机数 d∈[1,n−2]
b) 计算 P=dG,并将 P 作为公钥公开,d 作为私钥保存
②签名
a) Alice 选取随机数 k∈[1,n−1],计算 kG=(x1,y1)
b) 计算 r=(H(M)+x1) mod n,其中 M=ZA∣∣m ,Z_A 是关于用户的可辨别标识、部分椭圆曲线系统参数和用户的公钥hash值,m是待签名信息,H为国家密码管理局核准的杂凑函数,如SM3;若 r=0 mod n 或 r+k=0 mod n,则重新选取随机数 k
c) 计算 s=(1+d)−1(k−rd) mod n ; 若 s≡0,则重新选取随机数 k ,否则,将 (r,s) 作为签名结果
③验签
a) Bob 收到 M 和 (r,s) 后,先检查 r,s∈[1,n−1] 且 r+s=0 mod n ;然后计算 (x1’,y1’)=sG+(r+s)P
b) 计算 r′=(H(M)+x1′) mod n ;判断 r’ 与 r 是否相等,若相等则签名验证通过。
1.2. SM2密钥交换
|
Alice |
Bob |
pk |
PA |
PB |
sk |
dA |
dB |
唯一标识 |
ZA |
ZB |
Alice:
1)选取随机数 rA∈[1,n−1],计算RA=rAG=(x2,y2) 并发送给Bob
Bob:
1)选取随机数 rB∈[1,n−1] ,计算 RB=rBG=(x3,y3) 并发送给Alice
2)计算 xB=2w+(x3∧(2w−1)) 和 tB=(dB+xBrB) mod n
3)验证接收到的 RA 是椭圆曲线 E 上的点,验证通过后计算 xA=2w+(x2∧(2w−1))
4)计算 V=tB(PA+xARA)=(xV,yV);若 V 是椭圆曲线 E 上的无穷远点,则重新选取 rB
5)计算 KB=KDF(xV∣∣yV∣∣ZA∣∣ZB,klen)
Alice:
2)计算 xA=2w+(x2∧(2w−1)) 和 tA=(dA+xArA) mod n
3)验证接收到的 RB 是椭圆曲线上的点,验证通过后计算 xB=2w+(x3∧(2w−1))
4)计算 U=tA(PB+xBRB)=(xU,yU) ; 若 U 是椭圆曲线 E 上的无穷远点,则重新选取 rA,重新协商。
5)计算 KA=KDF(xU∣∣yU∣∣ZA∣∣ZB,klen)
经过以上协商,Alice与Bob共享密钥 KA=KB
1.3. SM2公钥加密算法
M:比特长度为mlen的明文
Enc
1)选取随机数 l∈[1,n−1] , 分别计算 C1=lG=(x4,y4) and lP=(x5,y5)
2)计算 e=KDF(x5∣∣y5,mlen)
3)计算 C2=M⊕e 和 C3=H(x5∣∣M∣∣y5)
4)输出密文 C=C1∣∣C3∣∣C2
Dec
1)验证 C1 是否在椭圆曲线上,计算 d∗C1=(x5,y5)
2)计算 e=KDF(x5∣∣y5,mlen)
3)计算 M=C2⊕e
4)计算 C3′=H(x5∣∣M∣∣y5) ,并验证 C3′=C3 是否成立
输出明文 M
2. SM3密码杂凑算法
3. SM4分组密码算法
4. SM9标识密码算法
最近在实验室打工,负责研究有限域层运算
有限域层
有限域层包括有限域下的模加、模减、模乘、模逆。其中模乘占据SM9系统接近7成的运算量,因此模乘的效率改善尤为重要。
5. ZUC序列密码算法
参考
SM国产密码算法 — 晓鹿 (alienx.cn)
《商用密码——应用与安全性评估》