密码学 | 多重签名:基本概念

目录

摘要

1  什么是多重签名?

2  多重签名的作用

2.1  联名账户

2.2  提高安全性

2.3  秘钥备份

3  比特币的多重签名

3.1  对比一

3.2  对比二

3.2.1  线性性

3.2.2  不可延展性

3.2.3  安全性证明

3.2.4  效率高、占用空间少


⚠️原文:多重签名:Schnorr 协议与 ECDSA 协议 - 知乎

⚠️写在前面:本文属搬运博客,自己留存学习。

摘要

  • 什么是多重签名?多重签名的作用?
  • 比特币为什么放弃 ECDSA 多签名方案而选择 Schnorr 多签名方案?

比特币是中本聪提出的加密货币,以太坊的加密货币是以太币。

1  什么是多重签名?

众所周知,一个 数字货币所有权 的三要素为:

  • 地址(Address)
  • 公钥(Public Key)
  • 私钥(Private Key)

地址 相当于大家的银行账户。公钥 由本人公开,用于加密和验证签名。私钥 用来进行解密和签名,是数字货币所有权的表征,相当于银行卡的密码。

看来公钥不太好和银行卡这个例子对应起来。

常规账户或者轻钱包都是 一个数字货币地址对应一个私钥,动用这个地址中的资金需要私钥的所有者发起签名才行。

常规账户采用的是单签名机制,即只要该地址对应的那 1 把私钥参与签名就行了。

在比特币中,多重签名技术 —— 也叫 m-of-n 多重签名 —— 用 n 把钥匙生成一个多重签名的地址,需要其中的 m 把钥匙才能花费这个地址上的比特币。比如说,某笔资金对应有 3 个私钥,并且要求至少有其中 2 把私钥参与签名才能动用,只有 1 把私钥参与签名则是无效的。

m-of-n 直译就是 n 个中的 m 个,因此 m<=n 就很好理解了。为什么只需要 m 把私钥参与就行了?答:应该是考虑到了 “灵活” 这一因素。要是每次都需要所有私钥才能签名,那么但凡有一把私钥外泄了,这个账户地址就用不了了😇

在 BitCoin Wiki 中是这样描述的,多重签名是指需要多个密钥来授权比特币交易,而不是一个密钥的单个签名。关于多签名的应用介绍,可查看 BitCoin Wiki 。

2  多重签名的作用

以下内容均来自 BitCoin Wiki

多重签名的三大作用:

  • 联名账户:把持有比特币的责任分给多个人,多方共同管理资产;
  • 提高安全性:避免单点故障,从而使钱包受到损害的难度大大增加;
  • 秘钥备份:m-of-n 的备份,丢失单个私钥不会导致钱包丢失。

2.1  联名账户

比特币网络上的标准交易可以称为 “单签名交易”,因为转账只需要一个签名 —— 与比特币地址相关联的私钥所有者的签名。然而,比特币网络支持更复杂的交易,这些交易在转移资金之前需要多个人的签名。这些通常被称为 m-of-n 交易。这个概念是,通过提供多个当事方的地址,比特币变得 “受限制”,从而需要这些当事方的合作才能对它们做任何事情。这些当事方可以是个人、机构或编程脚本。

2.2  提高安全性

与账户地址关联的私钥可以分布在多台机器上,从而消除了任何一台机器作为单一故障点的可能性,因为恶意软件和黑客不太可能感染所有这些机器。所需私钥数量越多 —— 即 m-of-n 中的 m 值越高 —— 攻击者成功盗窃您的资金就越困难,然而实际上使用该钱包也会变得更加繁琐。

要求 n 个人中参与签名的人 m 越多,钱包会变得越安全,但是使用该钱包会变得越繁琐。

针对一个 2-of-3 的多签名钱包,你可以将自己的私钥分布在台式机、笔记本电脑和智能手机上,其中任何 2 个私钥都是转移资金所必需的,但任何 1 个私钥的泄露都不会导致资金被盗。

2.3  秘钥备份

这段不知道是不是翻译器的问题,不过看原文也不太懂它到底是什么意思😇

将多个密钥存储在不同位置的 m-of-n 钱包中可以用作备份。

