Wie extrahiere ich meine privaten Schlüssel aus einer Protobuf-Wallet?

Jüngste Änderungen am Bitcoin-Client von Andreas Schildbach für Android haben die Option zum Exportieren privater Schlüssel entfernt. Dies wurde durch eine Option zum Sichern des gesamten Wallets ersetzt. Leider werden die Wallet-Daten des Schildbach-Clients in einem obskuren Format namens protobuf (kurz vermutlich für Protocol Buffers) gespeichert. Der Schildbach-Client kann ein Protobuf-Wallet aus seiner AES-codierten Backup-Datei wiederherstellen. Die Protobuf-Wallet kann jedoch nicht in einen anderen Bitcoin-Client wie den Bitcoin Core (QT)-Client importiert werden.

Hervorzuheben ist mir die Befehlszeilenmethode zum Decodieren der von Schildbachs Client erstellten Backups bekannt, die es in der Vergangenheit ermöglichte, die privaten Schlüssel im AES-verschlüsselten Format auf /sdcard/Download zu speichern. Der folgende Befehl hat in der Vergangenheit funktioniert, um eine für Menschen lesbare Kopie meiner privaten Bitcoin-Schlüssel zu erstellen:

openssl enc -d -aes-256-cbc -a -in encrypted-wallet-keys -out decrypted-wallet-keys

Dies funktioniert nicht mehr. Der folgende Befehl erzeugt stattdessen ein nicht AES-verschlüsseltes Protobuf-Wallet.

openssl enc -d -aes-256-cbc -a -in bitcoin-wallet-backup-2014-07-19 -out bitcoin-wallet-backup-2014-07-19-decrypted

Die -out-Datei ist keine ASCII-Kopie meiner privaten Schlüssel, sondern eine Kopie der protobuf-Wallet, die intern vom Schildbach-Bitcoin-Client verwendet wird (zu finden unter /data/data/de.schildbach.wallet/files/wallet-protobuf).

Antworten (8)

Da "als Entwickler ist es einfach" für die meisten Leute wahrscheinlich nicht ausreicht, hier ist die vollständige Schritt-für-Schritt-Anleitung von einem Android Bitcoin Wallet bis zum Importieren der privaten Schlüssel in Electrum, was (endlich ...) für mich funktioniert hat . Diese Lösung verwendet bitcoinj. Der Ansatz mit der .proto-Definitionsdatei und dem Öffnen der Wallet in Python wurde ebenfalls getestet, scheint aber fehleranfälliger zu sein.

Anforderungen:

  • Android Bitcoin Wallet in einer neuen Version (meines Wissens erlauben einige ältere Versionen kein Backup).
  • Bash-Shell: Getestet mit der Windows Bash, sollte aber auf nativem Linux oder OS X funktionieren. Grundkenntnisse ( cdusw.) helfen.
  • Auf meinem System waren maven und openjfx erforderlich. Installieren Sie sie mit sudo apt-get install maven,sudo apt-get install openjfx
  • Elektrum (aktuell: 2.9.2)

Schritt für Schritt:

  1. Backup: Speichern Sie die verschlüsselte Wallet (Sicherheit -> Wallet sichern) und verschieben Sie die Backup-Datei auf Ihren Computer (z. B. per Dateiübertragung, Dropbox, E-Mail...).
  2. Entschlüsseln: Öffnen Sie die Bash, wechseln Sie in Ihr Datenverzeichnis und verwenden Sie openssl enc -d -aes-256-cbc -a -in bitcoin-wallet-backup > bitcoin_decryptedes wie oben beschrieben, wodurch Sie nach dem Verschlüsselungspasswort gefragt werden.
  3. bitcoinj installieren:
    • git clone https://github.com/bitcoinj/bitcoinj.git
    • cd bitcoinj
    • git fetch --all
    • git checkout v0.14.4
    • mvn install(schlägt bei GroupTest in Windows Bash fehl, funktioniert aber trotzdem)
    • cd tools
    • ./wallet-tool
  4. Laden Sie die entschlüsselte Brieftasche und geben Sie die privaten Schlüssel aus:

./wallet-tool dump --wallet=/mnt/d/path/to/wallet/bitcoin_decrypted --dump-privkeys > /mnt/d/path/to/wallet/bitcoin_decrypted_dump.

Bitte beachten Sie, dass dies die unverschlüsselten privaten Schlüssel in der Datei „bitcoin_decrypted_dump“ speichert. Verschieben Sie diese Datei an einen sicheren Ort (z. B. TrueCrypt/VeraCrypt-Container) oder löschen Sie sie nach der Verwendung.

  1. Erstellen Sie eine neue Brieftasche mit den privaten Schlüsseln in Electrum: Datei - Neu/Wiederherstellen - Dateiname - 'Standard-Wallet' - 'Öffentliche oder private Schlüssel verwenden', dann listen Sie die 'priv WIF'-Schlüssel aus der Dump-Datei auf.

Zur Behandlung der BTC/BCH-Frage mit Electrum und Electron Cash lesen Sie bitte die Hinweise auf der Electrum-Webseite.

Wenn es irgendwelche Fragen gibt, zögern Sie nicht zu fragen. Viel Glück!

Quellen:

Bei der Installation von bitcoinj erhalte ich: [ERROR] Fehler beim Ausführen des Ziels org.apache.maven.plugins:maven-compiler-plugin:3.2:compile (default-compile) on project wallettemplate: Compilation failure: Compilation failure: [ERROR] ~ /wallettemplate/src/main/java/wallettemplate/utils/easing/EasingInterpolator.java:[27,24] Paket javafx.animation existiert nicht Und viele ähnliche Fehler danach (javax.something existiert nicht). Irgendwelche Ideen?
Das hat geholfen.
Meine Datei bitcoin_decrypted_dumpenthielt Fehler, sehen Sie sich dieses Pastebin an, was soll ich jetzt tun? Ich verstehe keine Fehlermeldungen, aber ich kann Terminalbefehle ausführen/verstehen.
@jacob: Die Fehlermeldung besagt, dass das Java Development Kit (jdk) fehlt. Sie können es mit "sudo apt-get install openjdk-8-jre" installieren. Bitte bestätigen Sie, ob dies das Problem löst, dann werde ich die Anweisungen aktualisieren.
@Colluphid Ich habe einen Mann, der mir dabei hilft, Java zu installieren und die PATH-Variable festzulegen. Die Ausgabedatei enthält jedoch nicht meinen privaten Schlüssel. Es ist eine große Datei und es sieht so aus, als könnte ich den Block sehen, der die Transaktionen enthält, die ich in meiner Brieftasche durchgeführt habe.
@jacob: Wenn ich mich richtig erinnere, habe ich die Transaktionsliste erhalten, als ich den Dump-Befehl ohne '--dump-privkeys' verwendet habe. Können Sie überprüfen, ob Sie diese Option hinzugefügt haben?

Ich habe versucht, private Schlüssel zu löschen, aber ich konnte nicht. Mit dem Wallet-Tool erhalte ich eine Textdatei mit öffentlichen Schlüsseln, Adressen, einigen anderen Informationen und den Worten: "Seed is encripted".

Also benutze ich dieses Phyton-Skript, um Samen zu erhalten, und es hat anscheinend funktioniert.

Dann verwende ich diese eigenständige Seite: https://raw.githubusercontent.com/iancoleman/bip39/master/bip39-standalone.html , um private Schlüssel zum Importieren in ein BCH-Wallet zu erhalten.

Ich „fand“ nur 85 % der BCH, die ich erwartet hatte (BTC pre Fork). Wie könnte möglich sein? Ich habe versucht, viele Schlüssel über den Schlüssel hinaus zu importieren, der der zuletzt verwendeten Adresse zugeordnet ist....


Update: Ich habe es herausgefunden. Ich musste als Ableitungspfad m/0'/1auf der oben verlinkten Standalone-Seite (mit Ableitungspfad BIP32) verwenden. Einige BTC befanden sich auf Adressen dieser Art.

Ich weiß nicht, ob Sie ein Entwickler sind, da Sie die privaten Schlüssel mit sehr geringem Aufwand ausgeben könnten. Die App basiert auf bitcoinj und das von Ihnen erwähnte protobuf-Format ist das bitcoinj-Serialisierungsformat für die Brieftasche. Exportieren Sie die Brieftaschendatei auf Ihren Desktop und schreiben Sie eine einfache Java-App, die bitcoinj verwendet, um auf die Brieftasche zuzugreifen, und verwenden Sie dann die DumpedKeyKlasse, um die privaten Schlüssel in der weit verbreiteten WIF-Codierung auszugeben.

Protocol Buffer ist eine Open-Source-Serialisierungsbibliothek von Google.

Wenn Sie programmieren können, sollte es nicht zu lange dauern, ein Skript (z. B. in Python) zu erstellen, um den Inhalt des Felds, an dem Sie interessiert sind, herauszubekommen. In diesem Fall das Feld, das den privaten Schlüssel enthält.

Hier ist das Dokument für die Pufferbibliothek des Python-Protokolls: https://developers.google.com/protocol-buffers/docs/reference/python-generated

Die Protokollpufferbibliothek verwendet eine .proto-Datei, um die möglichen Felder im serialisierten Format zu beschreiben. Ich gehe davon aus, dass Sie darauf keinen Zugriff haben. Dies hat den Nachteil, dass Sie die Namen der Felder nicht haben, wenn Sie die Brieftasche deserialisieren.

Das sollte Sie jedoch nicht daran hindern, zu deserialisieren. Sie müssen dann erraten, welcher Wert der private Schlüssel ist.

Die Schildbach-Brieftasche verwendet die BitcoinJ-Serialisierung. Dies ist die .proto-Datei github.com/bitcoinj/bitcoinj/blob/master/core/src/wallet.proto

Um mit Bitcoin-Wallets (und Backups von Wallets) zu arbeiten, können Sie das wallet -tool verwenden . Es ist Teil von bitcoinj und ermöglicht es Ihnen, alle Ihre deterministisch abgeleiteten privaten Schlüssel auszugeben.

Ich hatte eine Menge Ärger, aber am Ende bin ich angekommen. Ich beschloss, es aufzuschreiben; Eine ausführliche Anleitung finden Sie unter https://recoverbch.azurewebsites.net . Hoffe das hilft!

Hätte jemand von Ihnen einen einfacheren Weg, um an diese Schlüssel aus dem Protobuf-Format zu gelangen? Ich versuche, jemandem zu helfen, diese Schlüssel aus der App auf seinem Telefon zu bekommen (um sein Bitcoin Cash zu kontrollieren), und wir haben es so weit geschafft, die Backup-Brieftasche zu entschlüsseln, aber ohne Programmierkenntnisse stecken wir hier fest.

Ich habe gerade eine Antwort gepostet. Ich hatte das gleiche Problem.

Dieses Skript scheint die Arbeit zu erledigen

https://github.com/jleni/wallet-decrypt

Sie müssen nur ein Backup erstellen und es gibt Ihnen eine Eselsbrücke zurück, die Sie in Elektrum oder Elektrum-Cash verwenden können.