SM2协同签名算法

在介绍SM2协同签名之前,先介绍下门限签名机制,提到门限签名就不得不提区块链,在与区块链的结合应用中,门限签名的优势在于签名的生成是通过链下的 MPC 协议产生的,其结果是更加安全,避免了合约被黑客攻击的风险。因为门限签名与合约模块是完全解耦的,合约不需要理解签名的协议,它只要确认签名的有效性,这与传统的合约验签模式完全一致的。此外,合约的设计策略可以更加灵活,因为除了验签外的大部分流程都搬到了链下,使用方可以根据场景制定自己的碎片管理策略。

0x01 什么是门限签名

门限签名(Threshold Signature Scheme,TSS)是数字签名的一个重要分支,它是一种基于安全多方计算(Secure Multi-Party Computation,MPC)的密码学技术,也是 MPC 密钥管理的重要研究方向。

门限签名的一个主要优势是增强了安全性和灵活性。它可以用于多方协作的环境,其中签名的生成需要多个独立的实体同意。与传统的单一签名密钥不同,门限签名不依赖于单个实体的安全性。即使其中一些参与者的密钥被泄漏或被攻击,只要达到门限要求的参与者仍然安全,签名仍然有效。

门限签名的应用领域包括安全多方计算、分布式密钥生成、多方认证等。这种签名方案在构建安全和弹性的分布式系统中具有重要的实际应用。

门限签名特点是一个签名一定是由一个私钥产生,然而这个私钥不会被任何人完整掌握,而是会以某种方式分成很多碎片,这些碎片可以被多人同时持有,然后通过 MPC 协议,保证这些碎片不需要全部被拼起来就可以直接产生一个合法的签名。

0x02 什么是SM2协同签名

我对于SM2协同签名的理解是基于国产密码算法中门限签名的一种特殊形式,签名过程中只有两方(发起方与协作方)参与,由两方协商生成一个用于验证签名的公钥,双方各持部分签名私钥,任何一方无法生成完整的签名,从而保障了在移动终端、云服务、个人计算机、智能手表、智能卡等设备上无法保障私钥安全性从而导致关键动作签名被伪造。

在协同签名过程中有如下术语:

协同数字签名

由两个参与方通过协议交互和使用各自掌握的用户部分私钥完成某输入消息的数字签名计算的过程。

部分私钥

协同数字签名过程中由发起方和协作方分别专用的秘密数据项。

用户公钥

用户私钥对应的公钥,在本文件中是由两个参与方共同掌握的用户私钥对应的公钥。

密钥对协同生成

 用户私钥对应的公钥,在本文件中是由两个参与方共同掌握的用户私钥对应的公钥。

发起方

在协议的操作过程中发送首轮信息的参与方,一般为签名方(用户)的代理。

协作方

在协议的操作过程中协助发起方完成密钥对生成或签名的参与方。

0x03 协同签名的几种方式

3.1 一般协同机制签名

一般协同签名机制适用于协作方不需要知道消息内容,但是又可以对签名信息摘要做审计的场景。在一般协同签名机制中,发起方向协作方发送消息的摘要,协作方计算部分签名后返回给发起方,发起方再计算并输出最终的签名。

3.2 需要消息确认的协同签名机制

需要消息确认的协同签名机制适用于在协作方确认消息内容的场景。在需要消息确认的协同签名机制中,发起方向协作方发送消息本身,协作方检查消息内容并进行确认,然后才计算部分签名并返回给发起方,发起方再计算并生成最终的签名。

3.3 盲协同签名机制

盲协同签名机制适用于不希望协作方知道消息内容或追踪签名的场景。盲协同签名机制中,消息内容对协作方不可见。在签名被发起方公开后,协作方不能追踪签名。

0x04 协同密钥对生成算法

发起方和协作方协同密钥对生成的具体运算步骤如下:

发起方:

A1:发起方向协作方发送协同密钥对生成请求。

协作方:

B1:产生随机数d2∈[1,n-1];B2:计算椭圆曲线点P2=[d2]G,协作方的密钥对为(d2,P2);B3:将P2发送给发起方。

发起方:

A2:验证P2是否满足椭圆曲线方程,若不满足则协同生成密钥对失败;A3:产生随机数d1ϵ[1,n-1];A4:计算椭圆曲线点P1=[d1]G ,发起方的密钥对为(d1, P1);A5:计算椭圆曲线点PA=[d1]P2-G,用户A的公钥为PA。

0x05 一般协同签名协议

具体运算步骤如下:

发起方:

A1:计算消息摘要e=Hv(ZA||M),按GM/T 0003.1—2012第1部分4.2节中定义的方法将e的数据类型转换为整数,其中ZA需按照GM/T 0003.2—2012第2部分5.5节中定义的方法计算得到;A2:产生随机数k1∈[1,n-1];A3:计算椭圆曲线点Q1=[k1]P2;A4:将e, Q1发送给协作方。

协作方:

