HD錢包wallet靈魂大檢查!到底有哪些錢包經(jīng)得住考驗(yàn)?

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

不管是硬件錢包還是軟件錢包,創(chuàng)建錢包都有兩種方式:

創(chuàng)建助記詞:錢包隨機(jī)生成一組助記詞,用戶需要抄寫備份

導(dǎo)入助記詞:用戶導(dǎo)入一套已有的助記詞到錢包內(nèi)恢復(fù)資產(chǎn)

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

其實(shí)很簡單。一套助記詞,經(jīng)過2048輪的HMAC-SHA512算法的狂虐,生成一個(gè)主私鑰,進(jìn)而派生出一套HD錢包。

所以,助記詞和主私鑰是一一對應(yīng)的關(guān)系,一套助記詞對應(yīng)一個(gè)主私鑰,也就是對應(yīng)一個(gè)HD錢包。

大家這里有沒有想過一個(gè)很恐怖的問題:

比方說這是掌柜手里的12個(gè)助記詞:

cat tonight sadness walnut fan captain sure assume gorilla caution story pull方便起見,我們稱這套詞為【cat助記詞】

但是,當(dāng)掌柜把【cat助記詞】導(dǎo)入錢包的時(shí)候,第一個(gè)詞手抖輸入成了dog,于是助記詞變成了:

dog tonight sadness walnut fan captain sure assume gorilla caution story pull方便起見,我們稱這套詞為【dog助記詞】

這時(shí)候就是悲劇的開始。

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

然后有一天,可能因?yàn)槭謾C(jī)或者硬件錢包壞了,也可能是又手抖刪除了錢包App,總之種種原因,導(dǎo)致需要拿出助記詞才能恢復(fù)資產(chǎn)。

此時(shí),掌柜掏出了那套塵封已久的【cat助記詞】,將它導(dǎo)入了錢包。

前面已經(jīng)提過,一套助記詞跟一個(gè)HD錢包是一一對應(yīng)的。此時(shí)用【cat助記詞】恢復(fù)得到的地址,跟【dog助記詞】的地址是不一樣的。也就是說,【cat助記詞】下,沒有任何資產(chǎn)。

