HD錢包靈魂大檢查!到底有哪些錢包經得住考驗?

買賣虛擬貨幣

撰文 | cobo金庫大掌櫃


相信所有用過“去中心化錢包”的同學對助記詞都不陌生。


不管是硬體錢包還是軟體錢包,建立錢包都有兩種方式:

  • 建立助記詞:錢包隨機生成一組助記詞,使用者需要抄寫備份
  • 匯入助記詞:使用者匯入一套已有的助記詞到錢包內恢復資產


那助記詞又是如何變成我們的主私鑰,進而用hd的方式生成所有子私鑰的呢?


其實很簡單。一套助記詞,經過2048輪的hmac-sha512演算法的狂虐,生成一個主私鑰,進而派生出一套hd錢包。


所以,助記詞和主私鑰是一一對應的關係,一套助記詞對應一個主私鑰,也就是對應一個hd錢包。


大家這裡有沒有想過一個很恐怖的問題:


比方說這是掌櫃手裡的12個助記詞:


cat tonight sadness walnut fan captain sure assume gorilla caution story pull 

方便起見,我們稱這套詞為【cat助記詞】


但是,當掌櫃把【cat助記詞】匯入錢包的時候,第一個詞手抖輸入成了dog,於是助記詞變成了:


dog tonight sadness walnut fan captain sure assume gorilla caution story pull

方便起見,我們稱這套詞為【dog助記詞】


這時候就是悲劇的開始。


作為一名純24k囤幣黨,掌櫃千辛萬苦省吃儉用,把所有信仰都充值到了【dog助記詞】下的地址上。


然後有一天,可能因為手機或者硬體錢包壞了,也可能是又手抖刪除了錢包app,總之種種原因,導致需要拿出助記詞才能恢復資產。


此時,掌櫃掏出了那套塵封已久的【cat助記詞】,將它匯入了錢包。


前面已經提過,一套助記詞跟一個hd錢包是一一對應的。此時用【cat助記詞】恢復得到的地址,跟【dog助記詞】的地址是不一樣的。也就是說,【cat助記詞】下,沒有任何資產。


因為誤輸入了一個助記詞dog,掌櫃的所有資產和信仰,全丟了。


是不是很恐怖?


其實機智的比特幣開發者早就想到了這一切。他們定義了助記詞的標準協議,會對所有助記詞有效與否,進行校驗


在講“校驗原理”之前,掌櫃先普及一個關於助記詞的基礎知識。


bip39 定義了助記詞的標準,標準內含有一份2048個詞的詞表(參考連結1)。所有錢包只要遵循bip39,生成的助記詞都是從這個2048個詞的詞表中獲得的,【cat助記詞】的所有詞也不例外。


2048詞表的每個單詞我們都標上序號,從“0”到“2047”。最大的序號“2047”用二進位制表示剛好是11位“11111111111”。所以詞表裡的每一個詞,我們都可以根據它的序號對應一個11位的二進位制數。對於轉換二進位制後不滿11位的,我們在它的二進位制數前面補“0”,直至滿足11位。


比如cat是第287個詞,序列號為“286”,其對應的11位二進位制數就是“100011110”,我們補足11位,將其表示為“00100011110”。

接下來我們看看具體的“校驗”步驟


第一步:我們按照上面的方法,根據2048詞表找到【cat助記詞】12個詞對應的11位二進位制數

第二步:我們把這12個詞對應的11位二進位制數串在一起,得到一個132位的二進位制數

001000111101110010010010111101111111101101100101001011000100010001110110100000000110111101100100101001001001011101011010010101101010


第三步:我們把這個132位的二進位制數拆成兩部分,左邊的128位,以及右邊的4位。


左邊128位:

00100011110111001001001011110111111110110110010100101100010001000111011010000000011011110110010010100100100101110101101001010110


右邊4位(校驗值):1010


第四步:我們開始校驗這套助記詞的有效性。


判斷有效性的原理:左邊128位二進位制數的sha256的結果的前4位,必須等於右邊的4位二進位制數。


我們驗算一下【cat助記詞】的結果。


把左邊128位二進位制數放進一個線上sha256計算器(參考連結2)


