正如上一篇文章所述,加密钱包通常会将一系列单词(称为种子短语)转换为私钥。这些单词来自一个包含 2 11 = 2048 个单词的列表,这些单词经过精心挑选,独特且易于记忆。您可以在此处找到该列表。通常,一个种子短语包含 12 个单词。例如:
奖品, 不同, 年, 布, 要求, 野生, 清洁, 工具包, 手推车, 敲门, 生物, 以上
每个字携带 11 位信息,因此总共代表 132 位,即 128 位内容和 4 位校验和。
现在假设你记住了12个单词,但后来你记不住它们的正确顺序。那么你需要尝试大约五亿种排列方式,因为
12!=479,001,600。
然而,并非所有这些排列都同样可能正确。例如,你调换几个单词的顺序,远比完全打乱整个列表的可能性大得多。所以,你应该从记住的顺序的单词列表开始,然后从初始序列开始,逐渐探索更远的地方。用数学术语来说,你应该按照凯莱距离的顺序,尝试对记住的序列进行排列。
一个包含 12 个元素的列表,由两个元素的转置组成,一共有 66 种排列。所以,如果你开始的序列是
abcdefghijkl
那么你可以尝试bacdefghijkl或ebcdafhghijkl之类的命令。一共有 66 种可能性,因为从 12 件物品中选择 2 件物品有 66 种方法;你要选择要交换的两件物品。
如果上述方法无效,您可以接下来探索与您记忆中的排列凯莱距离为 2 的排列。现在有 1,925 种可能性。凯莱距离为 3 时,有 32,670 种可能性。
一般而言,与原始n 个元素序列的凯莱距离为k 的排列数量等于
| S 1 ( n , n − k )|
其中S 1表示第一类斯特林数。
还有其他方法可以测量两个排列之间的距离。另一种可能是肯德尔距离 (Kendall distance),它计算将一个序列转换为另一个序列所需的相邻转置次数。肯德尔距离有时被称为冒泡排序距离,类似于冒泡排序算法。肯德尔距离可能比凯莱距离更合适,因为人们更容易意外地转置序列中相邻元素的位置。
凯莱距离和肯德尔距离都不完全对应于人类记忆的损坏,但两者都会在探索不太可能的变化之前指导您纠正可能的变化。
相关文章
文章“恢复排列的种子短语”最先出现在John D. Cook上。
原文: https://www.johndcook.com/blog/2025/08/16/recovering-a-permuted-seed-phrase/