[TOC]
前言
原文地址:http://www.reibang.com/p/2472bb87f04b
作者:夢幻艾斯
備注:歡迎轉載磁携,請保留原文地址僵芹。
摘要
這個BIP描述了一個使用一組方便記憶的單詞(簡稱助記詞)生成確定性錢包種子的方案
它由兩部分組成:
生成助記詞
-
將助記詞轉化成二進制種子睬关。
這個種子可以通過BIP-0032方法或者類似方法生成一個確定性錢包忧额。
解決的問題
與處理錢包種子的原始二進制或十六進制表示相比辐马,助記碼或句子對于人類更容易理解和記憶力穗。助記詞可以寫在紙上或通過電話說出來毅弧。
本指南旨在將計算機生成的隨機性與人類可讀的轉錄相結合。這不是一種將用戶創(chuàng)建的句子(也稱為腦袋)處理成錢包種子的方式当窗。
生成助記詞
助記詞必須將熵的長度編碼為32的倍數(shù)够坐。熵的長度越長,安全系數(shù)越高崖面,相應的生成的助記詞長度越長元咙。我們將初始熵的長度稱為ENT。ENT允許的長度是128-256位巫员。
首先庶香,生成一個ENTbits的熵。通過SHA256生成熵的hash简识,取<pre>ENT / 32</pre> bits當作checksum赶掖。這個checksum加在初始熵的后面感猛。
接下來,這些連接的比特被分成11位的組奢赂,每個編碼從0到2047的數(shù)字陪白,用作詞表中的索引。最后膳灶,我們將這些數(shù)字轉換成單詞拷泽,并將這些連詞作為助記句。
下表描述了 初始化熵長度 (ENT), checksum 長度 (CS) 和 生成的助記詞長度
(MS) 之間的關系
<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>
疑問:
-
為什么將ENT+CS分割成11位的組袖瞻?
因為211等于2048司致,助記詞單詞列表的個數(shù)為2048個。所以11位長度就可以完全覆蓋單詞列表的索引聋迎。
-
為什么ENT的長度是32的倍數(shù)
通過公式我們得出MS = (ENT + CS) / 11=(ENT + ENT / 32) / 11得到最終結果:
3ENT = 32 MS
因為ENT和MS都是整數(shù)脂矫,所以得出ENT是32的倍數(shù),MS是3的倍數(shù)
單詞表
理想的單詞列表具有以下特征:
-
最好的單詞選擇方式
選擇的單詞最好只需要輸入單詞的前4位就可以唯一標識單詞
-
避免類似單詞
像"build" 和 "built", "woman" 和 "women", 或者 "quick" 和 "quickly"這類單詞容易記錯或者寫錯霉晕。應該避免使用
-
單詞排好序
- 單詞列表被排序庭再,允許更高效地查找代碼單詞
(即實現(xiàn)可以使用二分搜索而不是線性搜索) - 這也允許使用trie(前綴樹),例如為了更好的壓縮
- 單詞列表被排序庭再,允許更高效地查找代碼單詞
單詞列表可以包含本地字符牺堰,但它們必須使用規(guī)范化表單兼容性分解(NFKD)以UTF-8編碼拄轻。
從助記詞生成種子
用戶應該使用密碼來保護他們的助記詞。如果用戶沒有提供密碼伟葫,程序將會用空字符串""代替恨搓。
為了從助記詞中生成二進制的種子。我們使用PBKDF2函數(shù)筏养,以一個助記詞句子(以UTF-8 NFKD表示)為參數(shù),使用"mnemonic" + 密碼作為鹽(以UTF-8 NFKD表示)斧抱。迭代次數(shù)設置為2048次,HMAC-SHA512函數(shù)作為為隨機函數(shù)渐溶。生成的密鑰長度為512位(等于64字節(jié))辉浦。
鹽格式示例:
- 密碼為空時鹽="mnemonic"
- 密碼為"111111"時,鹽="mnemonic111111"
這個種子可以在后續(xù)使用BIP-0032或類似方法生成確定性錢包茎辐。
助記詞的選擇和助記詞生成種子的方法是獨立的宪郊。這樣做使得代碼變得很簡單。由于對助記詞句子對結構沒有約束拖陆,客戶端可以自用的實現(xiàn)他們的單詞列表或者助記詞生成器弛槐。從而簡稱拼寫錯誤或者其它需求。
雖然使用不是由“生成助記符”部分中描述的算法生成的助記符是可能的慕蔚,但不建議這樣做丐黄,并且軟件必須使用單詞表計算助記符句子的校驗和,并且如果它無效則發(fā)出警告孔飒。
所描述的方法還提供了合理的可否認性灌闺,因為每個密碼短語都會生成有效的種子(因此也就是確定性的錢包)艰争,但只有正確的種子才能使所需的錢包可用。
助記詞單詞列表
這里是這種語言作為助記詞單詞列表的使用方式桂对,客戶端可以根據(jù)需求定制自己的助記詞單詞列表甩卓。