Schnorr签名如何影响比特币的隐私性和可扩展性
扫描二维码
随时随地手机看文章
早在2013年9月,一位匿名作者在bitcointalk.org网站上发表了一篇文章,建议可以通过联合签名来提高隐私性和可扩展性。多个输入可以共享一个签名,授权代币的集体移动。这样做,人们就有了合并交易的经济动机,从而减少了区块链的宝贵空间,使交易中的付款人和收款人更加模糊,从而提高了隐私。
从那时起,比特币开发者社区就一直在热烈讨论这个想法,而一种相对晦涩的密码签名方法被推到了这场运动的最前沿。这种方法称为Schnorr签名。它们是由密码学家 Claus Schnorr创造的,并在1989年的一篇论文中首次向公众发布。尚不清楚Satoshi是否考虑过用这种方法签名,但这可能并不重要,因为Schnorr在2008年拥有了这种方法的专利。
背景
比特币区块链中的每个块包含一个或多个交易。交易由一个要使用的现有输入列表、一个要创建的输出列表以及输入的所有者批准将其比特币转移交易的证明组成。
在比特币中,大多数输入都需要一个数字签名形式的密码证明才能使用。这就有可能导致会有许多不同类型的支出标准,这被称为任何人都可以支出的产出。
快速介绍数字签名
目前最流行的签名算法是Rivest-Shamir-Adleman (RSA)和Digital Signature Algorithm (DSA)。RSA是为加密和签名而构建的,而DSA最初只是为签名而构建的,但后来也被修改为支持加密。这两种算法依赖于不同的密码假设:RSA依赖于因式分解,DSA依赖于离散对数问题。
这两种技术都需要公钥对和私钥对。私钥用于对消息签名,而公钥用于验证签名。关键是在技术上会涉及大量的数字来进行计算。这些计算中可能值的一组数字称为字段或组。
目前,比特币使用椭圆曲线数字签名算法(ECDSA),这是DSA的一个改进,用于椭圆曲线。该曲线定义了用于计算的数学组,它规定了密钥格式和密码术操作的一组值。ECDSA的优点是由于椭圆曲线加密的效率,您可以用更小的密钥大小实现与RSA相同的安全性。 这使得ECDSA成为比特币的明智选择,因为较小的密钥总体上占用的空间更小,导致数据更少,操作更快。
Schnorr签名
Schnorr签名可以适用于任何满足离散对数问题的数学组。幸运的是,比特币中的椭圆曲线secp256k1符合这一特性。这意味着在比特币中,同样的私钥和公钥可以与Schnorr签名一起使用。Schnorr签名比ECDSA签名有更多优点:
1. Schnorr签名更小。大多数ECDSA签名是71或72字节。所有Schnorr签名都是64字节。
2. 他们允许更紧凑的多重团体。比特币目前的m-of-n签名方案需要m个签名的表示和验证。Schnorr multisig只需要一个签名就可以代表所有m方。
3. 跨多个联合签名!我们不仅可以将一个多sig输入的签名压缩为一个签名,还可以将多个输入的签名联合为一个签名。当与CoinJoin相结合时,这可以使交易更便宜、更私密。即使没有CoinJoin,这也可以大大减少交易的大小和成本。将Schnorr签名引入比特币的主要工程师Pieter Wuille估计,只要让用户在不同输入之间联合签名,比特币区块链就能缩小25-30%。
4. 没有脚本的脚本!通过巧妙地使用远远超出本文范围的Schnorr签名,我们实际上可以通过使用一个特殊的过程来创建所需的签名来实现不同的开销条件。利用Schnorr签名的线性特性——没有脚本的脚本,以特定的方式组合部分签名,可以满足开销标准。Blockstream的安德鲁·波尔斯特拉(Andrew Poelstra)对这种可能性做了一些伟大的研究。
5. Schnorr签名被证明是不可塑的。ECDSA签名可以在不访问创建它们的私钥的情况下更改。当签名被包含在生成交易id时,这对比特币来说是一个大问题。隔离证人通过分离签名(也称为证人)减少了这个问题,但拥有一致的签名仍然很好。
有什么缺点吗?
Schnorr签名强调了当前ECDSA系统已经存在的一个弱点。这些签名方案使用一个nonce值,这个值只能使用一次,必须随机选择,或者至少是不可预测的,否则攻击者可以对私钥进行反向攻击。2011年,索尼(Sony)就发生过这种著名的情况,当时PS3上使用的ECDSA方案显示,根本不随机选择这个nonce。结果,一个团体发布了索尼的私钥,允许用户安装自己的操作系统。
使用ECDSA,由于不存在联合签名,nonce可以根据正在签名的内容进行确定。这就是比特币没有问题的地方。然而,当引入联合签名时,我们将需要一个真正的随机熵源来创建签名。问题是,当多个参与方联合起来创建签名时,恶意参与方可以使用相同的nonce和相同的输入启动对两个多签名的请求。它们会在请求完成之前中止请求,但是可能已经创建了正确的条件来反向工程受害者的私钥。
接下来是什么?
Schnorr签名实现的一个障碍是它们还没有标准化。Bitcoin Core 开发者Pieter Wuille,为单一签名的实现提供一个标准化草案。该草案目前正在比特币社区接受同行审查。
联合签名另一个复杂性问题是,使用精心设计的nonces可能会受到攻击。Blockstream在这个问题上做了一些有趣的工作,他们提出被称为MuSig的解决方案。MuSig目前通过在签名创建过程中添加更多的轮数来解决这个问题,以确保没有人能够通过操纵nonce值来伤害其他人。目前,MuSig协议需要与联合签名进行三轮协调。第一轮要求每个人都生成惟一的输入,这些输入将哈希值并在一起,以确保从不使用相同的nonce来签署相同的消息。
目前正在进行优化联合签名的研究。Blockstream的希望是,他们将能够通过使用零知识证明,以确保适当的熵,将沟通从三轮减少到两轮。Schnorr签名似乎不太可能在今年进入比特币市场,但它们正在稳步前进,如果运气好的话,有望在2020年把比特币的下一个区块奖励减半。