例如,在 2-of-3 的多重签名钱包中,一个密钥的丢失不会导致该钱包的丢失,因为其他 2 个密钥可用于回收资金。备份的冗余为 n 和 m 之间的差值 n-m 。

例如,3-of-5 多重签名钱包的冗余为 2,这意味着仍可从中恢复任何 2 个密钥的丢失。

个人理解:对于一个 m-of-n 钱包,丢了其中的 n-m 把私钥也不要紧,这个钱包还能继续用。但对于一个 n-of-n 钱包,只要丢了其中的 1 把私钥,这个钱包就不能用了,因为它的忍耐度是 n-n=0,即没有忍耐度。

3  比特币的多重签名

比特币协议为什么放弃了 ECDSA 多签名方案,选择了 Schnorr 多签名方案?

警告:有一点 ECDSA 多签名方案和 Schnorr 多签名方案的基础知识会没那么难受。

3.1  对比一

ECDSA 签名占据空间大,而 Schnorr 签名占据空间小,因为它支持 多重签名聚合

多重签名聚合:多个参与方可以基于一个聚合公钥共同生成一个聚合签名。

BCH 开发者 Lundeberg 提到,聚合签名 的优势在于,在一笔交易中,所有参与的输入只需要一个 合并签名 便能够完成。用一个签名替代多个签名的好处是显而易见的。这能大幅减少数据量。预计通过 Schnorr 签名,区块链的存储和带宽将至少减少 25%,从而使 BCH 网络运行得更快、更高效。同时,这也能够有效防止垃圾交易攻击。

攻击者试图通过占用比特币网络的交易空间来拥堵比特币网络,他们的策略之一是频繁地从多个来源发送交易,这些交易中包含了数十个签名。在使用 ECDSA 签名算法的情况下,这些签名会占用大量的空间。

Lundeberg 还指出,Schnorr 机制的另一个重要特性是其 抗篡改能力:即使在聚合签名的情况下,Schnorr 签名也是不可篡改的,除非所有的签名者共同重新创建一个新的签名。这增强了交易的安全性,确保了签名的完整性和交易的不可篡改性。

后文接着进行对比。

3.2  对比二

Schnorr 签名相比 ECDSA 签名具有:

  • 线性性
  • 不可延展性
  • 安全证明性
  • 效率高、占用空间少

3.2.1  线性性

Schnorr 签名是线性的,这一点非常重要。使用 Schnorr 签名的各方可以生成对其各自密钥的签名聚合。以这一特性作为基础,可以构建更高效和隐私性更强的区块链系统。

没有 Schnorr 签名基础的小白看不懂很正常。

3.2.2  不可延展性

ECDSA 签名存在一个可塑性问题,即不知私钥的第三方可以修改给定公钥和消息的一个有效签名,以生成另一个对同一私钥和消息的有效签名。这个问题在 SegWit 激活后得到了解决。BIP62 和 BIP66 文档中详细讨论了这一问题。而采用 Schnorr 签名则能够避免此类情况的发生。

简单来说,不知道私钥的攻击者声称自己知道私钥,且 ECDSA 签名还检测不出来。

3.2.3  安全性证明

在随机预言机模型中,Schnorr 签名的验证过程极为简洁,而 ECDSA 签名则不支持这种验证。Yannick Seurin 在 2012 年发表了关于 Schnorr 方案的完整性证明。该论文题为 On the Exact Security of Schnorr-Type Signatures in the Random Oracle Model,为 Schnorr 签名提供了精确的安全性证明。

随机预言机模型是一种在密码学中使用的理想化模型,用于分析基于哈希函数的密码协议的安全性。在这个模型中,预言机是一个黑盒子,它能够随机生成哈希值,这些哈希值与输入的消息之间存在一对一的映射关系,但预言机本身不泄漏任何关于其内部工作原理的信息。

3.2.4  效率高、占用空间少

与 ECDSA 签名相比,Schnorr 签名使得链上交易所占用的存储空间更少,从而释放了更多的存储资源。同时,确认交易所消耗的时间也显著减少。 


