原文標題:《如何通過物理手段獲得一組秘密安全的助記詞? 》
原文作者:@0x_Todd
我最近一直想做一個關於如何獲得秘密安全「助記詞(mnemonics)」方面的攻略,正好趕上前幾天 Do Kwon 的段子來了,我覺得有必要給大家分享一下。
一共需要 5 步:
1. 找到助記詞列表
2. 找點骰子
3. 搖擲骰子-轉換進制
4. 找到校驗位
5. 備份
你隨身攜帶的硬件錢包真的安全麼?事實上:無論是熱錢包還是硬件錢包,你拿到的助記詞都是軟件通過隨機自動幫你生成的。
當然,我樂於給硬件錢包提供商們足夠的信任,但作為一個 crypto native guy,我覺得靠「信任」是不夠的。
為什麼這麼說呢?從一台硬件錢包從生產到你手中,經歷了太多的環節:開發者、硬件設計、組裝商、包裝商、快遞 A,海關,分揀,快遞 B… 等等。
最差情況是:自動生成的隨機算法,是破解版,或者乾脆帶有後門。
大家都聽說過「偽隨機」的概念,機器生成的隨機數,終究存在被人預測的可能性。比如你用了別人送你的(動過手腳的)硬件錢包,那理論上,你生成的 12 個單詞,別人也能生成相同的,那你硬件防護手段也就失去了意義。
所以,我們最好自己親自生成一套助記詞,而不是藉助程序自動生成。
硬件錢包無法訪問網絡,這個環節是很難植入後門的,只要你能確保你的助記詞是真·隨機生成的,那麼硬件錢包的安全性將會補足最後一塊短板,即沒人可以知道你的助記詞。
那麼如何生成真·隨機的助記詞呢?很簡單:物理隨機。
接下來是一個教程,感興趣的可以轉推,等周末慢慢操作。
首先科普一個概念:比特幣也好,以太坊也好,以及後面的所有鏈,用的都是同一套協議,即比特幣社區當年創造的 BIP-39。這裡有 2048 個單詞,而且為了避免手寫抄錯,BIP-39 還貼心去掉了很多看起來很相似的單詞。
比特幣倉庫中的 BIP39
https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt
你從任何一個搜索引擎,都可以很輕鬆得獲取這個 2048 個單詞,當然,既然是鑽牛角尖,你可以尋找三個信息源頭,並隨機抽樣調查,確認這些是真的 BIP39。
很多人不知道,其實 BIP-39 還支持中文;比如「的 一 是 在 不 了 有 和 人 這 中 大」理論也能生成出一個錢包地址來。當然,為了更好的兼容性,建議大家用默認的傳統單詞列表。
接下來,讓我們做一個思考實驗:如果想獲得真隨機,最簡單的辦法,就是我擁有一個「有 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。
為什麼不一口氣把 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,隨便複製一下什麼東西(清除剪貼板),重啟關機幾次。
這樣就大功告成了!你通過完全物理隨機的手段,在全程不聯網的情況下,獲得了一個絕對不可能有人猜到的一套助記詞,這時候你再將這套助記詞輸入到硬件錢包裡,你的安全性就徹底拉滿了。
當然,仍然建議做好至少 2 重備份。不要用鉛筆(容易褪色),不要存電腦或者手機裡(那剛才咱們就白弄了),不要企圖在兩台電子設備裡各存一半(很容易被暴力破解)。
當然,如果你足夠牛,你可以背下來(避免 Do Kwon 悲劇),但是強烈不推薦這樣做。這裡教大家一些背誦助記詞的秘訣,比如我這套:safe hill also idle fade shock walnut cigar eye clean water cabin。
你可以編一個故事:在一個(safe)安全的小山村里,有一座(hill)山丘,山丘上的居民們總是(also)還能享受到寧靜的生活。村子裡有一個(idle)懶散的青年,他的衣服褪色(fade)得厲害…balabala
這樣,理論上記住了故事,就記住了助記詞。但是,還是強調下,人腦是個非常辣雞的生物存儲設備,普通人不推薦哦,Do Kwon 除外。
當然,如果你單純想做一個冷錢包當長期 holder,我覺得寫在紙上,把這個地址 copy 出來,,只轉入不轉出,那你甚至不需要一個硬件錢包了,這也是早年大家常提到的「紙錢包」。
最後,祝大家都能永遠保護好自己的錢包和資產。
本文來自投稿,不代表律動BlockBeats的觀點
歡迎加入律動 BlockBeats 官方社群:
Telegram 訂閱群:https://t.me/theblockbeats
Telegram 交流群:https://t.me/BlockBeats_App
Twitter 官方帳號:https://twitter.com/BlockBeatsAsia