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

目录

摘要

[1 什么是多重签名?](#1 什么是多重签名?)

[2 多重签名的作用](#2 多重签名的作用)

[2.1 联名账户](#2.1 联名账户)

[2.2 提高安全性](#2.2 提高安全性)

[2.3 秘钥备份](#2.3 秘钥备份)

[3 比特币的多重签名](#3 比特币的多重签名)

[3.1 对比一](#3.1 对比一)

[3.2 对比二](#3.2 对比二)

[3.2.1 线性性](#3.2.1 线性性)

[3.2.2 不可延展性](#3.2.2 不可延展性)

[3.2.3 安全性证明](#3.2.3 安全性证明)

[3.2.4 效率高、占用空间少](#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 签名。

相关推荐
应长天17 小时前
密码学(斯坦福)
密码学
Turbo正则2 天前
量子计算基础概念以及八大分支
密码学·量子计算
网安INF12 天前
公钥加密与签名算法计算详解(含计算题例子)
网络·算法·网络安全·密码学
电院工程师13 天前
基于机器学习的侧信道分析(MLSCA)Python实现(带测试)
人工智能·python·嵌入式硬件·安全·机器学习·密码学
电院工程师15 天前
SM3算法C语言实现(无第三方库,带测试)
c语言·算法·安全·密码学
小七mod16 天前
【BTC】密码学原理
web3·区块链·密码学·比特币·btc·肖臻·北大区块链
电院工程师21 天前
轻量级密码算法PRESENT的C语言实现(无第三方库)
c语言·算法·安全·密码学
电院工程师22 天前
轻量级密码算法CHAM的python实现
python·嵌入式硬件·算法·安全·密码学
电院工程师22 天前
SM3算法Python实现(无第三方库)
开发语言·python·算法·安全·密码学
网安INF23 天前
SHA-1算法详解:原理、特点与应用
java·算法·密码学