(有幣的助記詞切勿使用線上工具校驗!!!)


可以看到,sha256的結果的前4位,正好就是132位二進位制數的右邊4位“1010”。


這就說明,【cat助記詞】透過了校驗,是一套有效助記詞,然後就能進入後面的主私鑰生成流程。


那我們馬上來做個練習,看看輸錯一個單詞的【dog助記詞】能否透過校驗:


第一步:【dog助記詞】12個詞對應詞表的11位二進位制數如下:

第二步:把這12個詞對應的11位二進位制數串在一起,得到一個132位的二進位制數:

010000001001110010010010111101111111101101100101001011000100010001110110100000000110111101100100101001001001011101011010010101101010


第三步:把這個132位的二進位制數拆成兩部分,左邊的128位,以及右邊的4位:


左邊128位:

01000000100111001001001011110111111110110110010100101100010001000111011010000000011011110110010010100100100101110101101001010110


右邊4位(校驗值):1010


第四步:把【dog助記詞】左邊128位二進位制數放進sha256計算器。


(有幣的助記詞切勿使用線上工具校驗!!!)


可以看到,sha256的結果的前4位是“0010”,與132位二進位制數的右邊4位“1010”不一致。


這樣,這組【dog助記詞】無法透過校驗,符合標準bip39協議開發的錢包app會提醒使用者檢查自己的助記詞。此時使用者會發現錯誤,把“dog”改成正確的“cat”,才能透過校驗,完成錢包建立,也就能避免悲劇的發生。


最後,我們來檢查一下作業,來看看在輸入一套無效助記詞時,中外知名的hd錢包們會不會根據標準bip39協議,檢查出助記詞的錯誤呢?


因為只要輸入一套無效助記詞,就可以達到檢查的目的,所以方便起見我們就不輸入複雜的助記詞,直接輸入12個cat(這是一套無效助記詞)。檢查結果如下:


第一家:imtoken 成功透過考驗!

第二家:火幣錢包成功透過考驗!

第三家:trust wallet 成功透過考驗!

第四家:brd 成功透過考驗!

第五家:bitpay 成功透過考驗!


第六家:imkey 成功透過考驗!

第七家:cobo wallet 和 cobo金庫,成功透過考驗!

cobo金庫

第八家:位元派錢包,未做助記詞校驗,無效助記詞可以生成錢包,沒有提示助記詞錯誤。


第九家:硬體錢包位元護盾。位元護盾的助記詞是在手機端輸入,在輸入12個助記詞的時候會有混淆詞,輸入24個助記詞的時候沒有,所以我們輸入24個cat(這也是無效助記詞)試了一下,結果是沒有提示助記詞錯誤的。

最後,給大家提醒一個硬體錢包風險點


掌櫃在檢查各校驗助記詞的作業時發現,有些硬體錢包是在手機端完成助記詞輸入的。


我們之所以使用硬體錢包,就是為了將助記詞/私鑰脫網儲存,在聯網裝置上輸入助記詞就完全失去了硬體錢包的意義。


這裡有一種解決辦法是在手機端匯入助記詞到硬體錢包的時候,在手機端打亂詞序並加入混淆詞,混淆詞的工作原理是:比如我們的助記詞是11個abandon+about(這是一套有效助記詞),當我們在手機端輸入助記詞時,冷端會提示:


請在手機輸入第3個助記詞(輸入abandon)

請在手機輸入cat

請在手機輸入第12個助記詞(輸入about)

請在手機輸入dog

請在手機輸入第6個助記詞(輸入abandon)

請在手機輸入region


cat,dog,region就是混淆詞


但是混淆詞+打亂詞序匯入,真的有用嗎?


如果12個詞的助記詞,加上12個混淆詞,都被駭客劫持,駭客透過上文提到的校驗助記詞有效性的形式暴力破解出正確的助記詞,需要做1295295050649600次雜湊,這個數字看著很大,但是螞蟻s17+的算力已經達到了每秒73000000000000次雜湊。暴力破解出正確的12個助記詞只需要18秒


參考連結:

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

[2] https://cryptii.com/pipes/hash-function

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;