作者:shinobimonkey

来源:https://groups.google.com/g/bitcoindev/c/gtxpSxgG7E4

如今有许多拟议的机制,要帮助真正的主人(在量子攻击出现之后)找回钱币,办法是应用一种额外的限制,指定一种新的秘密值知识证据、加上私钥的签名,还有一种 承诺-揭晓 方案,以允许承诺一笔花费脆弱钱币的交易,然后要求这样的承诺获得一定数量的区块确认,让所承诺的交易成为在共识上有效的交易。

如果糊里糊涂地用在某一种地址类型上,这样的方案就无法覆盖所有其主人依然持有私钥的钱币。我认为,通过层层叠加多种复原方案,并允许使用其中任意一种方案来满足花费的阈值要求,那么 100% 的覆盖是可以实现的,只要我们接受额外一个安全假设:你的 公钥/内部脚本路径 应然保持机密。

还应该考虑到这样一个事实:绝大部分没有自己运行全节点的用户,会泄露主公钥给第三方后台服务端,以查询余额。

为了处理这个 xpub 泄露问题,可以为每一种地址类型定义一组新的派生路径,限定只能使用 Electrum 协议来查询余额。通过在每次查询时只使用一个地址,就可以避免暴露这组地址的 xpub,并创造出一种路径,让终端用户不知不觉也可能完成过度。新的钱包升级可以直接开始使用新的派生路径生成地址、使用新的协议查询地址。

我能想到的唯一困难在于开箱即用的中间件,用来帮助钱包软件连接到用户的节点的那些,它们是围绕 xpub 的假设开发出来的,并使用 Bitcoin Core 的内部钱包。在绝大部分情况下,这几乎可以肯定不会造成什么问题,因为用户连接的是自己的节点,但哪怕在少数情形下,用户使用这些软件时连接的是第三方的节点,可以让这些软件适配到使用(比如说)Electrum 协议。我不认为这会是重大的阻碍。

缓解了 xpub 暴露问题之后,现在要解决的是不同复原机制之间的相互作用。

基于 Xpub 派生的复原方法

这能够覆盖所有基于 BIP 32 的钱包,无论使用什么派生路径(?)。所以,这种复原方法应该能够覆盖使用传统派生路径生成的所有地址(哪怕暴露了公钥),也能覆盖使用新的派生路径、并使用 Electrum 协议保护起来的地址。

对于任何哈希化地址类型(P2PKH、P2SH、P2WPKH、P2WSH),只需要派生证据就足够了,而且正如 conduition (在回应我的初版提议时)指出的,加上内部公钥,就可以额外覆盖到 P2TR 地址(只要它们没使用 NUMS 点作为内部公钥)。

这本身就保证了,任何使用这些地址类型的用户,都可以生成一个复原证据,无需在实现对这些地址类型的额外限定条件的分叉激活之前采取任何预防措施。(不过,还要指出的是,这些证据的体积是非常大的,这跟下面要说的 “带状态证据” 有关)。

带状态的时间戳证据

在我记得以前,这种想法就已经出现很多次了,但从来没有得到细致的描述。简单来说,其基本元素是一个签名,来自现有的约束条件,签名的对象是新的身份认证机制(用于量子安全方案的一个公钥),以及一个时间戳,证明这个见证是在某个时间点以前产生的(这个时间点是预先选点的,在可用的量子计算机产生之前,因此可以作为一个超时条件)。

因此,它可以简单归结为两点:(1)一个对新的 公钥/身份认证承诺 的签名;(2)时间戳。给定 ZKP(零知识证据)的可能体积,以及基于哈希函数的签名可以优化到大约 580 字节,我认为依然值得研究,看看带状态证据可以做到多小巧、在区块空间上多高效。

这种方法也不要求预先采取行动,但在没能及时生成证据,或者在截止时间后弄丢了证据的情况下,HD 复原以及 承诺-揭晓 迁移方法还是能够帮助用户。

承诺-揭晓 迁移

对于任何哈希化地址类型,旧的 承诺-揭晓 迁移方案 要求一个对交易的加密承诺得到区块链确认,确认达到一定数量之后,明文的交易就可以认为是共识上有效的了。使用新的派生规范,就可以让公钥保持机密;但哪怕是传统路径派生的地址,也可以采用这种方法。

再说一次,根据 coinduition 在回复我的初始提议时指出的,内部公钥为攻击者无法访问的秘密值奠定了基础,可以用作 P2TR 密钥花费的额外有效性条件,使得 P2TR 也能使用 承诺-揭晓 迁移。任何使用 承诺-揭晓 的 tapscript 都能工作,只要这些 tapscript 路径从未在相同的内部变量(比如公钥)下重复使用过。

总结

我认为,我已经介绍了所有隐式的假设,也回应了 conduition 的评论。

除非我完全遗漏了什么,或者忽视了重要的实现细节(比如 conduition 在回应我的提议时纠正的那些),我认为,结合多种复原机制,可以 100% 覆盖当前网络上的所有地址类型,除了 P2PK 输出以及定制化的裸脚本;只多了一个安全性假设:保持公钥机密(如前所述,这可以通过一个几乎无痛的幕后迁移来实现,无需重走生成一个新的主密钥、完全迁移资金的流程)。