Переход от BIP39 (мнемоника) к BIP32 (открытый / закрытый ключи) - PullRequest
0 голосов
/ 14 января 2019

Я хочу разработать некоторый код, который создает биткойн-секретные и открытые ключи из мнемоники. Мое текущее понимание этого процесса:

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

Я использую библиотеку тремора и 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 / bip39 или bip32jp.github.io для генерации мнемонических кодов и открытых / закрытых ключей.

Куда я иду не так?

1 Ответ

0 голосов
/ 27 января 2019

Оба сайта генерируют то же семя, что и вы, учитывая вашу мнемонику:

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

Также https://bip32jp.github.io/english/ дает эту конкретную мнемонику, учитывая вашу вынужденную энтропию

entropy = '00000000000000000000000000000000'

(вам нужно выбрать кодировку base 16, поскольку ваш вызов unhexlify интерпретирует эту строку как таковую)

Первый сайт https://iancoleman.io/bip39/#english, по-видимому, эвристически определяет строковое кодирование энтропии и распознает ее как двоичную. Это приводит, следовательно, к другому результату.

Значения для

address['public']['address']
address['private']['hex']

отличается от вашего на обеих страницах, поскольку на этих страницах используются разные алгоритмы деривации, чем в Moneywagon. Moneywagon использует BIP38 обескураженный алгоритм. Я предполагаю, что это причина того, что оба сайта не предлагают его.

...