B1:验证Q1是否满足椭圆曲线方程,若不满足则终止协同签名流程;B2:产生随机数k2∈[1,n-1];B3:计算椭圆曲线点(x1,y1)=[k2]G+Q1,按GM/T 0003.1-2012第1部分4.2节中定义的方法将x1数据类型转换为整数;B4:计算r=(e+x1) mod n,若r=0或r+k2=n,则返回B2;B5:计算s2=(d2-1⋅(r+k2)) mod n;B6:将r, s2发送给发起方。

发起方:

A5:如果k1+s2=n则返回A2;A6:计算s=(d1-1⋅(k1+s2)-r) mod n,若s=0则返回A2;A7:使用公钥PA验证(r, s)是否为消息M的签名,如果不是则本次签名失败;否则输出(r, s)作为消息M的签名。

0x05 需要消息确认的协同签名协议

具体运算步骤如下:

发起方:

A1:产生随机数k1ϵ[1,n-1];A2:计算椭圆曲线点Q1=[k1 ]P2;A3:将M, ZA, Q1发送给协作方,其中ZA需按照GM/T 0003.2—2012第2部分5.5节中定义的方法计算得到。

协作方:

B1:验证Q1是否满足椭圆曲线方程,若不满足则终止协同签名流程;B2:检查消息M的内容并进行确认,若消息内容不正确则终止协同签名流程;B3:计算消息摘要e=Hv(ZA||M),按GM/T 0003.1-2012 第1部分4.2节中定义的方法将e的数据类型转换为整数;B4:产生随机数k2ϵ[1,n-1];B5:计算椭圆曲线点(x1, y1)=[k2]G+Q1,按GM/T 0003.1-2012第1部分4.2节中定义的方法将x1数据类型转换为整数;B6:计算r=(e+x1) mod n,如果r=0或者r+k2=n,则返回B4;B7:计算s2=(d2-1⋅(r+k2 )) mod n;B8:将r, s2发送给发起方。

发起方:

A4:如果k1+s2=n则返回A1;A5:计算s=(d1-1⋅(k1+s2)-r) mod n,若s=0则返回A1;A6:使用公钥PA验证 (r, s)是否为消息M的签名,如果不是则签名失败;否则输出(r, s)作为消息M的签名。

0x06 盲协同签名协议

具体计算流程如下:

发起方

A1:发起方向协作方发起协同签名请求。

协作方:

B1:产生随机数k2ϵ[1,n-1];B2:计算椭圆曲线点Q2=[k2 ]G;B3:将Q2发送给发起方。

发起方:

A2:验证Q2是否满足椭圆曲线方程,若不满足则协同签名失败;A3:计算消息摘要e=Hv(ZA||M),按GM/T 0003.1-2012第1部分4.2节中定义的方法将e的数据类型转换为整数,其中ZA需按照GM/T 0003.2—2012第2部分5.5节中定义的方法计算得到;A4:产生随机数k1,k3ϵ[1,n-1];A5:计算椭圆曲线点(x1, y1 )=[k1]P2+Q2+[k3]G,按GM/T 0003.1-2012第1部分4.2节中定义的方法将x1数据类型转换为整数;A6:计算r=(e+x1) mod n,如果r=0或者r+k3=n,则返回A4;A7:计算r1=(r+k3) mod n;A8:将r1发送给协作方。

协作方:

B4:计算s2=(d2-1⋅(k2+r1)) mod n;B5:将s2发送给发起方。

发起方:

A9:计算s=(d1-1⋅(k1+s2)-r) mod n,如果s=0或s+r=n则返回A1;A10:使用公钥PA验证签(r, s)是否为消息M的签名,如果不是则签名失败;否则输出(r, s)作为消息签名M的签名。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/124226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络工程综合试题(二)

1. SR技术有哪些缺点? SR(Segment Routing)技术是一种新兴的网络编程技术,它具有很多优点,但也存在一些缺点,包括: 部署复杂性:SR技术需要对网络进行改造和升级,包括更新…

基于SpringBoot的企业财务管理系统

目录 前言 一、技术栈 二、系统功能介绍 管理员功能实现 财务人员管理 留言管理 薪资管理 财务人员功能实现 报销信息管理 收费信息管理 支出信息管理 员工功能实现 报销信息管理 留言管理 薪资查询 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前…

研究生安排

研一 看论文不懂先记着 论文一定多看的,建议300篇论文,500最好。 选题的时候要心里有谱,先找小论文,再找大论文 研二 确定研究方向和目标 和老师切磋研究的是什么 明确要做的东西是什么,是否已经明确要做什么&#xff…

kubernetes组件

基本队对象 pod 最小单位 service 跟网络相关 Volume Namespace 准备工作: master (1) node1 node2 初始化 做本地解析 10.0.0.51 10.0.0.56 10.0.0.186 关闭swap分区:sed -i s/.*swap.*

Centos安装mongodb