原文还提到了以下方案的具体操作:

  • ECDSA —— 单签名
  • Schnorr Signatures —— 单签名
  • Naive Schnorr Multi-Signatures —— 多签名 + 聚合 + 不安全
  • Bellare-Neven Multi-Signature —— 多签名 + 非聚合 + 安全
  • MuSig —— 多签名 + 聚合 +安全

MuSig 就是 Naive Schnorr Multi-Signatures 的升级版,它们都基于 Schnorr 签名。

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

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

相关文章

每日OJ题_完全背包④_力扣279. 完全平方数(一维和二维)

目录 力扣279. 完全平方数 问题解析 解析代码 优化代码&#xff08;相同子问题分析和滚动数组&#xff09; 力扣279. 完全平方数 279. 完全平方数 难度 中等 给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值…

百科不全书之 docker记录

docker记录 1 参考文件2. Docker简介与虚拟机的区别 1 参考文件 参考视频&#xff1a;B站【GeekHour】30分钟Docker入门教程: link 2. Docker简介 Docker是一个用于构建运行 传送 应用程序的平台。 与虚拟机的区别 虚拟机使用了一种叫做虚拟化的技术。每台虚拟机需要占…

固定测斜仪:工程观测的精密利器

在工程观测测量领域&#xff0c;固定测斜仪扮演着至关重要的角色。固定测斜仪&#xff0c;凭借其耐冲击型倾斜传感器、出色的可靠性、快速稳定的特点&#xff0c;以及简洁的安装和智能识别功能&#xff0c;已成为行业内重要工具。其输出信号为RS485数字量&#xff0c;可直接显示…

使用electron打包vuecli创建的项目

下面是我打包的时候才过的所有的坑&#x1f4a3;&#xff1a; 首先创建一个vue2的空项目&#xff0c;如果全局安装的vue-cli版本太低&#xff0c;低于3就无法使用vue create命令&#xff0c;必须使用uninstall将之前的卸载掉&#xff0c;在重现安装&#xff0c;之后的就是最近…

握手问题(蓝桥杯)

文章目录 握手问题【问题描述】答案&#xff1a;1204解题思路模拟 握手问题 【问题描述】 小蓝组织了一场算法交流会议&#xff0c;总共有 50 人参加了本次会议。在会议上&#xff0c;大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手&#…

Scrapy框架内存泄漏问题及解决

说明&#xff1a;仅供学习使用&#xff0c;请勿用于非法用途&#xff0c;若有侵权&#xff0c;请联系博主删除 作者&#xff1a;zhu6201976 一、问题背景及原因 官方文档&#xff1a;Debugging memory leaks — Scrapy 2.11.1 documentation Scrapy是一款功能强大的网络爬虫框…

SpringMVC 常用注解介绍

Spring MVC 常用注解介绍 文章目录 Spring MVC 常用注解介绍准备1. RequestMapping1.1 介绍2.2 注解使用 2. 请求参数2.1 传递单个参数2.2 传递多个参数2.3 传递对象2.4 传递数组 3. RequestParam3.1 注解使用3.2 传入集合 4. RequestBody5. PathVariable6. RequestPart7. Rest…

Oracle虚拟列测试

1、新建虚拟列 alter table t_ext add t_viral generated always as (user_id*10) virtual; exec dbms_stats.gather_table_stats( ownname >zxb, tabname >t_ext) 2、查看虚拟列 SELECT TABLE_NAME,COLUMN_NAME, DATA_TYPE, HIDDEN_COLUMN, DATA_DEFAULT FROM USER_…

k8s使用harbor私有仓库镜像 —— 筑梦之路

官方文档: Secret | Kubernetes ImagePullSecrets的设置是kubernetes机制的另一亮点&#xff0c;习惯于直接使用Docker Pull来拉取公共镜像&#xff0c;但非所有容器镜像都是公开的。此外&#xff0c;并不是所有的镜像仓库都允许匿名拉取&#xff0c;也就是说需要身份认证&…

23 种设计模式

设计模式 1、工厂方法 消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。 2、建造者模式 建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一…

【electron3】electron将数据写入本地数据库

