如何通过物理手段获得一组秘密安全的助记词?

我最近一直想做一个关于如何获得秘密安全“助记词(mnemonics)”方面的攻略,正好赶上前几天Do Kwon的段子来了,我觉得有必要给大家分享一下。

 

一共需要5步:

1.找到助记词列表

2.找点骰子

3.摇掷骰子-转换进制

4.找到校验位

5.备份

 

你随身携带的硬件钱包真的安全么?事实上:无论是热钱包还是硬件钱包,你拿到的助记词都是软件通过随机自动帮你生成的。

 

当然,我乐于给硬件钱包提供商们足够的信任,但作为一个crypto native guy,我觉得靠“信任”是不够的。

 

为什么这么说呢?从一台硬件钱包从生产到你手中,经历了太多的环节:开发者、硬件设计、组装商、包装商、快递A,海关,分拣,快递B… 等等。

最差情况是:自动生成的随机算法,是破解版,或者干脆带有后门。

 

大家都听说过“伪随机”的概念,机器生成的随机数,终究存在被人预测的可能性。比如你用了别人送你的(动过手脚的)硬件钱包,那理论上,你生成的12个单词,别人也能生成相同的,那你硬件防护手段也就失去了意义。

所以,我们最好自己亲自生成一套助记词,而不是借助程序自动生成。

 

硬件钱包无法访问网络,这个环节是很难植入后门的,只要你能确保你的助记词是真·随机生成的,那么硬件钱包的安全性将会补足最后一块短板,即没人可以知道你的助记词。

 

那么如何生成真·随机的助记词呢?很简单:物理随机。

接下来是一个教程,感兴趣的可以转推,等周末慢慢操作。

 

Step1 找到2048助记词列表

首先科普一个概念:比特币也好,以太坊也好,以及后面的所有链,用的都是同一套协议,即比特币社区当年创造的BIP-39。这里有2048个单词,而且为了避免手写抄错,BIP-39还贴心去掉了很多看起来很相似的单词。

 

比特币仓库中的BIP39

 

你从任何一个搜索引擎,都可以很轻松得获取这个2048个单词,当然,既然是钻牛角尖,你可以寻找三个信息源头,并随机抽样调查,确认这些是真的BIP39。

 

很多人不知道,其实BIP-39还支持中文;比如“的 一 是 在 不 了 有 和 人 这 中 大”理论也能生成出一个钱包地址来。当然,为了更好的兼容性,建议大家用默认的传统单词列表。

 

Step2 找点骰子

接下来,让我们做一个思考实验:如果想获得真随机,最简单的办法,就是我拥有一个“有2048面的骰子”,连续掷出12次(其实是11次,我们后面再聊),我们就能获得一组完全随机的真·助记词。

 

 

但是,我相信各位谁也没有这样的骰子,那我们就要动一些脑筋了。

 

有一道经典的算法题,如何有一枚标准骰子,生成1-7随机数。https://www.zhihu.com/question/62404167

 

我们只需要把这道题的要求从7变成2048即可。你现在去网购11枚骰子,或者硬币(说实话现在内地硬币真的越来越少用到了)。

 

Step3 掷骰子,转换2进制

现在开始摇动骰子,骰子奇数记为1,偶数记为0(硬币同理)。11枚骰子的组合正好是:2*2*2*2*2*2*2*2*2*2*2=2048种,所以说你可以用这些骰子生成一个2进制的数。

 

比如我摇出一个结果是1 0 1 1 1 1 1 0 0 0 1。你把它变成十进制就是1521。算法很简单,用纸笔算就可以(不建议用电脑哦,私钥不触网),算法可参考:https://zhuanlan.zhihu.com/p/75291280

 

然后你去BIP-39 word list 找到第1521个单词,即safe。

 

合计连续掷11次,你就得到一套完全随机的单词组,比如: safe hill also idle fade shock walnut cigar eye clean water。

 

Step4 穷举法获得最后一个检验单词

 

为什么不一口气把12个单词全部用骰子掷出来呢?

 

BIP-39整个助记词序列包含了一定程度的校验功能,类似于身份证的尾号也有类似的设计。

 

因此,尽管第12个单词本身并不是一个特殊的校验位,但考虑到整套助记词序列确实要符合一定的规则,因此在创建钱包时,如果输入的助记词不符合校验规则,创建将会失败。

 

再通俗一点说:并不是表上的任意12个单词,都可以组成一套助记词的,它们必须符合某种规则。你随便找一套单词,大概率会提示你:无效助记词。

 

如果是程序自动生生成的助记词,当然自动符合了规则。而我们是物理创建的,因此,需要再次动一些脑筋。

 

很简单,既然前面11个都没按照规则。那么,我们让第12个助记词符合就行了。

 

那第12个单词如何搞定呢?这里就不掉书袋阐述原理了,直接采用“暴力穷举”的思路(没想到吧,自己创建助记词还需要暴力破解)。

 

 

事实上,你在2048个助记词列表随便一个位置,往下尝试0-30个,必定有符合规则的单词。比如我说这组,我从第230个单词开始试,233 brown就可以,255 cabin也可以。

 

当然,如果在硬件钱包上直接尝试破解,是最好的,毕竟不触网。但是缺点是会比较累,大部分硬件钱包按钮很少…包括ledger S和onekey经典,至于Do Kwon的trezor我没买过不清楚。

 

如果想偷懒,用一个退役的手机,下载一个trustwallet或者任何一个你熟悉的钱包。接着,断网,轮流测试。直到试出符合规则的第12个单词,默默记下,接着删除这个App,随便复制一下什么东西(清除剪贴板),重启关机几次。

 

这样就大功告成了!你通过完全物理随机的手段,在全程不联网的情况下,获得了一个绝对不可能有人猜到的一套助记词,这时候你再将这套助记词输入到硬件钱包里,你的安全性就彻底拉满了。

 

Step5 备份

当然,仍然建议做好至少2重备份。不要用铅笔(容易褪色),不要存电脑或者手机里(那刚才咱们就白弄了),不要企图在两台电子设备里各存一半(很容易被暴力破解)。

 

当然,如果你足够牛,你可以背下来(避免Do Kwon悲剧),但是强烈不推荐这样做。这里教大家一些背诵助记词的秘诀,比如我这套:safe hill also idle fade shock walnut cigar eye clean water cabin。

 

你可以编一个故事:在一个(safe)安全的小山村里,有一座(hill)山丘,村子里有一个(idle)懒散的青年,他的衣服褪色(fade)得厉害…balabala

 

 

这样,理论上记住了故事,就记住了助记词。但是,还是强调下,人脑是个非常辣鸡的生物存储设备,普通人不推荐哦,Do Kwon除外。

 

当然,如果你单纯想做一个冷钱包当长期holder,我觉得写在纸上,把这个地址copy出来,,只转入不转出,那你甚至不需要一个硬件钱包了,这也是早年大家常提到的“纸钱包”。

 

最后,祝大家都能永远保护好自己的钱包和资产。有任何问题或者改进物理随机的方式都欢迎留言交流

Subscribe to 0xTodd
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.