想告訴「此沙」:你離擁有上百億港幣,頂多也就 2048 次嘗試。

撰文:Tyler
最近看了成龍大哥的口碑新作《捕風追影》,里面有個橋段挺有意思——上百億港幣的加密資產(chǎn),被鎖在一個 12 個單詞的助記詞錢包里,結(jié)局只剩最后一個單詞未知。
我看完去試了下,結(jié)果發(fā)現(xiàn)第 10 位和第 12 位并不在標準助記詞庫里,顯然編劇是故意這么寫,避免有人照著劇情復原錢包搞詐騙,畢竟鏈上類似的騙局并不罕見:
騙子會故意泄露一個「帶余額」的錢包地址(典型在 Tron 鏈上,利用 Owner 機制),誘導大家轉(zhuǎn)入 Gas,守株待兔,資金一旦轉(zhuǎn)入就再也拿不回來了。

但這里有趣的一點在于,電影里說只差最后一個單詞不知道??稍谡鎸嵤澜缋?,助記詞遵循 BIP39 標準,一共就 2048 個單詞,也就是說,暴力破解最后一位,頂多也就 2048 種可能,如果再縮小范圍,比如電影中已知開頭字母是「es」,那可能性更少,一分鐘就能試完。
不過,電影之外更值得重溫的問題是:助記詞、私鑰、公鑰,到底是什么關(guān)系?為什么丟了助記詞就等于丟了所有資產(chǎn)?
一、助記詞:私鑰:公鑰/地址 = 「鑰匙串」:「鑰匙」:「門牌號」
助記詞是遵循 BIP39 標準的備份方式,從 2048 個英文單詞的詞庫中,通過算法隨機選取并組合而成的 12、18 或 24 個單詞。
這組助記詞經(jīng)過 PBKDF2 算法處理后,會生成一個種子(Seed),再由這個 Seed 按照 BIP32/BIP44 等路徑標準,派生出一系列私鑰,進而對應一系列的公鑰/地址。
一組助記詞 → 生成一系列私鑰 → 生成一系列公鑰 → 對應一系列地址
換句話說:
助記詞 = 鑰匙串,和私鑰往往是一對多的關(guān)系,理論上一組助記詞可以衍生出成千上萬個私鑰;
私鑰 = 鑰匙,每一把私鑰對應一個地址的使用權(quán);
公鑰/地址 = 門牌號,可以公開,別人能用它給你轉(zhuǎn)賬;
所以可以將助記詞視為你的「鑰匙串」,而每個私鑰就像其中一把能開門的鑰匙,用來簽名、證明你對某個錢包地址的控制權(quán)——當你發(fā)起一筆交易時,就是用私鑰來簽名,告訴全網(wǎng):「這筆轉(zhuǎn)賬是我授權(quán)的」。
二、那能不能自己挑選助記詞?
那是不是有朋友就會覺得:我能不能自己來湊 12 個單詞?比如生日、最喜歡的英文單詞、偶像名字,這樣更有個性。
答案是:可以,但極度危險。
因為計算機生成的隨機數(shù)是真隨機,而人類挑單詞時幾乎都帶有模式(常見詞、習慣用詞、順序偏好),這會大幅縮小搜索空間,讓你的助記詞更容易被猜中。

之前就出過「偽隨機錢包」的安全事件,有些錢包生成助記詞時使用了偽隨機算法,結(jié)果熵遠遠不足,被黑客暴力遍歷直接窮舉破解——2015 年黑客組織 Blockchain Bandit 就利用故障的隨機數(shù)生成器和程序碼漏洞,系統(tǒng)性地搜尋弱安全私鑰,成功掃出了 70 多萬個脆弱錢包地址,并盜走了其中超過 5 萬枚 ETH。
當然有些極客會用骰子(得確保骰子也足夠均勻)搖隨機數(shù),再映射到 BIP39 單詞庫,這才算手工安全,但對大多數(shù)人來說,沒必要搞這么復雜,反而容易出錯。
三、能不能暴力撞出 V 神或其他巨鯨的錢包?
這個問題我當年也腦補過,幻想自己哪天生成了一個錢包地址,結(jié)果一看里邊有上百萬枚 ETH,瞬間財富自由,直接偷家某位巨鯨。
不得不說,光想就挺誘人。但現(xiàn)實是:概率幾乎等于零。
為什么?因為助記詞的可能組合數(shù)量已經(jīng)夸張到超出人類想象:
12 個單詞:有效組合數(shù)約 212? ≈ 3.4 × 103?
24 個單詞:有效組合數(shù)約 22?? ≈ 1.16 × 10??
這個數(shù)量級是什么概念?
我們都知道地球上的沙子多到數(shù)不清,但科學家們估算過一個近似值,假設(shè)地球上的所有沙灘、沙漠加起來,沙子的總數(shù)大約是 7.5×101? 粒,這也意味著:
12 個單詞的有效組合數(shù),相當于地球全部沙子總數(shù)的 4.5 × 101? 倍
24 個單詞的有效組合數(shù),更是地球上沙子總數(shù)的 1.5 × 10?? 倍
換句話說,就好像地球上每一粒沙子,都變成一顆「新地球」,每個新地球里還有沙灘和沙子,然后你要在所有這些沙子里,一次性隨機找到你事先標記好的那一粒。
這已經(jīng)遠遠超出人類可以想象的規(guī)模。

所以,暴力破解錢包的概率,不是「極低」,而是在已知的物理學和計算能力下,等同于零,想靠「撞庫」發(fā)財,還不如去買彩票,中獎概率高得多。
回到電影的那個設(shè)定:如果真有人只差一個助記詞單詞,那確實有可能通過暴力遍歷去嘗試。
最后,關(guān)于錢包/助記詞/私鑰的幾點安全小貼士:
優(yōu)先使用經(jīng)過時間和市場檢驗、開源代碼審計的非托管錢包,如 MetaMask、Trust Wallet、SafePal 等,有條件的直接使用硬件錢包;
助記詞和私鑰,永遠不要截圖、不要存網(wǎng)盤、不要復制粘貼、不要發(fā)給別人;
最好紙筆抄寫(可以考慮使用不銹鋼助記詞板,防潮、防火、防腐蝕),放在安全的地方,且 2~3 處多點備份;
公鑰/地址可以放心公開,它就是你的門牌號,但要注意識別釣魚鏈接;
建議用干凈的設(shè)備管理錢包,不要隨便裝來歷不明的插件或 App;
記住一句話:任何人向你要助記詞,100% 是騙子。