生成助记词
助记符必须以32位的倍数编码熵。随着熵的安全性提高,同时句子的长度也在增加。我们将初始熵长度称为ENT。ENT允许的大小为128-256位。
首先,生成ENT位的初始熵。通过取第一个生成的校验和
ENT/32
它的SHA256哈希的位。该校验和附加到初始熵的末尾。接下来,这些连接的比特位被分成多个11位的组,每个组用从0-2047的数字编码,用作单词表的索引。最后,我们将这些数字转换为单词,并将加入的所有单词组成助记句。
下表描述了初始熵长度(ENT),校验和长度(CS)和生成助记词(MS)的长度之间的关系。
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
bip39的助记词列表:https://github.com/bitcoinjs/bip39/blob/master/wordlists/english.json
生成过程:
1.随机生成 128 bits 的 seed (需是32的倍数)
2.将 seed 进行hash256运算,获取hash值 开头的 4个 bits,与 seed 组成一个组新数值
3.以11bits为单位,拆分 上组新数值,每 11bits 个数值 转成一个10进制数
4.用这个十进制数 作为 助记词单词数组 的下标,获取 对应的 一个单词作为 助记词
5.一共12组11bits数,所以 生成 12个 单词