因?yàn)檎`輸入了一個(gè)助記詞dog,掌柜的所有資產(chǎn)和信仰,全丟了。

是不是很恐怖?

其實(shí)機(jī)智的比特幣開發(fā)者早就想到了這一切。他們定義了助記詞的標(biāo)準(zhǔn)協(xié)議,會對所有助記詞有效與否,進(jìn)行校驗(yàn)。

在講“校驗(yàn)原理”之前,掌柜先普及一個(gè)關(guān)于助記詞的基礎(chǔ)知識。

?

BIP39?定義了助記詞的標(biāo)準(zhǔn),標(biāo)準(zhǔn)內(nèi)含有一份2048個(gè)詞的詞表(參考鏈接1)。所有錢包只要遵循BIP39,生成的助記詞都是從這個(gè)2048個(gè)詞的詞表中獲得的,【cat助記詞】的所有詞也不例外。

2048詞表的每個(gè)單詞我們都標(biāo)上序號,從“0”到“2047”。最大的序號“2047”用二進(jìn)制表示剛好是11位“11111111111”。所以詞表里的每一個(gè)詞,我們都可以根據(jù)它的序號對應(yīng)一個(gè)11位的二進(jìn)制數(shù)。對于轉(zhuǎn)換二進(jìn)制后不滿11位的,我們在它的二進(jìn)制數(shù)前面補(bǔ)“0”,直至滿足11位。

比如cat是第287個(gè)詞,序列號為“286”,其對應(yīng)的11位二進(jìn)制數(shù)就是“100011110”,我們補(bǔ)足11位,將其表示為“00100011110”。


接下來我們看看具體的“校驗(yàn)”步驟

第一步:我們按照上面的方法,根據(jù)2048詞表找到【cat助記詞】12個(gè)詞對應(yīng)的11位二進(jìn)制數(shù)。


第二步:我們把這12個(gè)詞對應(yīng)的11位二進(jìn)制數(shù)串在一起,得到一個(gè)132位的二進(jìn)制數(shù)

001000111101110010010010111101111111101101100101001011000100010001110110100000000110111101100100101001001001011101011010010101101010

第三步:我們把這個(gè)132位的二進(jìn)制數(shù)拆成兩部分,左邊的128位,以及右邊的4位。

左邊128位:00100011110111001001001011110111111110110110010100101100010001000111011010000000011011110110010010100100100101110101101001010110右邊4位(校驗(yàn)值):1010

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

判斷有效性的原理:左邊128位二進(jìn)制數(shù)的SHA256的結(jié)果的前4位,必須等于右邊的4位二進(jìn)制數(shù)。

我們驗(yàn)算一下【cat助記詞】的結(jié)果。

把左邊128位二進(jìn)制數(shù)放進(jìn)一個(gè)在線SHA256計(jì)算器(參考鏈接2)


(有幣的助記詞切勿使用在線工具校驗(yàn)?。。。?/p>

可以看到,SHA256的結(jié)果的前4位,正好就是132位二進(jìn)制數(shù)的右邊4位“1010”。

這就說明,【cat助記詞】通過了校驗(yàn),是一套有效助記詞,然后就能進(jìn)入后面的主私鑰生成流程。

那我們馬上來做個(gè)練習(xí),看看輸錯(cuò)一個(gè)單詞的【dog助記詞】能否通過校驗(yàn):

第一步:【dog助記詞】12個(gè)詞對應(yīng)詞表的11位二進(jìn)制數(shù)如下


第二步:把這12個(gè)詞對應(yīng)的11位二進(jìn)制數(shù)串在一起,得到一個(gè)132位的二進(jìn)制數(shù):

010000001001110010010010111101111111101101100101001011000100010001110110100000000110111101100100101001001001011101011010010101101010

第三步:把這個(gè)132位的二進(jìn)制數(shù)拆成兩部分,左邊的128位,以及右邊的4位:

左邊128位:01000000100111001001001011110111111110110110010100101100010001000111011010000000011011110110010010100100100101110101101001010110右邊4位(校驗(yàn)值):1010

第四步:把【dog助記詞】左邊128位二進(jìn)制數(shù)放進(jìn)SHA256計(jì)算器。


(有幣的助記詞切勿使用在線工具校驗(yàn)?。。。?/p>

可以看到,SHA256的結(jié)果的前4位是“0010”,與132位二進(jìn)制數(shù)的右邊4位“1010”不一致。

這樣,這組【dog助記詞】無法通過校驗(yàn),符合標(biāo)準(zhǔn)BIP39協(xié)議開發(fā)的錢包App會提醒用戶檢查自己的助記詞。此時(shí)用戶會發(fā)現(xiàn)錯(cuò)誤,把“dog”改成正確的“cat”,才能通過校驗(yàn),完成錢包創(chuàng)建,也就能避免悲劇的發(fā)生。

最后,我們來檢查一下作業(yè),來看看在輸入一套無效助記詞時(shí),中外知名的HD錢包們會不會根據(jù)標(biāo)準(zhǔn)BIP39協(xié)議,檢查出助記詞的錯(cuò)誤呢?

因?yàn)橹灰斎胍惶谉o效助記詞,就可以達(dá)到檢查的目的,所以方便起見我們就不輸入復(fù)雜的助記詞,直接輸入12個(gè)cat(這是一套無效助記詞)。檢查結(jié)果如下:

第一家:imToken


第二家:火幣錢包


第三家:Trust Wallet


第四家:BRD


第五家:BitPay


第六家:imKey


第七家:Cobo Wallet 和 Cobo金庫


第八家:比特派錢包和硬件錢包比特護(hù)盾。比特護(hù)盾的助記詞是在手機(jī)端輸入,在輸入12個(gè)助記詞的時(shí)候會有混淆詞,輸入24個(gè)助記詞的時(shí)候沒有,所以我們輸入24個(gè)cat(這也是無效助記詞)試了一下,結(jié)果是沒有提示助記詞錯(cuò)誤的。


最后,給大家提醒一個(gè)硬件錢包風(fēng)險(xiǎn)點(diǎn)

掌柜在檢查各校驗(yàn)助記詞的作業(yè)時(shí)發(fā)現(xiàn),有些硬件錢包是在手機(jī)端完成助記詞輸入的。

我們之所以使用硬件錢包,就是為了將助記詞/私鑰脫網(wǎng)保存,在聯(lián)網(wǎng)設(shè)備上輸入助記詞就完全失去了硬件錢包的意義。

這里有一種解決辦法是在手機(jī)端導(dǎo)入助記詞到硬件錢包的時(shí)候,在手機(jī)端打亂詞序并加入混淆詞,混淆詞的工作原理是:比如我們的助記詞是11個(gè)abandon+about(這是一套有效助記詞),當(dāng)我們在手機(jī)端輸入助記詞時(shí),冷端會提示:

請?jiān)谑謾C(jī)輸入第3個(gè)助記詞(輸入abandon)

請?jiān)谑謾C(jī)輸入cat

請?jiān)谑謾C(jī)輸入第12個(gè)助記詞(輸入about)

請?jiān)谑謾C(jī)輸入dog

請?jiān)谑謾C(jī)輸入第6個(gè)助記詞(輸入abandon)

請?jiān)谑謾C(jī)輸入region

cat,dog,region就是混淆詞

但是混淆詞+打亂詞序?qū)?,真的有用嗎?/b>

如果12個(gè)詞的助記詞,加上12個(gè)混淆詞,都被黑客劫持,黑客通過上文提到的校驗(yàn)助記詞有效性的形式暴力破解出正確的助記詞,需要做1295295050649600次哈希,這個(gè)數(shù)字看著很大,但是螞蟻S17+的算力已經(jīng)達(dá)到了每秒73000000000000次哈希。暴力破解出正確的12個(gè)助記詞只需要18秒

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文地址 https://mbinary.coding.me/introduction-to-bitcoin.ht...
    mbinary閱讀 5,717評論 0 4
  • 最新內(nèi)容會更新在主站深入淺出區(qū)塊鏈社區(qū)原文鏈接:理解開發(fā)HD 錢包涉及的 BIP32、BIP44、BIP39 如果...
    深入淺出區(qū)塊鏈閱讀 1,310評論 1 3
  • 寧姐今天午睡時(shí)鬧了一天,鬧得整個(gè)班孩子都被吵醒了,上了不少于二十趟廁所,不讓她去,她肚子里有一滴尿都拉到褲子上,然...
    微笑向暖_cf68閱讀 138評論 0 0
  • “社會不復(fù)雜,復(fù)雜的是人心!”一起踏入社會的同桌,在電話那頭深沉地說。 2017年6月22日,我到昆...
    貍風(fēng)閱讀 911評論 0 0
  • 貓,屬于貓科動物,分家貓、野貓,是全世界家庭中較為廣泛的寵物。家貓的祖先據(jù)推測是起源于古埃及的沙漠貓,波斯的波斯貓...
    鳳佳琳閱讀 191評論 0 2

友情鏈接更多精彩內(nèi)容