BIP39助记词生成简单流程

Posted tkblack

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BIP39助记词生成简单流程相关的知识,希望对你有一定的参考价值。

其实,bip39之前有过一些了解,但是都没有过深入的探索,最近具体学习下,顺便记录下:

1.首先,随机生成一个长度为32倍数的128-256位的二进制类型,我们把它称之为熵;

2.对这个生成的熵做sha256计算,取结果的前8位;(这里说明下,虽然取了8位,但是不一定全部用上,具体使用的位数计算:n = 熵的位数/32)

3.用熵与上一步中前n位进行拼接(熵放前),获得一个大整型(我们一般称这n位为校验位);

 这里也说明下,之前我看到网上有人说是将熵以32位分割,然后每段末尾插入1个校验位,于是我特意去找了下代码(以下是golang的示例):

    hash := computeChecksum(data)  // 计算哈希值,data表示熵,字节数组类型
    firstChecksumByte := hash[0]

    // 计算所需插入的校验位数
    checksumBitLength := uint(len(data) / 4)

    dataBigInt := new(big.Int).SetBytes(data)
    for i := uint(0); i < checksumBitLength; i++ {
        // 熵 * 2,即左移1位,这里不会溢出
        dataBigInt.Mul(dataBigInt, bigTwo)

        // 将第i位拼接到末尾
     if uint8(firstChecksumByte&(1<<(7-i))) > 0 {   dataBigInt.Or(dataBigInt, bigOne) } }

4.将上一步得到的大整型每11位分割,每段得到一个整数,并查找助记词表(查看助记词https://github.com/bitcoin/bips/tree/master/bip-0039),从而生成钱包助记词,助记词长度12-24,且为3的倍数。

 

以上是关于BIP39助记词生成简单流程的主要内容,如果未能解决你的问题,请参考以下文章

1.16. BIP39协议:使用助记词生成确定性钱包

分成确定性钱包开发的代码实现(HD钱包服务)

以太坊BIP39助记词到公钥地址的原理与细节

以太坊 助记词提取 账户 公钥 私钥 最新实现可用。

通过代码生成以太坊助记词,私钥,公钥

[转]简单科普私钥地址助记词Keystore的区别