从BIP39(助记词)到BIP32(公钥/私钥)

问题描述 投票:0回答:2

我正在开发一些代码,从助记符创建比特币私钥和公钥。我目前对这个过程的理解是:

entropy > nmemonic > seed > public/private keys > public address

我在代码中使用 Trezor 的 nmemonic 库moneywagon

import string
from random import SystemRandom, randrange
from binascii import hexlify, unhexlify
from moneywagon import generate_keypair
from mnemonic import mnemonic

def gen_rand():
    foo = SystemRandom()
    length = 32
    chars = string.hexdigits
    return ''.join(foo.choice(chars) for _ in range(length))

mnemo = mnemonic.Mnemonic('english')

entropy = gen_rand()
# entropy = '00000000000000000000000000000000'

words = mnemo.to_mnemonic(unhexlify(entropy))
seed = hexlify(mnemo.to_seed(words, passphrase='apassphrase'))
address = generate_keypair('btc', seed)

print(words)  
print(seed)
print(address['public']['address'])
print(address['private']['hex'])

如果你注释掉上面的熵行,并运行代码,你会得到:

abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
b'05de15fb96dc0ab9f03c9d411bf84c586c72e7c30bddd413a304896f9f994ea65e7fcafd2c6b796141e310850e5f30b6abc2e6aec79a8ff81f4ba38fde81c403'
15GyM1xxxxxxxxxxxxxxxxxxxxxxTXrrvG
8ede10xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcae501

我的问题是,这些都没有反映在用于生成助记码和公钥/私钥的iancoleman.io/bip39bip32jp.github.io中。

我哪里出错了?

python cryptography bitcoin cryptocurrency mnemonics
2个回答
1
投票

根据您的助记符,两个站点都会生成与您相同的种子:

abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about

另外https://bip32jp.github.io/english/给出了这个特定的助记符给定你的强制熵

entropy = '00000000000000000000000000000000'

(您必须选择基本 16 编码,因为您对

unhexlify
的调用会如此解释此字符串)

第一个站点https://iancoleman.io/bip39/#english似乎启发式地确定熵的字符串编码并将其识别为二进制。这会产生另一个结果。

的值
address['public']['address']
address['private']['hex']

与您的两个页面不同,因为这些页面使用与 Moneywagon 不同的派生算法。 Moneywagon 使用 BIP38 是一种不鼓励的算法。我认为这就是两个网站不提供它的原因。


0
投票

看看

https://github.com/volodymyrprokopyuk/go-wallet

在 Go 中指导设计和实现 BIP-32 HD 钱包,并提供方便的 CLI,以便使用 Nushell 轻松进行实验。

在 Go 中指导设计和实现 HD 钱包,并提供方便的 CLI,以便使用 Nushell(或任何其他 shell)轻松进行实验。钱包 CLI 公开了一个易于使用和实验的 CLI 工具,用于为 HD 钱包生成 BIP-39 助记符、为 BIP-32 HD 钱包导出扩展私钥和公钥、将导出密钥编码和解码为不同的格式,例如xprv,xpub。钱包 CLI 还提供了生成 secp256k1 密钥对、ESDSA 签署交易和验证签名的工具。钱包 CLI 公开了使用 bsae58 和 base58check 编码对数据进行编码和解码的工具,以及使用 ERC-55 地址编码对以太坊地址进行编码的工具。

© www.soinside.com 2019 - 2024. All rights reserved.