大多数 Ledger Nano 所有者在某些时候开始怀疑是否有可能定制他们的助记词。 有些人可能会更进一步,尝试在恢复过程中使用随机选择的单词。 在这种情况下,在确认最后一个词后,他们几乎肯定会看到以下消息:
"Recovery phrase is invalid, retry"
这是否意味着无法使用您自己的自定义单词集创建新钱包?
好消息是:这完全可行,尽管存在一些限制。但让我们从头说起。
第一个限制是要求所有单词必须位于 BIP39 标准列表中
(比特币改进提案 - 第 39 号)。您可以在 Wikipedia 相关文章 中详细了解比特币改进提案。
BIP39 只不过是一组 2048 个单词,其选择方式使得每个单词的前 4 个字母都是唯一的。此规则甚至适用于 3 个字母的单词。
此属性使它们在创建多单词序列时更容易记住,这正是您的助记词。
第二个限制是对序列最后一个单词的要求。这是确定的特定校验和 由所有其余序列元素组成,您不能自己选择它。这正是我们看到的原因 每当我们尝试输入随机选择的单词作为 Ledger Nano 的助记词时,都会出现错误消息。 通常,满足校验和条件的不仅仅是一个单词;然而,通过简单的猜测找到有效答案的机会非常小。满足校验和条件的单词数量与助记词单词总数严格相关。对于 24 个单词的助记词(最安全的选项),总是有 8 个可能的单词可以用作校验和。 因此,在 2048 年,从 2048 个单词的 BIP39 集合中随机抽取有效单词的几率恰好为 8,即仅为 0.39%。 难怪您会看到一条错误消息。
那么我们如何为我们自己选择的序列找到正确的校验和呢? 例如,我们随机选取一组符合 BIP39 标准的 23 个单词:
每个单词都有一个索引,它是一个基于字母顺序的数字。从 0 开始编号非常重要。然后每个索引必须表示为二进制值。由于 BIP39 列表包含 2048 个元素,因此每个单词索引必须由 11 位组成。 由此我们发现:
在下一步中,我们连接所有索引,保留它们的出现顺序。这给了我们一个 253 位二进制序列:
我们用我们自己选择的额外 3 位来补充所获得的结果。
您还记得我们说过 24 个字的助记词恰好有 8 个可能的校验和结果吗?
数字 8 只是这 3 位的简单结果。
我们只需在这里输入 000、001、010、011、100、101、110 和 111 即可获得所有 8 个结果。
对于这个例子我们选择: 000.
我们将其连接到最后,得到一个 256 位二进制字:
下一步是计算此类准备好的二进制数据的 SHA256 哈希值。
SHA256 算法(安全哈希算法,256 位输出)是区块链技术的重要组成部分。
有关 SHA256 的更多信息,请参阅 Wikipedia 上的 SHA-256 算法介绍。
作为此计算的结果,我们得到以下十六进制单词:
下一步是从上面的结果中提取前 8 位。因此,我们采用前 2 个十六进制字符 - 27.
它们对应于:
我们再次使用之前选择的相同 3 位。这次我们将它们连接到提取的二进制字符串的前面。 因此,我们得到:
这是二进制值 39。这是我们要查找的校验和字的 BIP39 索引。 不要忘记索引编号是从“0”开始的。因此,如果您使用从“1”开始的标准计数的 BIP39 单词列表, 那么实际索引号将为 40。 我们在上找到正确的索引 BIP39 列表 我们得到这个词: agent 最后包含我们自己选择的 23 个单词的 24 个单词的助记词是:
对于其余 3 位组合,最后一个校验和字为:


