Electrum 2.0: Nicht-BIP39/32-Standardisierung verkompliziert die Sache ungemein. Wieso den?

Electrum 2.0 hat mir einige Frustration bereitet, da es eine nicht standardmäßige Implementierung von BIP32/BIP39 zu sein scheint (HD-Wallets bzw. mnemonischer Seed). Das betreffende Wallet ist ein 2of2-Multisig-Wallet (alles P2SH), wobei der zweite erweiterte öffentliche Schlüssel in pybitcointools erstellt wird

bip32_privtopub( bip32_master_key( sha256("a password") ) ),

dann in Electrum importiert.

Angesichts des 13-Wörter-Seeds, der selbst kein Standard ist, da das letzte Wort eine Prüfsumme ist, hat es sich als unmöglich erwiesen, den xprivSchlüssel aus Electrum zu exportieren.

Wie wird ein mnemonischer Seed in einen erweiterten privaten Schlüssel des BIP32-Standards konvertiert (vorausgesetzt, der Client selbst lässt dies nicht zu)? : EDIT1 : mit großer Mühe, siehe meine Antwort unten

(NEU AUSGERICHTETE) FRAGE : *warum macht Electrum:

  • von BIP0039 abweichen?
  • den Export des privaten Master-BIP32-Schlüssels unmöglich machen?
  • teilweise signierte P2SH-Hex-Txs zurückgeben, die fehlerhaft sind?

Antworten (4)

Es gibt eine alternative Möglichkeit, den Master Extended Private Key (xprv) zu extrahieren: Geben Sie in der Electrum-Konsole einfach Folgendes ein:

wallet.get_master_private_key('x/', gui.password_dialog())

Oder für den privaten Hauptschlüssel einer Brieftasche, die mit Electrum 1.x erstellt wurde, ist es:

wallet.get_seed(gui.password_dialog())

Warnung

Geben Sie niemals Ihr Passwort oder einen privaten Schlüssel in die Konsole ein. Mit anderen Worten, tun Sie Folgendes nicht:

wallet.get_seed('my-password')

Alles, was Sie in die Konsole eingeben, wird vorübergehend unverschlüsselt in Ihrer Brieftaschendatei gespeichert , damit die Befehlsverlaufsfunktion (auf die über den Aufwärtspfeil zugegriffen wird) funktioniert.

Wo um alles in der Welt hast du das gefunden?! Gute Arbeit!
Vielen Dank! Jemand auf Bitcointalk hat heute gefragt, wie man das macht, und ich dachte, ich würde ein bisschen in der Electrum-Quelle stöbern, um zu sehen, ob ich einen besseren Weg finden könnte, bevor ich antworte. Danach war es sinnvoll, diese Antwort zu aktualisieren und die nicht so sichere Methode, die zuvor hier war, loszuwerden.
wallet.get_master_private_key('x/', None)ohne Passwort FWIW, nicht""

Thomas Voegtlin, der Entwickler von Electrum, erläutert die Begründung in den ersten 10 Minuten dieses Interviews. Ich glaube, er hat vor einiger Zeit dasselbe auf der Bitcoin-Entwickler-Mailingliste gepostet.

https://letstalkbitcoin.com/blog/post/epicenter-bitcoin-69-thomas-voegtlin-electrum-spv-wallets-and-bitcoin-aliases

Sein Hauptargument gegen BIP39 ist, dass es keine Versionsnummer und die Anforderung des Wortlistenwörterbuchs enthält, um es zu implementieren.

Hinweis: Juli 2017, Electrum v2.8.3 ... der Befehl lautet jetzt:

getmasterprivate()

Das Passwort-Dialogfeld erscheint automatisch ;)

Hallo HCP, willkommen bei Bitcoin.SE und danke für das Update! Wir versuchen normalerweise, die Frage in jeder Antwort vollständig zu beantworten. Wenn Sie also ein wenig mehr Erklärung hinzufügen könnten, wäre das großartig. Wenn Sie nur einen kleinen Teil einer vorhandenen Antwort aktualisieren möchten, können Sie auch eine Änderung vorschlagen.

Ich habe das gerade bei /r/Bitcoin: gefunden , also gibt es anscheinend eine Exe, um dies zu tun, aber ich bin nicht gerade ein Spiel, da das Herunterladen des Links von Chrome markiert wurde.

Es scheint, dass Electrum verwendet: m/0/0für Brieftaschenadressen und m/1/0für Änderungsadressen.

BEARBEITEN: Es wurde eine Pull-Anfrage für Code eingereicht , der den Root-Seed aus der Electrum 2.0-Seed-Phrase extrahiert:

def electrumv2_extract_seed(words, password=''):
    """Takes Electrum v2.0 13 word mnemonic string and returns seed. Only works on English for now"""
    # clean-up unicode characters
    mnemonic = words[:]
    try:
        mnemonic = unicodedata.normalize('NFC', unicode(' '.join(words.lower().strip().split()))).encode('utf-8') # a string of 13 words
    except Exception as e:
        raise Exception(str(e))
    rootseed = pbkdf2.PBKDF2(str(mnemonic), str('electrum' + password), 2048,  macmodule=hmac, digestmodule=hashlib.sha512).read(64)
    return rootseed

def electrumv2_mnemonic_to_mprivkey(words, password=''):
    return bip32_master_key(electrumv2_extract_seed(words, password=''))

Dies ist für die Verwendung mit pybitcointools wie from bitcoin import *in Python 2.7 vorgesehen