作者:Antoine Poinsot
“有密码学意义的量子计算机(CRQC)” 是比特币的悬而未决的生存威胁。围绕解决办法的讨论,引发了关于比特币 —— 既是一种共识系统,也是一种货币 —— 的本性的根本问题。围绕这个问题的讨论中出现了一些令我担心的趋势,所以我自然而然认为要多写一篇博客。
我认为,有一些因素让比特币鹤立于技术相似的竞争对手。显然,市场也是这么认为的。其中的原因可以归结为网络效应:人们认为比特币是有用的,是因为其他人也认为比特币是有用的。而这种有用性的基础就是可靠性:绝大部份人觉得,以比特币来存储价值,比使用其它任何竞争性替代方案都更安全。 我认为这种预期很大程度上跟现实相符,但比特币应对 CRQC 威胁的方案可能完全改变这一点。
两种应对量子威胁的方案,可能会严重削弱对比特币的信任,使之与山寨币没有区别。第一种是放任大量用户的钱币被盗,因为这将是对网络效应的致命打击。 另一种,则是大量经济主体协调起来,预先冻结其他人的钱币(认为如果 CRQC 会成熟,则这些钱币会成为一种系统性的风险),因为这会直接影响比特币的价值立场。需要强调的是,后者并非仅仅是一种意识形态立场:难以没收正是人们最初认为比特币有价值的全部原因。打破这种信任,最终就会失去网络效应。
这些失败情形,也许只有在比特币经济体的成员都认为 CRQC 即将到来、绝大部分比特币用户都迁移到后量子输出类型,才能避免。因此,一种迁移策略应该尽可能说服更多用户在 “量子恐慌日”(QP-day?)之前升级。这是一项艰巨的任务,因为大部分比特币用户都不是活跃的比特币狂热爱好者或者公司。他们不会紧跟最新的开发进度、很少移动自己的钱币,甚至很少升级自己的保管装置。这意味着,如果 CRQC 最终会成熟,那么迁移必须在这段还未确定(它会成熟)的时间内完成,因为一旦我们确定它会来了,也许已经太晚了、无法让那些消息不灵通的比特币用户(长尾用户)迁移了。
(译者注:密码学文献常常使用 “Q-day” 来表示量子计算机成熟的时间点;作者在这里借用了这层意思,还增加了一层意思:在量子计算机成熟以前,就会出现一个事件,使人们极度恐慌、开始迁移。)
更难搞的是,抗量子的(PQ)签名方案自身可能用起来更麻烦, 而且许多支撑今日的比特币用法的常见密码学操作都将无法再用 1。这是一种典型的集体行动难题:每个人都能从每个人都迁移这件事中获得极大的好处(在 CRQC 会成熟的情形中),但每个人单方面迁移的好处是很小的 2,而相关的成本很高。有鉴于此,我认为可以将迁移策略分成两类:让个体承担成本的策略,以及,集体承担成本的策略。
在第一类策略中,我会算进 P2QR 3,也就是 只能 使用 PQ 签名方案的输出类型。这种策略最大化了个体收益(尽管也是有限的 2),如果 CRQC 到来,它能保证钱币的主人可以在任何存活的链上拿回自己的钱币(的控制权)。它也是唯一能够实现完全迁移的方案,可以避免 “营销性升级” —— 一个服务供应商采用名义上的 PQ 迁移输出、但依然让用户依赖于 EC 安全性假设 4。当然,这种方法的缺点就是,个人用户必须承担升级的全部代价,并且是从远远没有人知道这到底有没有必要的时候开始。 因此,这种策略无法解决 “长尾” 问题。
在第二类策略中,我会算进 P2TRv2 5,也就是一种 Taproot 克隆体,但叶子脚本可以使用一种 PQ 签名方案,所以用户可以向自己的钱币添加一个 PQ 逃生舱,当下辖无需付出任何代价;日后,当 CRQC 成熟时,再通过禁用这种输出的椭圆曲线密码学(EC)操作,来完成迁移。因为这种输出用起来(相比 Taproot)不会更贵,所以钱包软件可以默认使用这种输出类型,在接下来大约 10 年中逐渐迁移长尾用户 6 。随着时间推移,更多关于 CRQC 的信息出现,可以引导我们完成后续的步骤。
这种策略接受了这样一个事实:我们就是还没有 EC 签名的良好替代品。想要得到 CRQC 抗性,需要在现有的工作流和应用场景中加入大量摩擦(甚至需要完全放弃这些场景),这可能会让用户完全不迁移,直到 CRQC 的威胁变得真实。这样的话,就不会给长尾比特币用户足够多的时间在 QP-day 之前迁移,因此并没有消除风险。因为比特币仍将系统性依赖于 EC 安全性,除非绝大多数用户迁移,所以,P2TRv2 利用 Taproot 的隐藏花费路径的特性,以消除个人选择迁移的成本,并将迁移的完成留给后续的共识变更。
而且,即使我们有替代 EC 密码学的好选择, P2TRv2 策略依然在两个方面值得称赞。其一,它推迟了采用会给比特币带来许多负面影响的步骤,直到 CRQC 的威胁少一些捕风捉影 7。即使你已被说服 CRQC 就要到来,这一点也重要,因为采取更多人同意的第一步可能会让迁移更快开始。其二,它让嫁接新的签名方案到广泛的协议、标准和应用场景的工作可以跟迁移活动并行推进。
为什么不能两个都要?从表面上看,它们是互补的:可以负担得起成本的人,可以马上迁移到更加麻烦 的 PQ 方案;而倾向于增加逃生舱的用户也可以满意。选择越多越好嘛!其实不尽然。其中一种选择对于迁移的成功极为关键,因为它带来迁移长尾用户的机会;另一种则更多是锦上添花。反过来,在 P2TRv2 中禁用 EC 操作这件事越明确,P2QR 策略就越是成为区块空间的浪费,而不是两全其美。而且,让 P2TRv2 输出类型成为迁移策略的 “谢林点(Schelling point)” ,实际上就会确保 EC 操作在这种输出中禁用:否则每个活跃的用户都可能丢失资金。因此,让 P2QR 成为 P2TRv2 的辅助方案,只会带来更多风险、削弱 P2TRv2 作为谢林点的意义。
(译者注:“谢林点” 以博弈论学者托马斯·谢林命名,指的是在没有沟通的前提下诸多个体独立而自发走向的结果。)
基于 P2MR 输出类型,人们提出了多种替代性的策略。首先是 BIP 360 的第 8 次修订版, P2MR 是一种 Taproot 克隆体,但不允许密钥路径花费。在此,我要讨论我看到的在 P2MR 支持者中最受欢迎的策略:部署 BIP 360 以及一种 PQ 签名方案作为 Script 操作码。其中的动机与 P2TRv2 是类似的:让用户提前准备一种 PQ 花费路径,同时依然能够使用便宜的 EC 花费。主要区别在于,移除了密钥路径花费,以尝试缓解 “长程” 攻击。不幸的是,这种区别会让迁移贵出 15% 8,并且会提前放弃 Taproot 的激励结构(本身是 Taproot 升级的关键特性)。我认为这种取舍是错误的。
(译者注:在比特币和量子计算机攻击的背景下,“长程攻击” 指的是椭圆曲线公钥早已暴露、因此量子计算机一经成熟就可以发动攻击的情形;而 “短程攻击” 指的是公钥暴露的时候已经是其锁定的钱币被花费的时候,量子计算机需要与钱币的主人赛跑,一旦钱币主人的花费交易被区块确认,量子计算机就攻击失败了。)
长程攻击和短程攻击的区别,是围绕 PQ 迁移策略的辩论的核心。我认为,绝大部分分歧,都可以归结为我们是否认为这种区分是有意义的。从比特币个人用户的角度看,显然这个区别意义重大:如果你的公钥本身就成了一个秘密值(不该暴露的东西),那么在一个全球公开的网络中分享它显然会增加你的风险。但这并不意味着,在将比特币系统当成一个整体时,这个区别也是有意义的。在广泛采用的工作流中,你的公钥已经被假设是公开的了。用户信任离散对数问题是困难的,所以愿意从硬件签名器传出 xpub 到联网设备上、愿意从钱包软件分享自己的 xpub 或输出描述符给钱包服务商、愿意分享 xpub 给一个收款方、愿意公开一个静默支付地址或 paynym 、愿意复用地址以及从一个哈希化公钥的地址中花费,等等。在这些情形中,是不是有一些用户在花费钱币之前只暴露公钥的哈希值,对于比特币系统的 PQ 迁移是不相关的。
因此,为了完全迁移比特币系统、不再依赖于 EC 安全性,P2MR 策略也需要像 P2TRv2 一样,补充一个日后禁用 EC 操作的变更。但除了让用户选择迁移输出类型的成本变高,这也会激励用户出于别的目的而使用它。所以,这就更难置信:(1)首先,有足够多的用户会迁移过去:(2)EC 禁用会真正发生,因为它会带来没收的顾虑。出于这些理由,以及我不认为应该在 CRQC 成熟之前就让比特币降级,我认为 P2TRv2 比 P2MR 更好。
结论是,PQ 迁移的目标,应该是让我们所知的那个比特币在离散对数假设被打破的情境下存活。允许广泛的盗窃、或允许没收,都不是什么有趣的目标,会让比特币变成另一种山寨币。主要的挑战在于,每个比特币用户都能从其他每个人都迁移中获得很大的好处,而迁移对用户个人来说是很昂贵的,而且需要在我们可以合理确定 CRQC 威胁即将成熟之前很久就开始。P2TRv2 策略解决这个问题的方式是,将选择新输出类型的用户在短期内的迁移成本,转化为几乎所有比特币用户在中期乃至长期协调更新共识规则的成本。而 P2TRv2 的变种则允许用户避免在花费之前在链上暴露公钥;在我看来,是作出了更差一些的取舍。
- - -
1. Mikhail Kudinov 和 Jonas Nick,“为比特币考虑基于哈希函数的签名方案” ↩
2. 为什么哪怕别人都不迁移,我还是应该迁移?一种回答是,我们可以让这样的钱币在一个从比特币的 UTXO 集冷启动的山寨币上可以使用,但这也无法确保这些钱币 —— 无论在哪条链上存活下来 —— 会有价值。这也护士了许多用户可能考虑的另一种选项:直接卖掉(一部分)钱币来对冲 CRQC 风险。 ↩ ↩
3. 我在这里表示坚定支持 P2QR(中文译本),Pieter 以前也建议过类似 P2QR 的事物,在此处。 ↩
4. 因为 “后量子” 现在是一个很好的营销标签,而且跟迁移有关的绝大部分成本都不是来自换用一种输出类型,而是升级你的工作流到新的签名类型,从而不再依赖 EC 安全性;所以就有可能发生这种事。 ↩
5. 最初由 Matt Corallo 在这里提出(中文译本)。 ↩
6. 这是有可能的,因为绝大部分钱包都是用单公钥的花费条款,并且遵循 BIP 32 ,从一个主密钥确定性地生成许多密钥。这个 BIP 32 主密钥又是从一个种子使用哈希函数中派生的(而种子则是使用 BIP 39 助记词中生成的)。这使得有可能使用从 BIP 32 种子中安全地派生出 PQ 密钥,哪怕 EC 密码学已被攻破。 ↩
7. 这第一步当然有 一些 缺点,比如引入了一种新的输出类型。但这些缺点,相比于其它策略,是微不足道的,而且在 CRQC 永不出现的情形中也会有好处,比如让更多用户迁移到 Taproot 。 ↩
8. 计算基于 2 个输入、2 个输出的交易,使用典型的单公钥花费条款。 ↩