信息安全从业人员^_^
一个未入门de情报学胖子(邮箱:tenghm1986@163.com)
Toggle navigation
信息安全从业人员^_^
主页
About Me
归档
标签
ECDSA签名-椭圆曲线数字签名算法
2018-06-27 10:41:30
269
0
0
heming
# 0.参考 [1] [blog-ECDSA签名算法](https://segmentfault.com/a/1190000012288285) [2] 杨波,现代密码学[M],清华大学出版社,2017 [3] [密码学基础2--椭圆曲线密码学原理解析](https://juejin.cn/post/6844903900961570823) [4] [Substrlde分椭圆曲线签名介绍](https://www.bilibili.com/video/BV1AK411n7GZ?spm_id_from=333.337.search-card.all.click) # 1. SM2椭圆曲线公钥密码签名算法 ## 1.1 基本参数 - F<sub>p</sub>的特征p为m比特长的素数,p要尽可能大,但太大会影响计算速度 - 长度不小于192比特的比特串SEED - F<sub>p</sub>上的2个元素a、b满足,4a<sup>3</sup> + 27 b<sup>2</sup> ≠ 0,定义曲线y<sup>2</sup> = x<sup>2</sup> + ax + b - 基点G=(x<sub>G</sub>,y<sub>G</sub>) - G的阶n为m比特长的素数,满足 n > 2<sup>191</sup>且n > 4 $\sqrt p$ - h=$\frac{|E(F_{p})|}{n}$,h称为余因子,其中${|E(F_{p})|}$是曲线E(F<sub>p</sub>)的点数 ## 1.2 密钥产生 - A的密钥与公钥 d<sub>A</sub>和P<sub>A</sub>=(x<sub>A</sub>,y<sub>A</sub>) - ID<sub>A</sub>是A的长度为entlen<sub>A</sub>比特的标识 - ENTL<sub>A</sub>是由entlen<sub>A</sub>转换而成的两个字节 - Z<sub>A</sub>=H<sub>256</sub>( ENTL<sub>A</sub> || ID<sub>A</sub> || a || b || x<sub>G</sub> || y<sub>G</sub> || x<sub>A</sub> || y<sub>A</sub>) --- tips: 验证方B验证签名时也需要计算Z<sub>A</sub> --- ## 1.3 签名算法 设待签名的消息M,A做以下运算: - (1) 取$\overline{M}$= Z<sub>A</sub> || M - (2) 计算e=H<sub>v</sub>($\overline{M}$),将e转换为整数,H<sub>v</sub>输出为v比特长的哈希函数 - (3)用随机数发生器产生随机数k←<sub>R</sub>{1,2,...,n-1}; - (4)计算椭圆曲线点C<sub>1</sub>=(x<sub>1</sub>,y<sub>1</sub>); - (5)计算r=(e + x<sub>1</sub>) mod n,若r=0或r+k=n,则返回(3) - (6)计算s=((1+d<sub>A</sub>)<sup>-1</sup> · (k-r·d<sub>A</sub>)) mod n,若s=0,则返回(3) - (7) 消息M的签名(r,s) <center> ![SM2签名算法](https://leanote.com/api/file/getImage?fileId=627a1156ab64412e450b9fb6) </center> ## 1.4 验证签名算法 B收到消息M<sup>'</sup>及其签名(r<sup>'</sup>,s<sup>'</sup>),B执行以下运算: - (1)检验r<sup>'</sup>∈[1,n-1]是否成立,若不成立,验证不通过 - (2)检验s<sup>'</sup>是否成立,若不成立,验证不通过 - (3)置$\overline{M'}=Z_A || M'$ - (4)计算$e'=H_v(\overline{M'})$,将e<sup>'</sup>换成整数 - (5)计算t=(r<sup>'</sup> + s<sup>'</sup>) mod n,若t=0,则验证不通过 - (6)计算椭圆曲线点(x<sup>'</sup><sub>1</sub>,y<sup>'</sup><sub>1</sub>) = s<sup>'</sup>G + tP<sub>A</sub>; - (7)计算R=(e<sup>'</sup> + x<sup>'</sup><sub>1</sub>) mod n,检验R=r<sup>'</sup>是否成立 <center> ![验证签名算法](https://leanote.com/api/file/getImage?fileId=627a1156ab64412e450b9fb7) </center> ## 1.5 正确性验证 如果$\overline{M'} = \overline {M},(r',s') =(r,s)$,则e<sup>'</sup> = e,要证R = r<sup>'</sup>=r,只需证明x<sup>'</sup><sub>1</sub> = x<sub>1</sub> x<sup>'</sup><sub>1</sub> = s<sup>'</sup>x<sub>G</sub> + tx<sub>A</sub> = sx<sub>G</sub> + (r+s) x<sub>A</sub> = sx<sub>G</sub>+(r+s)d<sub>A</sub>x<sub>G</sub> =(s+rd<sub>A</sub>+sd<sub>A</sub>)x<sub>G</sub> =(s(1+d<sub>A</sub>) + rd<sub>A</sub>)x<sub>G</sub> =(k-rd<sub>A</sub>+rd<sub>A</sub>)x<sub>G</sub> =x<sub>1</sub> <center> ![计算x<sub>1</sub>](https://leanote.com/api/file/getImage?fileId=627a1156ab64412e450b9fb5) </center>
上一篇:
选专业参考--生物学
下一篇:
SM2 椭圆曲线
0
赞
269 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
Please enable JavaScript to view the
comments powered by Disqus.
comments powered by
Disqus
文档导航