安装 yarn add sqlite3 --save连接并调用数据库&#xff0c;创建表 createDB.ts文件内容 const sqlite3 require(sqlite3) const NODE_ENV process.env.NODE_ENV const path require(path) const { app } require(electron) let DB_PATH path.join(app.getAppPath(), /…

【Linux学习】Linux指令(四)

文章标题 &#x1f680;zip/unzip指令&#xff1a;&#x1f680;tar指令&#xff08;重要&#xff09;&#xff1a;&#x1f680;uname –r指令&#xff1a;&#x1f680;关机指令&#x1f680;几个常用操作 &#x1f680;zip/unzip指令&#xff1a; zip 与 unzip的安装 yum i…

Spring-dataSource事务案例分析-使用事务嵌套时,一个我们容易忽略的地方

场景如下&#xff1a; A_Bean 中的方法a()中调用B_Bean的b();方法都开启了事务&#xff0c;使用的默认的事务传递机制&#xff08;即&#xff1a;属于同一事务&#xff09;&#xff1b; 如下两种场景会存在较大的差异&#xff1a; 在b()方法中出现了异常&#xff0c;在b()中进…

Android 原生功能与 Vue 交互实现

前端用 Android webview 嵌入 vue 地址&#xff0c;如何在vue 页面中显示 Android 版本号 一.要在vue页面中显示Android版本号 从Android中将该信息传递给Vue应用程序。可以通过使用WebView的Java Bridge来实现此目的。这里是一些可能有用的步骤&#xff1a; 在你的Android代…

数据库主从备份

1、简介 数据库运⾏时&#xff0c;⼀些因素可能会导致服务运⾏不正常&#xff0c;⽤户访问数据受阻。对于互联⽹公 司&#xff0c;尤其是购物⽹站⽽⾔&#xff0c;这种情况造成的损失是⽆法估量的。因此&#xff0c;对数据库进⾏“备份” 也是必不可少的操作。当主要的数据库死…

MediaStream使用webRtc多窗口传递

最近在做音视频通话&#xff0c;有个需求是把当前会话弄到另一个窗口单独展示&#xff0c;但是会话是属于主窗口的&#xff0c;多窗口通信目前不能直接传递对象&#xff0c;所以想着使用webRtc在主窗口和兄弟窗口建立连接&#xff0c;把主窗口建立会话得到的MediaStream传递给兄…

Unity之XR Interaction Toolkit如何在VR中实现渐变黑屏效果

前言 做VR的时候,有时会有跳转场景,切换位置,切换环境,切换进度等等需求,此时相机的画面如果不切换个黑屏,总会感觉很突兀。刚好Unity的XR Interaction Toolkit插件在2.5.x版本,出了一个TunnelingVignette的效果,我们今天就来分析一下他是如何使用的,然后我们自己再来…

MAC电脑M1安装OpenCV

最近在学习研究OpenCV&#xff0c;奈何只有mac电脑。安装OpenCV感觉还是挺麻烦的&#xff0c;所以记录一下&#xff0c;难免以后会忘记。 安装OpenCV我参考的帖子 https://www.bilibili.com/read/cv23613225/ 一、首先安装Anaconda 目前已安装不做赘述 二、启动命令窗口 方…

ArcGIS无法链接在线地图或错误: 代理服务器从远程服务器收到了错误地址(验证服务器是否正在运行)。

这几天我们分享了&#xff01; 谷歌卫星影像图归来&#xff01;ArcGIS直连&#xff01;快来获取_谷歌影像lyr-CSDN博客文章浏览阅读666次&#xff0c;点赞11次&#xff0c;收藏9次。大概。_谷歌影像lyrhttps://blog.csdn.net/kinghxj/article/details/137521877一套图源搞定&a…

【办公类-22-04】20240418 UIBOT模拟上传每天两篇,获取流量券,并删除内容

背景需求&#xff1a; 前文制作了用UIBOT获取CSCN的3天、5天、7天、12天奖励流量券&#xff0c; 【办公类-22-03】20240417 UIBOT模拟上传获取流量券&#xff0c;并删除内容-CSDN博客文章浏览阅读253次&#xff0c;点赞6次&#xff0c;收藏3次。【办公类-22-03】20240417 UIB…