Electrum

Electrum 如何在 BIP-32 之前計算種子字節?

  • March 17, 2021

作為比特幣的新手並對其進行程式,我正在嘗試從助記符生成 BTC 地址。所以我閱讀了 BIP,並在 Github 中找到了實現這些的程式碼。

我發現 Electrum 沒有實現 BIP-39(如果我沒記錯的話,預設情況下),因為在 BIP-39 中無效的助記符被 Electrum 接受了!

所以我的問題是:**Electrum 如何做自己的“從助記符到種子”部分(至少對於標準錢包)?**如果我沒記錯的話,這個“種子字節”是 BIP-32 中用來生成密鑰的。

我嘗試了以下 Python 虛擬碼(來自“Electrum Seed 版本系統”):

hmac = hmac.digest(b"Seed version", b"...(12 word mnemonic)...", hashlib.sha512)
bip32_thing = Bip32(secret = hmac[:32], chain = hmac[32:]) # default: Bip32 main net version (idk what this means)

但是我生成的主公鑰和 Electrum 的不匹配(很可能我完全誤解了“種子版本系統”)。感謝您的回复!

如果有幫助:我bip-utils在 Python 中使用。

幾個小時後,我找到了!這正是Mnemonic.mnemonic_to_seed()mnemonic.py 中所做的!(連結

最相關的部分是它返回的內容:

seed_byte = hashlib.pbkdf2_hmac('sha512', mnemonic.encode('utf-8'), b'electrum' + passphrase.encode('utf-8'), iterations = PBKDF2_ROUNDS)

哪裡PBKDF2_ROUNDS = 2048。然後,我剛剛…

bip32_node = Bip32.FromSeed(seed_byte)   # Derivation path: "m/"

引用自:https://bitcoin.stackexchange.com/questions/103638