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

SM2协同签名算法中随机数K的随机性对算法安全的影响

前面介绍过若持有私钥d的用户两次SM2签名过程中随机数k相同,在对手获得两次签名结果Sig1和Sig2的情况下,可破解私钥d。
具体见SM2签名算法中随机数K的随机性对算法安全的影响_sm2关闭随机数-CSDN博客

另关于SM2协同签名过程,具体见SM2协同签名过程实例_协同签名流程-CSDN博客

可知在SM2协同签名的客户端和服务端也均使用随机数,那么重复使用随机数值是否对SM2协同签名产生私钥威胁?

答案是肯定的,重复使用随机数对SM2协同签名密钥安全存在重大威胁。这里我们做一些理论推导即可得到其与SM2签名过程中重复随机数K破解私钥d的情况其实是一致的。

客户端数据信息:
(1)客户端私钥d1
(2)客户端公钥P1 (P1 = d1 * G)
(3)客户端随机数K1
(4)客户端过程参数R1 (R1 = K1 * G)
(5)客户端过程参数R1_ (R1_ = K1 * P2)
(6)公共公钥P (P= d1 * P2 - G)
(7)客户端过程参数(x1,y2)= R1 + R2
(8)协同签名r = (H(M)+x1) mod n
(9)客户端过程参数s_ = (K1 + r)/d1 mod n
(10)协同签名s = t - r
(11)协同签名(r,s)

服务端数据信息:
(1)服务端私钥d2
(2)服务端公钥P2 (P2 = d2 * G)
(3)服务端随机数K2
(4)服务端过程参数R2_ (R2_ = K2 * G)
(5)服务端过程参数R2 (R2 = K2 * P1)
(6)公共公钥P (P= d2 * P1 - G)
(7)服务端过程参数t = (s_ + K2)/d2 mod n 

首先证明客户端和服务端计算得到的公共公钥P是相同的。
在客户端 d1 * P2 - G = d1 * d2 * G - G = (d1*d2-1)G
在服务端 d2 * P1 - G = d2 * d1 * G - G = (d1*d2-1)G

然后分析s的具体结构,可以看到与SM2签名算法也是一致的,可以理解为随机数K=(k1+k2*d1),私钥d=(d1*d2-1)。
s =  t - r = (k1+k2*d1+r)/d1*d2 -r = [(k1+k2*d1)-r(d1*d2-1)]/[(d1*d2-1)+1] mod n

到这里,我们看到协同签名其实就是客户端和服务器共同构造随机数K=(k1+k2*d1),私钥d=(d1*d2-1)的SM2签名,但客户端和服务端各自只掌握其中一部分信息。若k1和k2同时存在重复时,随机数K就是重复的,则私钥d可能泄露。


http://www.kler.cn/a/317270.html

相关文章:

  • 《TCP/IP网络编程》学习笔记 | Chapter 8:域名及网络地址
  • Sigrity SPEED2000 Power Ground Noise Simulation模式如何查看PDS系统的自阻抗操作指导
  • 《MYSQL45讲》误删数据怎么办
  • vue3+element-plus==> el-form输入响应式失效踩坑!!!!!!!!!!
  • unity基础,点乘叉乘。
  • R语言机器学习与临床预测模型77--机器学习预测常用R语言包
  • (八)使用Postman工具调用WebAPI
  • 花园管理系统
  • 论文阅读与分析:Few-Shot Graph Learning for Molecular Property Prediction
  • 服务器操作系统【sar 命令】
  • MongoDB的备份和恢复命令
  • macos macport软件包管理工具 sudo port install xxx 安装的软件的路径 与 brew install xxx 软件安装路径总结
  • 【android10】【binder】【3.向servicemanager注册服务】
  • 科研小白入门工具
  • 探究RAG技术在自然语言处理领域的未来发展
  • 数学建模 第二讲 - 初等建模
  • Linux C# Day4
  • Opencv图像预处理(三)
  • MapReduce基本原理
  • 探索以太坊:从基础到应用,解锁区块链技术的无限可能
  • 基于飞腾平台的OpenCV的编译与安装
  • 基向量和投影矩阵
  • 鸿蒙OpenHarmony【轻量系统内核通信机制(互斥锁)】子系统开发
  • 面试金典题9
  • SRS流媒体服务器在宝塔面板下的安装
  • 预计2030年全球GO电工钢市场规模将达到120.6亿美元