我們最好自己親自生成一套助記詞,而不是藉助程式自動生成。

作者:0xTodd,Nothing Research 合夥人

我最近一直想做一個關於如何獲得秘密安全「助記詞(mnemonics)」方面的攻略,正好趕上前幾天 Do Kwon 的段子來了,我覺得有必要給大家分享一下。

一共需要 5 步:

1. 找到助記詞清單

2. 找點骰子

3. 搖擲骰子-轉換進位

4. 找到校驗位

5. 備份

你隨身攜帶的硬體錢包真的安全嗎? 事實上:無論是熱錢包還是硬體錢包,你拿到的助記詞都是軟體通過隨機自動幫你生成的。

當然,我樂於給硬體錢包供應商們足夠的信任,但作為一個 crypto native guy,我覺得靠 “信任” 是不夠的。

為什麼這麼說呢? 從一台硬體錢包從生產到你手中,經歷了太多的環節:開發者、硬體設計、組裝商、包裝商、快遞 A,海關,分揀,快遞 B... 等等。

最差情況是:自動生成的隨機演算法,是破解版,或者乾脆帶有後門。

大家都聽說過「偽隨機」的概念,機器生成的隨機數,終究存在被人預測的可能性。 比如你用了別人送你的(動過手腳的)硬體錢包,那理論上,你生成的 12 個單詞,別人也能生成相同的,那你硬體防護手段也就失去了意義。

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

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

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

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

Step1 找到 2048 助记词列表

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

比特币仓库中的 BIP39

bips/english.txt at master · bitcoin/bips

你从任何一个搜索引擎,都可以很轻松得获取这个 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 出來,,只轉入不轉出,那你甚至不需要一個硬體錢包了,這也是早年大家常提到的 “紙錢包”。

最後,祝大家都能永遠保護好自己的錢包和資產。 有任何問題或者改進物理隨機的方式都歡迎留言交流

免責聲明:作為區塊鏈資訊平臺,本站所發佈文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。 本文內容僅用於資訊分享,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。