注:本文为技术公司Blockstream研究主管Andrew Poelstra在纽约MCC会议上的演讲。他演讲中,他从密码中学习了数字签名的安全性,并指出签名机制的设计在理论和实际应用上完全不同。因此,用户应该选择警惕许多声称能够创造神奇效果的项目。同时,在他看来,比特币的发展速度是惊人的,所以从技术的角度来看,适当地放慢脚步并没有错。
以下是演讲全文:
我没有准备PPT。我想让这次演讲尽可能不那么技术化,我试图剥夺我在屏幕上写方程式的权利。为什么我演讲的主题是加密货币中的一切都是奇怪和困难的。从数学和科学的角度来看,什么是密码学?在实践中,新手如何炒硬币?
加密
从历史上看,密码学的目的是加密,就像试图想出一些随机的东西一样。这里的安全很简单:如果你有钥匙,你可以解密一些东西,用安全模型或风险模型来描述它的想法实际上是毫无意义的。
在现代,密码学取得了很大的进步,包括零知识证书。计算机程序证明了零知识证书。这些程序只解释输入状态,而不泄露输入细节。
数字签名与加密有关。签名类似于加密两个密钥,一个公钥和一个私钥。任何拥有公钥的人都可以加密数据,任何拥有解密钥或私钥的人都可以解密数据。这意味着加密数据可以通过不安全的渠道发送。
数字签名
数字签名恰恰相反—只有有私钥的人才能生成签名,只有有公钥的人才能验证签名。如果你想讨论这里计划的安全性,那就更难实现和定义了。我想谈谈学术背景下的数字签名,然后我想谈谈随机数字生成的实际问题,然后如果我有时间,我想谈谈如何将其扩展到多个签名设置。
没有密钥的人不能伪造信息和公钥签名。从学术上讲,它很难形式化。这里提到的形式化是指定义清晰的状态描述。
多年后,我们多次尝试找出这些定义——我们得出结论,如果没有多种概率时间算法可以主导,数字签名方案是安全的。我们将绝对排除任何算法的可能性(只要边界合理),就不能伪造。即便如此,在定义时也很难证明它的安全性。在现实生活中,一个知道钥匙的人应该能够生成签名。那么,你如何清楚地排除一切,但仍然包含特殊情况呢?
假设你在一场比赛中有一个对手,你的对手不能赢得下一场比赛:我随机拿了一把私钥和一把公钥,我把公钥给了你的对手。如果他能生成签名,那么签名是伪造的,这个计划是不安全的。
直观地说,这是合理的。你生成了一个没有私钥的随机密钥。对手唯一知道的关键是公钥。然而,这个想法是错误的。这个计划的问题是对手有很多公钥签名,类似GPG区块链上可能有电子邮件或过去的比特币交易签名。这把公钥包含了一堆签名。现有的签名方案对可以看到公钥的对手是安全的,但对看到签名的对手是不安全的。这不应该是它的运作方式,但现实仍然是如此。这很难。有一种竞争硬币有这个问题。许多人声称他们可以解决不可能的问题。但大多数人都在对你撒谎,这是这次演讲的真正目的。
假设对手更强大,他可以向挑战者索要信息,而挑战者必须签署信息。现在,当我们给出几乎所有可能的信息时,对手不仅可以伪造信息。我们想提供尽可能多的信息。因此,在任何信息上签名都足够了。当对手伪造信息时,他必须在新信息上签名。
这安全吗?这在传统的安全概念下是安全的,在信息攻击的选择下也被称为不可伪造的存在。但在一个更复杂的系统中,由于某些原因,这是不安全的。我们在比特币中发现,我们排除了使用现有签名并调整它的可能性,同时允许对手只在一个新消息上签名。这在模型中没有被捕获。一旦新闻签名完成,谁关心对手可以为同一消息输出不同的签名?
我们使用的比特币ECDSA和txid基于这些签名,攻击者有能力改变签名,允许他们改变交易txid,这将保持交易的有效性,但会引用任何参考txid因为txid它具有延展性。因此,我们需要一个更强的模型。
我们现在需要一个对手。我们说,如果它在某个信息上签名,信息可能是一样的,但签名必须是一样的。这就是所谓的强制签名。这安全吗?
假设你有一个签名计划—假设你在使用它Schnorr这些签名特别容易受到攻击,比如1989年的原始签名Schnorr算法攻击者得到了你的签名。他没有调整签名,而是通过保留信息的有效性而更改公钥来调整签名。他将获得公钥验证的签名,并生成与第一个公钥相关的签名。通过比特币,您可以在一定程度上生成与代数相关的密钥,例如bip32分层确定性生成的密钥。
理论上,有些人可以生成签名,其他人可以获得签名交易,并在另一笔交易中创建签名,攻击不同密钥的代数关系。
在实践中,这对比特币来说并不是一个问题,因为基于比特币的设计,在比特币交易中签署的数据不仅包括所有关于交易的细节,还包括以前的交易(及其公钥)。所以结果是你得到了一个看起来像的Schnorr签名的东西(公钥除外),但事实证明,签名信息和同一签名密钥的零知识签名比强签名更安全。这比我想说的要复杂得多。
在每一步中,我都在加强安全的概念,完全消除伪造的可能性。我们花了一些时间来探索设计,研究伪造及其实际表现。对于签名,我可以在舞台上描述一场安全比赛,而不用到处使用图表和箭头。多重签名更为复杂。
当你谈论零知识证书——包括零知识证书、模拟器和所有不同的规则——试图证明这些复杂系统的独特性,部署更理想的模型,直到你得到一些特定的东西。然而,在现实生活中,证明的安全性具有巨大的价值。
可证明的安全性
接下来,我想谈谈可以证明安全的概念,尽管我告诉过你这很难。其中之一是随机生成的概念。我将从安全定义转向安全系统部署的实际操作。
基于ECDSA或Schnorr,生成这些签名需要生成一致的随机数据。一致的随机性意味着您可以选择所有可能的随机数-实际上在0和固定的大素数之间。如果您不能随机生成数字,请在多个签名中重复使用相同的数字或相同的数字nonce,然后你的货币就会被盗。这种情况已经发生过好几次了,比如有人用这个小问题解决了ps3.2012年这种情况发生在比特币新手如何炒币的视频中,一些安卓钱包被重复使用nonces,并生成了一个糟糕的随机数生成器。最后,许多人失去了密钥和硬币。
并不是nonce重用。随机的nonces它存在,但软件生成nonces在某种程度上,有偏差。例如,前几个总是0。即使它与随机数量无关,只要有足够的签名,它也足以泄露您的私钥。因此,我们有这些签名方案在学术模型中被证明是安全的,但它们总是需要一致的随机性。直觉告诉我们,随机性不能被猜测,但随机性和一致性没有区别。区分两者足以打破学术证书。在实践中,你会丢失密钥和硬币。
总结
这些东西既困难又微妙。你不应该对声称能创造神奇事物的新项目感到兴奋,而应该怀疑。比特币发展迅速。我们需要放慢脚步,保持警惕。