种子和恢复码

HD钱包是一种非常强大的机制,可以管理从单个种子派生出的许多密钥。如果您的钱包数据库曾经损坏或丢失,您可以使用原始种子重新生成钱包的所有私钥。但是,如果其他人获取了您的种子,他们也可以生成所有的私钥,从而能够窃取单签名钱包中的所有比特币,并降低多重签名钱包中比特币的安全性。在本节中,我们将讨论几种恢复码,旨在使备份更加简便和安全。

虽然种子是大型随机数,通常为128至256位,但大多数恢复码使用人类语言单词。使用单词的主要动机之一是使恢复码易于记忆。例如,考虑使用十六进制和单词编码的恢复码,如示例5-1所示。

示例5-1。一个以十六进制和英语单词编码的种子

Hex-encoded:

0C1E 24E5 9177 79D2 97E1 4D45 F14E 1A1A

Word-encoded:

army van defense carry jealous true garbage claim echo media make crunch

可能存在一些情况,记住恢复码是一个强大的功能,比如当您无法携带物理财产(比如写在纸上的恢复码),以免它们被外部可能窃取您比特币的当事人扣押或检查。然而,大多数情况下,仅依赖记忆是危险的:

  • 如果您忘记了恢复码并且无法访问原始的钱包数据库,您的比特币将永远丢失。

  • 如果您死亡或遭受严重伤害,您的继承人没有访问您原始钱包数据库的权限,他们将无法继承您的比特币。

  • 如果有人认为您记住了一个恢复码,可以让他们访问比特币,他们可能会试图强迫您透露该代码。 截至撰写本文时,比特币贡献者詹姆逊·洛普(Jameson Lopp)记录了100多起针对比特币和其他数字资产的潜在所有者的物理攻击,包括至少三起死亡案件和许多事件,其中有人遭受折磨、被扣为人质,或者家人受到威胁。

即使您使用设计用于轻松记忆的恢复码类型,我们强烈建议您考虑将其写下来。

截至撰写本文时,有几种不同类型的恢复码正在广泛使用:

BIP39

作为过去十年生成恢复码最流行的方法,BIP39涉及生成一个随机的字节序列,为其添加一个校验和,然后将数据编码成一系列12到24个单词(可以根据用户的母语进行本地化)。这些单词(加上一个可选的密码)经过一种键拉伸函数处理,输出被用作种子。BIP39恢复码有几个缺点,后来的方案试图解决这些问题。

Electrum v2

在Electrum钱包(版本2.0及以上)中使用的这种基于单词的恢复码比BIP39具有几个优点。它不依赖于一个全球性的单词列表,该列表必须由每个兼容程序的每个版本实现,而且其恢复码包括一个版本号,提高了可靠性和效率。与BIP39类似,它支持一个可选的密码(Electrum称之为种子扩展),并使用相同的键拉伸函数。

Aezeed

在LND钱包中使用的这种基于单词的恢复码比BIP39有所改进。它包括两个版本号:一个是内部版本号,消除了升级钱包应用程序(如Electrum v2的版本号)时的一些问题;另一个版本号是外部的,可以递增以改变恢复码的底层加密属性。它还在恢复码中包含了一个钱包生日,即用户创建钱包数据库的日期的参考。这允许恢复过程找到与钱包关联的所有资金,而无需扫描整个区块链,这对于注重隐私的轻量级客户端特别有用。它支持更改密码或更改恢复码的其他方面,而无需将资金转移到新的种子——用户只需备份一个新的恢复码。与Electrum v2相比的一个缺点是,与BIP39一样,它取决于备份和恢复软件支持相同的单词列表。

Muun

Muun钱包使用的是非单词代码,该钱包默认要求多个密钥签名来进行交易,必须与其他额外信息一起使用(Muun目前提供在PDF文件中)。这个恢复码与种子无关,而是用于解密PDF中包含的私钥。虽然与BIP39、Electrum v2和Aezeed恢复码相比,这种方法相对麻烦,但它支持新技术和标准,这些技术和标准在新钱包中变得越来越普遍,如闪电网络(LN)支持、输出脚本描述符和小脚本。

