Schnorr签名与比特币隐私的必然性
数字签名是在线主权的支柱。公钥密码学在 1976 年的出现,为创建全球通信媒介、互联网以及全新的货币形式比特币铺平了道路。虽然从那时起公钥加密的基本属性并没有太大变化,但现在密码学家的工具箱中有许多开源数字签名方案。
在中本聪开始构思比特币时,要考虑的关键设计选择之一,就是在这个开放的、无许可的金融系统中使用哪种签名方案。要求很明确;中本聪需要一种使用广泛、易于理解、足够安全、轻量级,最重要的是开源的算法。在当时可用的所有选项中,他选择了最符合该标准的选项:椭圆曲线数字签名算法(ECDSA)。
当时,ECDSA 由 OpenSSL 本地支持,OpenSSL 是由一群赛博朋克老手开发的一组开源加密工具,用于改善在线通信的隐私性。相对于其他流行的方案,ECDSA 的好处是具有更精简的计算要求和更短的密钥长度;这些都是数字形式的货币的有用属性。同时,它还提供了与 RSA 等方案相当的安全性:例如,256 位 ECDSA 密钥与 3072 位 RSA 密钥具有相同的安全性,但其大小只是后者的一小部分。
Pieter Wuille 和其他人在一条被称为 secp256k1 的改进曲线(如椭圆曲线)上的努力使得比特币的 ECDSA 更快、更有效。然而,ECDSA 仍然存在固有的缺陷,人们始终有理由去取代它。经过几年的研究和实验,出现了一种旨在提高比特币交易隐私性和效率的新签名方案:Schnorr 数字签名方案。
在本文中,我概述了 Schnorr 签名的多种实现及其相应的好处。然后,我探索了 MuSig,这是一种新的多重签名标准,可作为 Taproot 等新型比特币技术的构建模块。最后,我描述了 Schnorr 的完全实现版本将如何打破区块链分析中使用的试探,同时帮助在比特币的主层(main layer)建立一个强大的费用市场。
SCHNORR 签名的兴起
尽管 Schnorr 数字签名方案比 ECDSA 具有许多优势,但它肯定 不是新的。它由德国密码学家和学者 Claus-Peter Schnorr 发明,在 20 世纪 80 年代,他在法兰克福大学担任教授和研究员。他提出的签名方案是 David Chaum、Taher EIgamal、Amos Fiat 和 Adi Shamir 的研究和工作的整合。然而,在发布之前,Claus Schnorr 为他新发明的方案申请了多项专利,多年来,该方案一直禁止其直接使用。
十分有趣的是,ECDSA 的前身 DSA 是 ElGamal 和 Schnorr 方案的混合体,该方案仅用于规避 Claus Schnorr 的专利。事实上,在 Schnorr 的美国专利发布仅两个月后,DSA 的创始人美国国家标准与技术研究院(NIST)也为其解决方案申请了专利。这里有一些基本的赛博朋克历史:在那之后,Claus Schnorr 对他的专利采取了防守措施,并直接回应了码农朋克邮件列表(原始赛博朋克邮件列表的一个分支)里对他的批评者。
2008 年,在 Schnorr 签名方案推出近二十年后,Claus Schnorr 的专利已经过期。巧合的是,2008 年也正是我们最喜欢的赛博朋克——中本聪——正在实现比特币的那年。尽管在当时本来可以使用 Schnorr 签名,但它们还尚未被标准化或广泛运用,这可能是中本聪用 ECDSA 来替代的动机。虽然密码学家和数学家经常将其描述为极差(atrocious),但 ECDSA 已经(现在仍然)被广泛使用,它在当时为比特币提供了更安全的选择。
比特币上的 SCHNORR
十年过去,Schnorr 方案在今天不那么深奥了,像ed25519这样的标准化实现成为一些竞争币的流行选择。关于可能在比特币上实现 Schnorr 的非正式谈话可以追溯到 2014 年 BitcoinTalk 上的这个话题,但到了 Pieter Wuille 撰写Schnorr BIP?的时候,经过多年的研究和实验,这项提案才得以正式化。本 BIP 草案描述了潜在 Schnorr 实现的规范和技术细节,该实现将比 ECDSA 具有以下优势:
安全性证明:当使用足够随机的哈希函数(随机预言模型),并且签名中使用的椭圆曲线离散对数问题(ECDLP)足够困难时,Schnorr 签名的安全性很容易证明。ECDSA 不存在这样的证明。
不可延展性:ECDSA 签名具有内在的延展性,这可能使第三方在无法访问私钥的情况下改变现有的有效签名并双花资金。这个问题在BIP62中正式讨论过。相比之下,Schnorr 签名可证明是不可延展的。
线性:Schnorr 签名具有这样一个明显特性,即多方可以协作生成对其公钥总和有效的签名。这是各种用于提高效率和隐私的更高级构造(如多签名和其他智能合约)的构成要素。
Schnorr 提供的安全性证明及其不可延展性保证与 ECDSA 相比具有明显优势。只有在这两个好处的基础上才能证明软分叉是合理的。然而,Schnorr 的线性属性格外令人兴奋。实质上,这使得一笔多重签名(multisig)交易中的多个签名者能够将他们的公钥组合成一把代表该团体的聚合密钥;这一属性被称为密钥聚合(key aggregation)。
虽然融合密钥的能力可能听起来微不足道,但我们不应该低估密钥聚合的好处。由于 ECDSA 本身不支持多重签名,因此它必须通过被称为Pay-to-ScriptHash (P2SH)的标准化智能合约(是的,比特币也有智能合约)来在比特币中实现 。这使得用户可以添加被称为质押权(encumbrances)的支出条件来指定资金的使用,如「只有 Alice 和 Bob 双方都对此消息签名的解锁余额才能使用。」
P2SH 的第一个问题是它需要知道参与 multisig 的所有签名者的公钥,这不是一个有效率的系统。聚合这些密钥将允许更有效率的验证,因为网络只需要验证一个密钥,而不是 n 个密钥。这也意味着更少的区块链足迹、更低的交易成本和改良的带宽。
P2SH 的第二个问题是它提供的隐私保证非常少。根据 BIP 13 的规定,P2SH 交易需要使用以 3 号开头的不同地址。这使得区块链观察者不仅能识别网络中的所有 P2SH 交易,而且还能准确指出多重签名内的身份。
在上面的例子中,网络将意识到(1)多重签名交易的存在,(2)它由多少个签名者组成,以及(3)签名者是谁。这不利于操作安全性,特别是对于像 2FA 这样的用例。这不利于隐私。
另一方面,密钥聚合允许签名者保持匿名,并且不会通过泄露解锁余额所需的密钥来损害操作安全性。最重要的是,密钥聚合使得多重签名可以与常规交易无法区分。
比特币中 Schnorr 的第一次迭代将淘汰当前与 ECDSA 一起使用的 OP_CHECKSIG 和 OP_CHECKMULTISIG 系列操作码,以支持一个名为 OP_CHECKDLS 的新类别。我这里不介绍太多细节,DLS 代表的是离散日志签名,它允许使用更少的操作码更有效地验证签名。
在 2018 年初,Gregory Maxwell、Andrew Poelstra、Yannick Seurin 和 Pieter Wuille 就一项名为MuSig的基于 Schnorr 的新多重签名方案发表了一份白皮书。自 MuSig 发布以来,他们一直在努力将提出的多重签名方案转换为可用的代码。
在密钥聚合的背景下,关于 MuSig 最有趣的事情之一,是在区块链之外创建私人智能合约的可能性。从本质上讲,MuSig 使多重签名参与者能够将质押权附加到链下聚合密钥,这不需要比特币的共识规则来知道它。
2018 年 12 月,安东尼·汤斯(Anthony Towns)是第一个为激活 Schnorr 提出半正式提案的核心开发者,该提案发布在比特币开发邮件列表中。我预计在接下来的几个月里会有更多关于潜在软分叉的讨论。
总结一下:比特币中 MuSig 的第一次迭代将原生支持密钥聚合,这可以立即(1)提高多重签名的隐私,(2)提高交易验证的效率,(3)通过消除 ECDSA 的固有问题来提高安全性,(4)启用像 Taproot 这样的智能合约解决方案,我计划之后讲一下这一点。
但这只是一个开始。
交叉输入聚合:隐私的下一步
如上一节所述,密钥聚合对于花费单个输入的多重签名是一个非常有用的功能。由于比特币交易通常不止一个输入,因此可以利用 Schnorr 的未来迭代来创建交互聚合签名(IAS)方案,其中交易里的所有输入与单个签名同时使用。
再次,签名者之间的交互完全是在链下的,但现在,单个签名可用于花费一笔交易的所有输入。每个输入仍然有自己的公钥,但可由 Schnorr IAS 使用:
Greg Maxwell,Pieter Wuille,Anthony Towns 等人一直致力于 Taproot 智能合约方案的进化,以促进这一功能。他们将此方案称为广义 Taproot 或G'root,它可以在将来更容易地将密钥聚合转换为交叉输入聚合。
与密钥聚合一样,交叉输入聚合进一步提高了比特币交易的效率。但是,最重要的是,它可以在比特币的基础层上实现强大的隐私保护机制。
交叉输入聚合最令人兴奋的方面之一,是它可以改善比特币上的CoinJoin交易。提一下背景,CoinJoin 是一种隐私保护技术,其中多个发送者和接收者在单笔交易中组合。目标是使_区块链观察者_难以把特定的发送者和接收者联系起来,从而使 CoinJoin 内的实体能够声称合理的拒绝。
这项技术最初由 Greg Maxwell 于 2013 年在 BitcoinTalk 上提出,此后通过各种服务向用户提供,包括 JoinMarket、SharedCoin、ShufflePuff、DarkWallet 和 CoinShuffle。CoinJoin 的各种变体,例如 Wasabi 钱包中使用的 Chaumian CoinJoin 方案,在原始模型之上做了极大的改进。然而,由于匿名爱公司,它仍然依赖足够多的用户来混淆他们的余额。
今天 CoinJoin 的另一个问题是整个交易类型的可识别性(和潜在的审查)。考虑到今天区块链分析中最常用的试探是密切关注特定输入以确定两个或更多地址是否属于同一实体。例如,如果 Alice 发給 Bob 1.982723 BTC,则区块链观察者可以跟踪该特定输入的小数以绘制交易图,或者跟踪历史细目和 UTXO 所有权的更改。
为了防止这种情况,CoinJoin 实现需要共同的价值面额,CoinJoin 中的每个人都发送相同的金额。例如,Wasabi 钱包的用户在 100 名参与者的 CoinJoin 交易中发送相同的 0.1BTC 面额。虽然仍难以确定特定发件人和收件人之间的联系,但区块链观察者可以寻找共同面额来识别 CoinJoin 发生的情况,并建议其客户审查所涉及的所有实体。
交叉输入聚合可以为这种情况提供帮助,因为它在协议层引入了额外的混淆机制。从本质上讲,交叉输入聚合可以构建基于 Schnorr 的 CoinJoin 交易,其中 n 个签名者在外人看来就像是正常的单签名者交易。这也可能使 CoinJoin 更容易在流行的钱包中实现,而无需繁重的工程设计,这可能会增加网络的整体匿名性,或使用此技术的用户数量。
共同面额问题可以通过其他技术进一步解决,例如Pay-to-EndPoint (P2EP),它将中本聪早期的隐私工作(参见P2IP)与 CoinJoin 相结合,发送者和接收者都为交易提供输入。这种新技术值得一篇独立的帖子,但你可以在这里、这里和这里阅读更多相关信息。
P2EP 是向后兼容的,当与 Schnorr 结合使用时,它可以在比特币的基础层中实现足够的隐私。
一石二鸟
我们可以合理地假设比特币的大规模使用取决于其隐私保障的强度。与此同时,闪电网络的普及及其自身支持私人支付的潜力,也使得最后的比特币被挖后对链上结算的未来需求产生了不确定性。因此,对隐私的需求和在没有区块奖励的情况下比特币的长期可持续性可能是今天比特币最令人担忧的两个问题。值得庆幸的是,Schnorr 启用的隐私机制可以同时解决这两个问题。
我花了数千小时回顾了各种复杂的隐私技术,包括 Ring Signatures,Confidential Transactions,Bulletproofs,zkSNARKs,STARKs 和 MimbleWimble 的不同实现。虽然其中一些技术已经足够成熟,可以在比特币的基础层上实现,但它们仍然具有独特的风险和权衡。正如您可能已经听说的那样,比特币是不喜欢硬分叉的,这使得我们很难想象任何这些技术都可以实现的情况。
人们似乎在反复担忧使用同态加密或非交互式零知识证明系统,因为它们阻止了比特币货币基础的完全可听性(audibility)。换句话说,当对交易价值进行编码时,很难核实比特币的供应上限是否实际上是 2100 万 BTC。同样,当隐藏交易金额时,通胀错误和双重支付变得难以确定。这是一个相当大的权衡,推动在比特币的基础层实现最新隐私可能会分裂社区。
但是,如果比特币的基础层获得_足够的_隐私,甚至不需要实施这些技术呢?
Schnorr 绝对可以帮到你。如果大多数比特币交易都是将 Schnorr 的交叉输入聚合功能与 P2EP 结合使用,那么通过简单地查看区块链,几乎不可能对特定发送者和接收者进行去模糊处理。比特币的供应仍然是可审计的,但其交易也将提供更强大的隐私保障。
如果存在对隐私的需求,也可以合理地假设比特币用户和企业可能都想要被动地参与 CoinJoin 交易,并让他们的钱包在后台不断混合他们的余额。在这种情况下,对隐私的需求直接转化为链上交易费用的增加。与 SegWit 一样,用户最有可能首先支持该技术的采用,但企业必须在某些时候效仿以保持重要性。
随着时间的推移,采用这些技术将使区块链分析过时,并有效地从比特币企业所需的 AML/KYC 程序中移除,就像实物现金一样。当您将现金存入您的银行账户时,银行将不会检查钞票上是否有药物痕迹,并在发现药物的情况下阻止您的存款。随着区块链分析的扩散,加上没有 Schnorr 的 CoinJoin 等技术的缺点,没有理由认为比特币已经做到这一点。
当在特定地址和 UTXO 上执行 AML/KYC 变得无关紧要,并且焦点转向个人而非余额时,比特币企业将完全接受隐私。事实上,我怀疑当这种情况发生时,隐私和可互换性将成为未来比特币企业价值主张的一个组成部分。
最终,在比特币的基础层上采用更强大的隐私机制将进一步增强其用户的权力,同时,有助于在最后的比特币被挖后创建一个充满活力的交易费市场。我的猜测是,这一切都始于 Schnorr 的激活,而每个人似乎都参与其中。