这篇文章反对激活比特币的Taproot升级,作者认为Taproot引入的“裸公钥”机制将使得比特币更容易受到量子计算攻击。文章详细解释了Taproot的原理、量子计算对当前加密算法的威胁,并指出Taproot在效率提升的同时牺牲了量子安全性,建议采取更具量子抵抗力的替代方案,并推动公众意识以应对潜在的危机。
Tradecraft/Freicoin 创建者的技术博客。
订阅即表示你同意 Substack 的使用条款,并确认其信息收集通知和隐私政策。
开发者:我们正在为比特币添加 Schnorr 签名!
我:太棒了。
开发者:我们还将通过将输出脚本隐藏在最常见的花费路径之后来增强隐私。
我:看起来很聪明。
开发者:你甚至可以使用环签名来证明大匿名集的成员身份!
我:哇,这太酷了!
开发者:而且我们正在安排让每个比特币在未来某个不可预测的日期被盗。
我:等等,什么?
开发者:……
“Taproot”是比特币开发者向社区提出的最新软分叉功能扩展,以供采纳。大多数读者可能熟悉这个提议,但我相信你们中有些人可能感到脱节。也许你是被朋友转发了这篇文章,但自己并不了解比特币领域的最新动态。或者你一直生活在与世隔绝的地方。无论如何,以下是简短总结:
比特币核心参考实现的开发者提议比特币网络采用一种新型脚本来保护比特币输出,这种脚本与旧的脚本系统相关,但具有许多显著优势。最重要的是,这种新脚本将古老的 ECDSA 签名算法替换为更简单、更易于实现且功能更强大的 Schnorr 数字签名方案。由于定义 Schnorr 签名的数学原理更简单,这使得许多多方或多密钥用例在签名时可以进行优化,从而产生更小的交易,而不会改变底层的加密安全性。当进行此优化时,多方/多密钥用例与典型钱包生成的单密钥签名变得难以区分。这使得具有定制签名规则的高级用户能够“藏身于人群中”,防止他们的自定义规则给交易打上水印。
像 2017 年激活的 Segwit 更新一样,Taproot 脚本中还添加了许多其他脚本改进,更多是因为它提供了机会,而非与 Schnorr 签名本身有任何关联1。一个用于更简单脚本更新的内部脚本版本,一个未来将用于实现委托和可能其他数字签名扩展的签名“附件”,一个新的签名验证操作码,以及各种脚本限制的放宽。
比特币开发者认识到,比特币上几乎所有的智能合约都采用“要么所有人同意,要么确保满足以下条件以解决冲突:_________”的形式,其中“所有人同意”部分可以表示为多方/多密钥 Schnorr 签名,并且大多数合约都是通过合作解决的2。为了利用这一事实,Taproot 优先考虑“所有人同意”的合作关闭,使其在链上看起来像一个单密钥签名,而没有公开可见的、未使用的冲突解决条件指示。
到目前为止,一切都很好。这些都是我过去倡导的事情,其中一些甚至是我提出的建议,或者与 Tradecraft/Freicoin 上已经激活的功能有关。我绝对支持比特币在上述方向上的增量演进。
现在,作为最终的效率提升,提议的 Taproot 扩展将“所有人同意”的多密钥聚合 Schnorr 公钥作为一个裸公钥(naked pubkey)放置在 Taproot 输出的 scriptPubKey 中。与 Tradecraft/Freicoin 的 MAST3 实现不同,也与我向比特币提议的 BIPs 98/116/117 不同,Taproot 的冲突解决机制通过将其提交到上述作为 UTXO 集一部分的裸公钥内部来隐藏。如果需要冲突解决脚本,则在花费时才揭示承诺。否则,合作关闭的结果看起来就像任何其他单密钥花费。这种巧妙的“黑科技”通过允许所有输出和合作花费在链上看起来相同来获得隐私优势,节省了空间,因为公钥不需要在花费见证中重复,并且允许一些非常酷的技巧,例如高效的非交互式环签名所有权证明,确认你拥有特定价值的输出,但无需透露具体哪个输出是你的。即使是那些没有“所有人同意”多方合作结果的少数脚本,也可以通过选择一个没有人知道其离散对数的随机“没什么可藏”的公钥作为其提交实际花费脚本的基础密钥来参与。
然而,让我重申:这种最终的效率提升和其他好处来自于在输出创建时在链上呈现一个裸露的 secp256k1 公钥,该公钥拥有底层比特币的绝对花费权限。而这,恐怕就是未来历史学家会指出一切都变得非常非常错误的地方。
不,我不是在谈论 Commodore 64 或 Apple ][,那些我童年时代的经典计算机。至少不是特指它们。我指的是计算机科学领域研究的机器,它涵盖了所有在牛顿力学或麦克斯韦电磁学经典定律支配的宇宙中可以构建的信息处理设备。5nm 硅晶体管,或者精密瑞士手表的发条机制——它们都具有相同的属性,这些属性在过去一个世纪的大部分时间里已被计算机科学家研究清楚。
经典计算机传输信息,存储信息,转换信息,并与其他数据进行比较以做出决策。数字计算机的基本单位是位,表示 1 或 0。任何事物都可以简化为数学模型,所有数学都可以用数字逻辑表示。通过数学,我们可以展示各种实际问题的固有难度,这意味着解决一般性问题所需的最小工作量。例如,如果你给我一个包含 1,000 个乱序整数的列表,我可以编写一个程序来对列表进行排序。但无论我如何构建程序,排序仍至少需要 10,000 步,因为排序的固有复杂度是 $O(n \cdot \log(n))$4。
有些令人惊讶的是,我们没有关于解决构成密码学基本原语的各种数论挑战的复杂度的严密证明。但我们有针对任何加密系统都有效的通用攻击,并且有充分的理由5相信对于当前使用的系统,没有更好的攻击存在。
对于像 SHA-256 这样的哈希函数,找到一个哈希到相同值(称为原像)的输入(不一定是相同的输入)需要 $2^N$ 次操作,而找到两个哈希到相同值(碰撞)的输入需要 $2^{N/2}$ 次操作,其中 N 是哈希函数的长度(SHA-256 的 N=256,因此得名)。
对于椭圆曲线数字签名,使用 Pollard 罗算法揭示给定公钥的私钥需要 $2^{N/2}$ 次操作,其中 N 是群大小的 $\log_2$。比特币的 secp256k1 曲线是一个将近 $2^{256}$ 个元素的群,因此以加密方式破解密钥大约需要 $2^{256/2} = 2^{128}$ 次操作。
经典物理定律、牛顿动力学和麦克斯韦电磁学,假设世界由在每个时刻都具有确定、真实、明确状态的事物组成。晶体管不可能同时处于信号发送和不信号发送状态,电容器不可能同时充电和放电,猫也不可能同时活着和死去。然而,在 20 世纪 20 年代,物理学家发现世界在亚原子尺度上并非如此整洁地运行,孤立粒子可能会表现出奇特的行为,它们同时占据两种或多种状态,并且只有在测量时才随机分配最终状态。关键的是,两个或多个经历这种量子模糊性的粒子可以相互作用,并导致它们的态相互纠缠,这意味着一个粒子的值取决于另一个尚未确定的值。
当然,物理学家和计算机科学家自然会想,是否可以建造利用这些量子特性进行计算的设备。答案是肯定的,事实证明,这类机器可以做经典计算机无法做到的事情。直觉并不太复杂:经典计算机通过机械方式计算答案。如果你正在寻找一个问题的解决方案,你需要检查每一个合理输入,直到找到你想要的答案。如果你足够聪明,你可以通过利用输入的结构来减少工作量,从而避免测试不必要的解决方案。密码学建立在那些我们认为除了尝试所有输入之外没有更快解决方法的难题之上6。
但量子计算机的工作方式不同。本质上,你将一堆量子比特,或“qubits”纠缠在一起,最初初始化为保存所有可能的值。然后你以某种方式约束它们纠缠态,以阻断任何错误的答案,这样它们所持有的任何值都是一个解决方案。然后你测量这些量子比特,迫使它们解析为单个值。但由于它们受到如此严格的约束,它们唯一能取的值就是你试图解决问题的正确答案。
例如,要解决 256 位椭圆曲线离散对数问题,需要几千个量子比特和大约一千亿次门操作——这是对量子比特施加的上述约束。让几千个量子比特稳定运行一千亿次门操作是一个巨大的挑战,但如果你能做到,那么你可以在几分钟或几小时内将 secp256k1 公钥逆向为底层的私钥。
哈希函数的情况明显更好。Grover 算法是寻找哈希函数原像或碰撞的最佳通用方法。它将寻找 SHA-256 原像所需的操作次数减少到 $2^{128}$,寻找碰撞所需的操作次数减少到 $2^{80}$。用 Anatoly Dyatlov 的不朽名言来说:“不算好,也不算糟。”安全降级到 80 比特的碰撞抵抗力,仅仅是回归到 Segwit 之前的 P2SH 安全级别,这在今天仍然被认为是安全的。
不。这是一种合理的默认直觉,因为量子计算机已经被谈论了几十年,而在这大部分时间里,其可见进展并不多。但现在,量子能力正以超指数级的速度快速发展,进展神速。
能够保持纠缠的量子比特数量正以指数级增长,大约每一年半翻一番。
量子计算机的错误率正以相似的速度下降,这意味着所支持的门操作数量也因此呈指数级增长。
在理论方面,量子计算机算法应用于密码分析问题的效率正在不断提高。任何资源需求的减少都使得破解实用加密系统所需的资源减少,从而使实用效能的估计日期更近。
这些领域中的每一个都在以指数级的速度提升能力,从而共同促成了超指数级的进步。我们距离使用当前算法攻击 secp256k1 所需的规模只剩下大约六次翻倍。按照每 18 个月翻倍的速度,这可能最快在十年末就能实现。而且,为了防止你认为我们已经处于采用曲线的末端,请考虑以下几点:
在 2019 年和 2020 年,IBM 和 Google 首次展示了所谓的量子霸权。他们使用量子计算机(大约 50 个量子比特大小)来计算经典方法无法解决的问题的解决方案。解决的问题无疑是玩具问题,但不是玩具规模的实例。量子计算机现在是解决实际问题的实用手段,这引发了对更好的量子计算机军备竞赛的大规模投资,包括新进入该领域的参与者。资金和兴奋程度是过去从未见过的,虽然这并未改变根本挑战,但它确实意味着研究不再受资源限制。众人拾柴火焰高,人多眼杂无漏洞。审慎地预期未来几年进展会加速而非减缓。
这种情况与过去十年人工智能和深度学习的发展惊人地相似。大约在 10 年前的 2011 年,谷歌通过花费数百万美元训练计算机识别 YouTube 上的猫视频,推动了该领域的发展。在我撰写本文的 2021 年,特斯拉正在向测试版用户推出完全自动驾驶,“深度伪造”正在破坏我们对音频/视频证据的信任。不要低估一个成长型行业在 10 年内可以取得的成就。
与此同时,自 Segwit 合并到比特币核心以来,已经过去了近 5 年,Segwit 的采用率仍然徘徊在 50% 左右。不要错误地高估我们行业中新技术部署和采用的速度。我稍后会回到这一点。
大规模的有效量子计算机将破解椭圆曲线离散对数。任何暴露的公钥都将变得脆弱,并可以在短短几分钟或几小时内被解析出其底层的私钥。这种量子计算机只会削弱哈希函数的有效性。足以推动有序采用后量子密码学,但不足以立即导致资金被盗。
如 BIP-341 的脚注所述,2019 年约有 625 万个比特币受到已知公钥的保护。因此,如果有足够大的量子计算机能够执行 secp256k1 离散对数计算,那么这 625 万个币就容易立即被盗。这大约占当时所有比特币的三分之一。
这很糟糕。真的,真的很糟糕。最坏的情况是,如果所有 625 万个暴露的币突然同时被转移,那将是历史上最大的盗窃案,并彻底摧毁公众对比特币的信心。更有可能的是,它会随着时间的推移缓慢发生,并从那些所有者不太可能注意到其被盗的、较旧的、未识别的币开始。尽管如此,总会有人最终注意到,一旦消息传开,就会引发市场恐慌。正如 Taproot 提案的一位开发者所说:
我认为这些数字证明了“公钥哈希可以防御量子计算机”的论点是(目前)站不住脚的。即使你的币被 PKH 结构加密,如果 37% 的供应处于风险之中,你也无法声称拥有多少安全性。
- Pieter Wuille (2019 年 3 月 19 日)
我对这条推文感到失望。首先,它混淆了两个不同的问题:从比特币早期历史中恢复丢失或长期休眠的币,以及通过地址/公钥重用盗窃大量近期比特币。只有大约 175 万个比特币通过区块链上暴露的公钥而变得脆弱,其中大部分是早期的独立挖矿币或在 P2SH 广泛采用之前的多密钥脚本。超过 400 万个脆弱的币是通过重用密钥或脚本实现的,这是一种更近期的做法,也是某些托管服务不幸的常见做法。任何盗窃都是不好的,但在少数早期采用者(他们十多年没有移动过币,可能完全丢失了密钥)的币被盗,与突袭广泛使用的托管钱包或交易所的冷钱包之间,存在着务实的区别。前者令人遗憾但可以承受,后者将是一场我们可能无法恢复的公众信任危机。不过幸运的是,目前流通中的比特币的密钥和脚本重用恰恰是我们可以解决的问题。
其次,它没有明确区分两种可能的解释:
我不想给推文作者带来恶意,考虑到该通信平台的固有局限性。此外,我与 Pieter 合作多年。我 99% 确定他属于(1)类。但令我无法调和的是,一个相信(1)的人怎么能同时倡导一种技术,这种技术要求用户选择加入量子漏洞,以获得 Schnorr 签名的好处。
作为开发者,我们有责任尽我们所能预防、阻止或以其他方式减轻这种不可避免的币被盗的下游影响。这意味着创建或维护抗量子解决方案以实现币的所有权,并推广阻止暴露量子漏洞的托管实践,例如在创建时而不是花费时揭示输出的公钥。
是的,这意味着每个 Taproot 输出我们将额外增加 32 字节——或者,如果我们想积极应对后量子哈希输出宽度,则可能额外增加 48 字节。这也意味着我们将无法在没有笨重的零知识哈希原像证明的情况下获得超紧凑的环签名。但这些是我们为了对抗量子对手的安全而应该愿意付出的代价。
但 Taproot 却走向了另一个方向。在 Taproot 模型中,我们为了这些小小的效率提升和时髦的加密特性而放弃了量子抵抗。我相信,这类似于明知全球变暖的危险,却在 2021 年决定建造新的燃煤电厂。
我们可以,也应该做得更好。
用量子安全的变体替换哈希函数很容易——只需增加宽度即可。从 SHA-256 切换到 SHA-512 足以满足需求。尽管替换 P2WPKH 或 P2WSH 输出中使用的哈希函数相对简单,但它不会取得太大成就,因为链最终依赖于使用 SHA-256 的默克尔哈希树。将整个链迁移到 SHA-512 将需要使用像 Forward Blocks 这样的东西,但它尚未完全准备好。尽管如此,需求并没有那么紧迫:80 比特的安全性在可预见的未来仍然足够。
替换椭圆曲线数字签名更为重要,但不幸的是,目前可用的选项较少。有一些成熟的后量子数字签名方案,如基于哈希的 Lamport 签名,但它们体积庞大且没有附带的零知识证明系统。在 NIST 后量子密码学 (PQC) 标准化项目中,正在开发和相互竞争一大批后量子数字签名方案。其中一些具有比特币开发者会寻找的 Schnorr 签名的即插即用替代品的正确属性,例如紧凑的密钥和/或签名大小、构建多密钥签名方案的能力以及附带的零知识证明系统。但它仍然是一个快速发展的领域,有许多选项且没有明确的赢家。由于共识层数字签名方案不能轻易更新,因此审慎的选择是等待 PQC 标准化决赛入围者的表现。
所以,实际上,目前还没有现成的技术解决方案。我们需要资助用量子安全替代方案替换 secp256k1 和 SHA-256 的工作,例如数字签名的 PQC 决赛入围者之一,以及用于哈希树替换的基于 SHA-512 的 Forward Block 链。但与此同时,我们需要与现有服务运营商合作,改革或删除导致公钥暴露的现有协议,并移动易受攻击的旧比特币。我们需要开展一场公共服务活动,以提高对漏洞的认识,并帮助人们确保自己的币免受量子对手的攻击。
但最重要的是,我们需要停止让情况变得更糟。当你发现自己身处困境时,第一条规则是:停止挖坑。我们不应该按规定部署 Taproot,或任何其他需要在链上使用裸公钥的技术。
比特币中存在严重的现有量子漏洞,而拟议的 Taproot 扩展只会使情况变得更糟。我们不应该允许 Taproot 在比特币上激活,或者如果它激活了,我们应该劝阻其使用。
我们应该投入时间和资源开发后量子密码学紧凑型数字签名和零知识证明系统,这些系统可以替代椭圆曲线数字签名。我们应该继续研究从基于 SHA-256 的默克尔树和承诺结构过渡的机制。
同时,虽然我们应该将普遍更好的 Schnorr 签名引入比特币,但我们这样做时需要在一个不会使比特币生态系统更容易受到量子对手攻击的提案背景下进行。
然而,新的签名验证操作码 CHECKSIGADD 是通过 Schnorr 签名的属性实现的。
冲突解决机制的存在是必不可少的,否则将出现普遍性问题。但如果特定合约的冲突解决机制存在且坚不可摧,那么任何一方都不会从避免合作关闭中获得任何好处,因为合作关闭通常涉及较小的交易,因此对所有方评估的费用较少。
默克尔化备选脚本树(Merkleized Alternative Script Trees)。Tradecraft/Freicoin 的 Segwit 实现允许输出的创建者承诺任意数量的可能花费路径,每个路径有不同的脚本,但他们在花费时只需要揭示其中一个。
读作“大 O N log N”,这意味着 N 个整数至少需要 $N \cdot \log_2[N]$ 次单独的比较和交换操作才能完成。因此,对于 N=1,000,我们看到对 1,000 个随机整数的列表进行排序至少需要 $1000 \cdot \log_2[1000] \approx 10,000$ 次比较和交换操作。
这是一个谎言;我们不知道。没有人能够证明将整数分解为其素数成分实际上是困难的。很可能存在一种简单的方法可以做到这一点。但在半个世纪的尝试之后,名誉和财富都将属于任何可能找到解决方案的人,但没有人找到。所以我们假设在经典计算机上分解大合数是一个难题,然后围绕它构建系统。
差不多;哈希函数就是如此。素数分解和椭圆曲线离散对数都有比暴力破解更快的解决方案。但解决这些问题的难度似乎与搜索空间的大小以一种实用的方式相关。例如,Pollard 的 rho 算法为离散对数提供了平方根级别的搜索空间缩减,但自 1975 年发布以来,我们还没有找到更快的通用算法。所以我们认为在 256 位曲线上进行 ECDL 需要 $2^{256}$ 的平方根,即 $2^{128}$ 次经典计算机操作。
- 原文链接: freicoin.substack.com/p/...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!