目录
[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 签名。