比特幣學(xué)習(xí)3-BIP39翻譯解讀

[TOC]

前言

BIP39英文地址

原文地址:http://m.itdecent.cn/p/2472bb87f04b
作者:夢(mèng)幻艾斯
備注:歡迎轉(zhuǎn)載,請(qǐng)保留原文地址。

摘要

這個(gè)BIP描述了一個(gè)使用一組方便記憶的單詞(簡(jiǎn)稱助記詞)生成確定性錢包種子的方案

它由兩部分組成:

  1. 生成助記詞

  2. 將助記詞轉(zhuǎn)化成二進(jìn)制種子。

    這個(gè)種子可以通過BIP-0032方法或者類似方法生成一個(gè)確定性錢包。

解決的問題

與處理錢包種子的原始二進(jìn)制或十六進(jìn)制表示相比,助記碼或句子對(duì)于人類更容易理解和記憶。助記詞可以寫在紙上或通過電話說出來。

本指南旨在將計(jì)算機(jī)生成的隨機(jī)性與人類可讀的轉(zhuǎn)錄相結(jié)合。這不是一種將用戶創(chuàng)建的句子(也稱為腦袋)處理成錢包種子的方式。

生成助記詞

助記詞必須將熵的長(zhǎng)度編碼為32的倍數(shù)。熵的長(zhǎng)度越長(zhǎng),安全系數(shù)越高,相應(yīng)的生成的助記詞長(zhǎng)度越長(zhǎng)。我們將初始熵的長(zhǎng)度稱為ENT。ENT允許的長(zhǎng)度是128-256位。

首先,生成一個(gè)ENTbits的熵。通過SHA256生成熵的hash,取<pre>ENT / 32</pre> bits當(dāng)作checksum。這個(gè)checksum加在初始熵的后面。

接下來,這些連接的比特被分成11位的組,每個(gè)編碼從0到2047的數(shù)字,用作詞表中的索引。最后,我們將這些數(shù)字轉(zhuǎn)換成單詞,并將這些連詞作為助記句。

下表描述了 初始化熵長(zhǎng)度 (ENT), checksum 長(zhǎng)度 (CS) 和 生成的助記詞長(zhǎng)度
(MS) 之間的關(guān)系

<pre>
CS = ENT / 32
MS = (ENT + CS) / 11

| ENT | CS | ENT+CS | MS |
+-------+----+--------+------+
| 128 | 4 | 132 | 12 |
| 160 | 5 | 165 | 15 |
| 192 | 6 | 198 | 18 |
| 224 | 7 | 231 | 21 |
| 256 | 8 | 264 | 24 |
</pre>

疑問:

  1. 為什么將ENT+CS分割成11位的組?

    因?yàn)?11等于2048,助記詞單詞列表的個(gè)數(shù)為2048個(gè)。所以11位長(zhǎng)度就可以完全覆蓋單詞列表的索引。

  2. 為什么ENT的長(zhǎng)度是32的倍數(shù)

    通過公式我們得出MS = (ENT + CS) / 11=(ENT + ENT / 32) / 11得到最終結(jié)果:
    3ENT = 32 MS

    因?yàn)镋NT和MS都是整數(shù),所以得出ENT是32的倍數(shù),MS是3的倍數(shù)

單詞表

理想的單詞列表具有以下特征:

  1. 最好的單詞選擇方式

    選擇的單詞最好只需要輸入單詞的前4位就可以唯一標(biāo)識(shí)單詞

  2. 避免類似單詞

    像"build" 和 "built", "woman" 和 "women", 或者 "quick" 和 "quickly"這類單詞容易記錯(cuò)或者寫錯(cuò)。應(yīng)該避免使用

  3. 單詞排好序

    • 單詞列表被排序,允許更高效地查找代碼單詞
      (即實(shí)現(xiàn)可以使用二分搜索而不是線性搜索)
    • 這也允許使用trie(前綴樹),例如為了更好的壓縮

單詞列表可以包含本地字符,但它們必須使用規(guī)范化表單兼容性分解(NFKD)以UTF-8編碼。

從助記詞生成種子

用戶應(yīng)該使用密碼來保護(hù)他們的助記詞。如果用戶沒有提供密碼,程序?qū)?huì)用空字符串""代替。

為了從助記詞中生成二進(jìn)制的種子。我們使用PBKDF2函數(shù),以一個(gè)助記詞句子(以UTF-8 NFKD表示)為參數(shù),使用"mnemonic" + 密碼作為鹽(以UTF-8 NFKD表示)。迭代次數(shù)設(shè)置為2048次,HMAC-SHA512函數(shù)作為為隨機(jī)函數(shù)。生成的密鑰長(zhǎng)度為512位(等于64字節(jié))。

鹽格式示例:

  1. 密碼為空時(shí)鹽="mnemonic"
  2. 密碼為"111111"時(shí),鹽="mnemonic111111"

這個(gè)種子可以在后續(xù)使用BIP-0032或類似方法生成確定性錢包。

助記詞的選擇和助記詞生成種子的方法是獨(dú)立的。這樣做使得代碼變得很簡(jiǎn)單。由于對(duì)助記詞句子對(duì)結(jié)構(gòu)沒有約束,客戶端可以自用的實(shí)現(xiàn)他們的單詞列表或者助記詞生成器。從而簡(jiǎn)稱拼寫錯(cuò)誤或者其它需求。

雖然使用不是由“生成助記符”部分中描述的算法生成的助記符是可能的,但不建議這樣做,并且軟件必須使用單詞表計(jì)算助記符句子的校驗(yàn)和,并且如果它無效則發(fā)出警告。

所描述的方法還提供了合理的可否認(rèn)性,因?yàn)槊總€(gè)密碼短語(yǔ)都會(huì)生成有效的種子(因此也就是確定性的錢包),但只有正確的種子才能使所需的錢包可用。

助記詞單詞列表

移動(dòng)到單獨(dú)的文檔

這里是這種語(yǔ)言作為助記詞單詞列表的使用方式,客戶端可以根據(jù)需求定制自己的助記詞單詞列表。

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

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