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

 

一共需要5步:

1.找到助記詞列表

2.找點骰子

3.搖擲骰子-轉換進制

4.找到校驗位

5.備份

 

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

 

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

 

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

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

 

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

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

 

硬件錢包無法訪問網絡,這個環節是很難植入後門的,只要你能確保你的助記詞是真·隨機生成的,那麼硬件錢包的安全性將會補足最後一塊短板,即沒人可以知道你的助記詞。

 

那麼如何生成真·隨機的助記詞呢?很簡單:物理隨機。

接下來是一個教程,感興趣的可以轉推,等週末慢慢操作。

 

Step1 找到2048助記詞列表

首先科普一個概念:比特幣也好,以太坊也好,以及後面的所有鏈,用的都是同一套協議,即比特幣社區當年創造的BIP-39。這裏有2048個單詞,而且爲了避免手寫抄錯,BIP-39還貼心去掉了很多看起來很相似的單詞。

 

比特幣倉庫中的BIP39

https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt

 

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

 

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

本文作者:

0xTodd | Nothing Research Partner