header-langage
简体中文
繁體中文
English
Tiếng Việt
한국어
日本語
ภาษาไทย
Türkçe
掃碼下載APP

如何通過物理手段獲得一組秘密安全的助記詞?

閱讀本文需 12 分鐘
一個關於如何獲得秘密安全助記詞的攻略
原文標題:《如何通過物理手段獲得一組秘密安全的助記詞? 》
原文作者:@0x_Todd


我最近一直想做一個關於如何獲得秘密安全「助記詞(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)山丘,山丘上的居民們總是(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

举报 糾錯/舉報
選擇文庫
新增文庫
取消
完成
新增文庫
僅自己可見
公開
保存
糾錯/舉報
提交