mongodb官网 下载MongoDB cd /optwget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.2.tgztar -xf mongodb-linux-x86_64-rhel70-4.4.2.tgz -C /usr/local/cd /usr/local/mv mongodb-linux-x86_64-rhel70-4.4.2 mongodb部署Mongodb 2.1. 创建目录 cd mo…

k8s资源调度

默认的情况下,一个pod在哪个node节点上运行,是由scheduler组件采取对应的算法计算出来的,这个过程是不受人工控制的,在实际的使用过程中,这不能够满足客观的场景,针对这样的情况,k8s 提供了四大…

基于【逻辑回归】的评分卡模型金融借贷风控项目实战

背景知识: 在银行借贷过程中,评分卡是一种以分数形式来衡量一个客户的信用风险大小的手段。今天我们来复现一个评分A卡的模型。完整的模型开发所需流程包括:获取数据,数据清洗和特征工程,模型开发&#xff0c…

计算机基础知识41

前端 # 前端是所有跟用户直接打交道 比如:PC页面、手机页面、汽车显示屏,肉眼可以看见的 # 后端:一堆代码,用户不能够直接看到,不直接与用户打交道 常见的后端:Python、Java、Go等 # 学了前端就可以做全栈…

C语言每日一练(二)

单链表经典算法专题 一、 单链表相关经典算法OJ题1:移除链表元素 解法一:在原链表中删除Node.nextnext的节点 typedef struct ListNode ListNode; struct ListNode* removeElements( ListNode* head, int val) {ListNode* pcur head;ListNode* pre h…

【T】分治与倍增

分治,分而治之,其中最经典的便是二分 一、二分 一种经典而且非常好用的思想 将原问题对半转换成两个问题,子问题又继续转换成两个问题,许多子问题会很显然对答案没有关系,所以能讲原本O(n)的东西转化为O(logn) 但一般…

(13)PC端自动化测试-C#微信接收消息并自动回复

本篇文章实现了微信自动接收最新的实时聊天信息,并对当前实时的聊天信息做出对应的回复。 可以自行接入人工智能或者结合自己的业务来做出自动回复。 下面视频是软件实际效果 自动接收消息并回复 实现的逻辑是实时监控微信的聊天面板中UI对象来判断是否有最新的消…

世界前沿技术发展报告2023《世界航空技术发展报告》(五)直升机技术

(五)直升机技术 1.常规直升机技术1.1 北约六国联合启动下一代旋翼飞行器能力项目1.2 美国和法国重视发展有人/无人直升机编组能力1.3 美国“黑鹰”直升机完成不载人全自主飞行 2.新概念直升机技术2.1 美国“劫掠者”X型直升机参与陆军“未来攻击侦察机”…

Go学习第十五章——Gin参数绑定bind与验证器

Go web框架——Gin(参数绑定bind与验证器) 1 bind参数绑定1.1 JSON参数1.2 Query参数1.3 Uri绑定动态参数1.4 ShouldBind自动绑定 2 验证器2.1 常用验证器2.2 gin内置验证器2.3 自定义验证的错误信息2.4 自定义验证器 1 bind参数绑定 在Gin框架中&#…

Vue 路由指南:畅游单页应用的地图(Vue Router 和 <router-view>)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

【时间复杂度和空间复杂度】

前言: 首先介绍一下算法(Algorithm) 算法是对特定问题求解步骤的一种描述。一个“好”的算法应该达到以下目标:正确性、可读性、健壮性、高效率与低存储量需求 算法的效率的度量 是通过 时间复杂度 和 空间复杂度 来描述的 一、时间复杂度 时间复杂度…

【数据结构】Map和Set

Map和Set 1. 搜索树 1.1 概念 二叉搜索树是左子树比根节点小,右子树比根节点大的二叉树。(如果左右子树不为空的话是这样,但是左右子树也可以为空) 1.2 操作——查找 查找的思想与二分查找类似。 如果根节点的值和所要查找的…

JavaScript对象数组根据某个属性值筛选分类

🤵 作者:coderYYY 🧑 个人简介:前端程序媛,目前主攻web前端,后端辅助,其他技术知识也会偶尔分享🍀欢迎和我一起交流!🚀(评论和私信一般会回&#…

wangEditor富文本编辑器的使用

文章目录 🟢 wangeditor 富文本⭐️安装 wangeditor⭐️demo 模板⭐️效果图 ✒️总结 🟢 wangeditor 富文本 一款开源 Web 富文本编辑器,开箱即用,配置简单 wangedito 官网 简洁易用、功能强大、文档教程丰富支持 JS、Vue、Rea…

VScode 调试go程序报错,需要更改glaunch.json文件

{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid830387"version": "0.2.0","go.toolsEnvVars": {"GOOS": "js","…

【Note详细图解】中缀表达式如何转为后缀表达式?数据结构

中缀表达式 中缀表达式(中缀记法)是一个通用的算术或逻辑公式表示方法,操作符是以中缀形式处于操作数的中间(例:3 4),中缀表达式是人们常用的算术表示方法。 前缀或后缀记法不同的是&#xf…