SLIP39

SLIP39是BIP39的一个继任者,由一些相同的作者编写,它允许使用多个恢复码来分发单个种子,这些恢复码可以存储在不同的地方(或由不同的人保存)。当您创建恢复码时,可以指定需要多少个来恢复种子。例如,您创建了五个恢复码,但只需要其中三个来恢复种子。SLIP39支持可选的密码,依赖于一个全局的单词列表,并且不直接提供版本控制。

一种类似于SLIP39的新的分发恢复码系统在书写过程中被提出。Codex32允许只使用打印说明书、剪刀、精密刀、黄铜卡扣和笔即可创建和验证恢复码,再加上隐私和一些空闲时间。另外,那些信任计算机的人可以使用数字设备上的软件立即创建恢复码。您可以创建多达31个恢复码,并将它们存储在不同的地方,指定需要多少个恢复码才能恢复种子。作为一个新的提议,Codex32的详细信息在本书出版前可能会发生重大变化,因此我们鼓励对分布式恢复码感兴趣的读者调查其当前状态。

恢复码密码

BIP39、Electrum v2、Aezeed 和 SLIP39 方案都可以与可选的口令一起使用。如果您唯一保存口令的地方是您的记忆中,那么它具有与记忆恢复码相同的优点和缺点。然而,还有一组针对口令在恢复码中使用方式的特定权衡。

这三种方案(BIP39、Electrum v2 和 SLIP39)在用于防止数据输入错误的校验和中不包括可选的口令。每个口令(包括不使用口令)都将产生一个用于 BIP32 密钥树的种子,但它们不会是相同的树。不同的口令将产生不同的密钥。这可能是积极的或消极的,这取决于您的观点:

• 积极的一面是,如果有人获取了您的恢复码(但没有您的口令),他们将看到一个有效的 BIP32 密钥树。如果您为这种可能性做好了准备,并向非口令树发送了一些比特币,那么他们将窃取那笔钱。尽管有些比特币被盗通常是一件坏事,但它也可以提醒您恢复码已被泄露,从而让您调查并采取纠正措施。为相同的恢复码创建多个口令,所有这些口令看起来都有效,这是一种合理的否认的类型。

• 消极的一面是,如果您被迫向攻击者提供恢复码(带有或不带有口令),但它没有产生他们期望的比特币数量,他们可能会继续试图强迫您,直到您给出另一个口令,以访问更多的比特币。设计合理的否认意味着没有办法向攻击者证明您已经泄露了所有信息,因此即使在您给出所有比特币后,他们可能会继续试图强迫您。

• 另一个负面因素是错误检测的减少。如果在从备份恢复时输入了略有错误的口令,您的钱包将无法警告您有关错误。如果您期望有余额,当您的钱包应用程序为重新生成的密钥树显示零余额时,您会知道出现了问题。然而,新手用户可能会认为他们的钱永远丢失了,并做出愚蠢的事情,比如放弃并丢掉他们的恢复码。或者,如果您实际上期望零余额,那么在您犯错后的几年里,您可能会继续使用钱包应用程序,直到下次使用正确的口令进行恢复并看到零余额。除非您能够找出先前犯下的拼写错误,否则您的资金将不复存在。

与其他方案不同,Aezeed 种子加密方案对其可选口令进行身份验证,并在提供错误值时返回错误。这消除了合理的否认,增加了错误检测,并使得可以证明口令已被泄露。

许多用户和开发人员对哪种方法更好存在不同意见,有些人坚决支持合理的否认,而其他人则更喜欢增加安全性,以便新手用户和受压迫者。我们认为,只要恢复码继续被广泛使用,这种辩论就会持续下去。

Last updated