当前位置: 首页 > news >正文

SM2数字签名

文章目录

  • 6. 签名流程
  • 7. 验签流程
  • 实现
  • 参考资料

6. 签名流程

  1. M’ = ZA || Msg
  2. e = Hash(M’),并转为大数;
  3. 生成随机数k,范围0<k<n;
  4. 计算kG = (x1, y1)
  5. r = (e + x1) mod n, 若r0或(r+kn)则重新生成k;
  6. s = (k-rd) / (1+d) mod n,若s==0则重新生成k;
  7. 返回签名(r, s)

ZA:关于用户A的可辨别标识、部分椭圆曲线系统参数和用户A公钥的杂凑值。

7. 验签流程

  1. 检查r, s范围,>0 && < n
  2. M’ = ZA || Msg
  3. e = Hash(M’), 并转为大数;
  4. t = (r + s) mod n,若t==0,则验证不通过;
  5. (x1, y1) = sG + tQ
  6. 计算R = (e + x1) mod n == r是否成立,成立则验签通过。

推导:

sG + tQ
= ((k-rd) / (1+d)) G +  (r + s) dG
= ((k-rd) / (1+d)) G +  ( ((r+rd) + (k-rd))/(d+1) ) dG
= ((k-rd) / (1+d)) G +  ( (r + k)/(d+1) ) dG
= ((k-rd) / (1+d)) G +  ( (dr + dk)/(d+1) ) G
= (k+dk) / (1+d)) G
= kG
= (x1, y1)

整个流程其实和ecdsa相似,区别在于:

  • 消息前追加发送者的标识
  • r和s的计算有点差异。

实现

https://github.com/C0deStarr/CryptoImp/tree/main/pubkey/ecc

  • sm2.g
  • sm2.c

实现时有一个坑,s的符号大概率是负的,但big_to_bytes接口并不会存储符号,需要手动记录。

参考资料

国家密码管理局关于发布《SM2椭圆曲线公钥密码算法》公告(国密局公告第21号)_国家密码管理局 (sca.gov.cn)

http://www.lryc.cn/news/6028.html

相关文章:

  • RPA+保险后台部门擦出不一样“火花” | RPA案例
  • 设备树相关概念的理解
  • ubuntu20.04下配置深度学习环境GPU
  • 用egg.js来写一个api管理系统(一)
  • 企业数字化转型和升级:架构设计方法与实践
  • 【LeetCode】环形链表 II [M](链表)
  • Unity之如何实现一个VR任务(剧情)系统
  • k8s核心概念与kubectl命令行工具的使用
  • 【零基础入门前端系列】—无序列表、有序列表、定义列表(四)
  • 为什么重写equals还要重写hashcode方法
  • 电子技术——电流镜负载的差分放大器
  • go面试题
  • 攻防世界-Confusion1
  • 机器学习实战--梯度下降法进行波士顿房价预测
  • 黑马】后台管理-项目优化和上线
  • Web 框架 Flask 快速入门(三)数据库-MySQL
  • 牛客网Python篇数据分析习题(六)
  • Ansible的安装及部署
  • 链表题目总结 -- 递归
  • 重写-linux内存管理-伙伴分配器(一)
  • 为什么要用springboot进行开发呢?
  • 设备树信息解析相关函数
  • LeetCode-1124. 表现良好的最长时间段【哈希表,前缀和,单调栈】
  • vue-router路由配置
  • 中国计算机设计大赛来啦!用飞桨驱动智慧救援机器狗
  • 嘉定区2022年高新技术企业认定资助申报指南
  • 【C++】关键字、命名空间、输入和输出、缺省参数、函数重载
  • 【一道面试题】关于HashMap的一系列问题
  • 论文笔记: Monocular Depth Estimation: a Review of the 2022 State of the Art
  • Springmvc补充配置