答案先抛

可以尝试。12 词的全排列是 12 阶乘约 4.79 亿种,普通笔记本电脑用 btcrecover 跑大约一到两天能扫完。校验位会自动过滤掉绝大部分错误排列,最终通过校验的候选大概几百到几千个,逐个导入钱包看哪个能扫出你的地址。但前提是12 个单词每一个都拼写无误

为什么是这样

BIP39 的工作方式是:把 128 比特熵 + 4 比特校验拼成 132 比特,再切成 12 段、每段 11 比特,按顺序去 2048 词的词表里查出 12 个英文单词。所以顺序不是任意的——每一个槽位对应着 132 位二进制中的某 11 位。换两个词的位置,132 位的中间就被截断重排,最后那 4 个校验比特对应的"前 128 比特的哈希"完全变了,校验失败。

暴力枚举的可行性来自校验机制本身。12 阶乘虽然有 4.79 亿种排列,但其中通过校验的只有 1/16,也就是大约 3000 万种——这还是上限,实际因为词表非均匀分布,最终通过校验、能成为有效助记词的,通常只有几百到几千个。这个数量级,挨个导入钱包看哪个能扫出你的地址,是可以接受的。

24 词的故事就不一样了。24 的阶乘大约是 6.2 × 10 的 23 次方——这是阿伏伽德罗常数级别的数字,普通电脑跑不完。如果你的 24 词只是顺序乱了,最好的策略是回忆有没有"分组"的线索(比如你抄的时候是不是分成两列四行,乱的可能只是某一列内部),把搜索空间限定到几百万级别,普通电脑才有戏。

实际操作上推荐 btcrecover 的 seedrecover.py。把所有单词放进配置文件、指定派生路径和一个你记得的地址,它就会自动跑。全程断网。

常见误解 / 注意点

  • "反正就这 12 个词" 这种自信很危险——人在恢复时常常想错某个词。helena 还是 helmet?前四个字母往往一样,错一个字符整段就废。先验证每个词都在词表里再开始排列。
  • 不要靠"我大概记得开头几个、结尾几个"——大概如果错一位,下面所有努力都白费。
  • btcrecover 需要至少一个地址或公钥来匹配结果。连地址都不记得的话,只能"导入钱包后扫一下有没有余额"。
  • 找钱包恢复服务的话,他们用类似的工具但有更强的算力(多卡 GPU 集群)。资产价值高、自己跑没耐心可以考虑。

相关阅读

BIP39 校验机制的具体细节和单词顺序如何影响整段熵,在 《私钥与助记词 · 加密世界的身份证》 第四节有完整推导。另外 "助记词丢了一两个单词能恢复吗?" 那篇 FAQ 讨论了缺词的情况,可以对比着看。