Bitcoin Reparatur Paper Wallet MrMaxwell

Ich habe Euch in verschiedenen Beispiel gezeigt, wie einfach Ihr ein „Papierbasiertes Wallet“ erstellen und darauf Bitcoins „speichern“ könnt. Letzten Endes druckt Ihr ein Stück Papier aus, welches 2 Informationen enthält, nämlich den privaten Schlüssel und die aus dem öffentlichen Schlüssel generierte (öffentliche) Adresse des Wallets.

Für dieses Programm übernehme ich die beiden Informationen aus dem Artikel Bitcoin Erzeugung Paper Wallet MrMaxwell: der private Schlüssel im Base58-Format lautet: „93NcHYick9jyRpqNTRKe7TSC34jgC8oN9MUPZbRVWJwAEQXWMfj“ und die öffentliche Adresse wurde so erzeugt: „mogvSaznQeyNEjRtcw4piPHRvx5DFMHiHA“, wobei es sich um Daten für das Bitcoin Testnet handelt.

Nun kann ich Bitcoins auf die öffentliche Adresse überweisen und dann das Blatt Papier sicher in einem Banksafe verwahren. Leider haben die wenigsten von uns ein Laminiergerät im Haus oder – als zweitbeste Lösung – legen den Ausdruck in einem ZIP-Gefrierbeutel in das Schließfach. Was passiert nun bei einem Wasserschaden im Banktresor (wenn z.B. durch ein Hochwasser der naheliegende Fluss über die Ufer steigt und den (meistens im Keller verbauten) Banktresor komplett unter Wasser setzt?

Im größtmöglichen Schadensfall wird das Papier zerstört und unlesbar, aber bei der Kombination „Tintenstrahldrucker“ und speziellem Papier dafür reichen ein paar Tropfen Flüssigkeit aus, um Teile des Ausdruck unlesbar zu machen. So ein vergleichsweise kleiner Schaden kann den Ausdruck unlesbar machen und einen unwiederbringlichen Verlust der Bitcoins bewirken. Solltet Ihr clever gewesen sein und als Schriftgröße z.B. „80“ gewählt haben könnten nur 3 bis 4 Stellen des privaten Schlüssels unkenntlich geworden sein, aber auch die manuelle Suche nach den fehlenden Stellen ist sehr aufwändig.

An dieser Stelle kommt das „Private Key Repair Program“ vom Autor MrMaxwell zu Einsatz, welches alle möglichen Zeichenkombinationen durchprobiert und am Ende die fehlenden Teile des privaten Schlüssels rekonstruiert. Das Programm könnt Ihr entweder im Original aus dem GitHub-Archiv https://github.com/MrMaxweII/repairPrivKey oder aus dem Fork davon bei mir (https://github.com/java-crypto/Bitcoin-MrMaxweII-repairPrivKey) laden. Ihr benötigt nur die Bouncy Castle Bibliothek als externe Bibliothek, diese ist in den Github-Archiven im Ordner „libs“ zu finden.

Die Benutzung ist denkbar einfach: Ihr wählt das zu Grunde liegende Bitcoin Netzwerk aus (Mainnet oder Testnet), tippt den privaten Schlüssel in das Textfeld ein und danach folgt die öffentliche Adresse in das zweite Eingabefeld. Die fehlenden Stellen des privaten Schlüssels ersetzt Ihr durch den Unterstrich („_“) und nach einem Klick auf den Button „Suche“ wird die Lösung gesucht. In meinem Beispiel fehlen 4 Zeichen meines  privaten Schlüssels, den ich so eingebe: „9_N_H_i_k9jyRpqNTRKe7TSC34jgC8oN9MUPZbRVWJwAEQXWMfj“.

So sieht das Programm nach Eingabe des unvollständigen Private Keys dann aus. Die Zahl der Kombinationen steigt exponentiell mit der Zahl der fehlenden Stellen, bei mir hat die Ermittlung rund 1 Minute gedauert:

Das Programm gibt im unteren Bereich den korrekten Private Key aus:

Alle Quellcodes zum Bitcoin Private Key Reparatur-Programm von MrMaxwell findet Ihr zum Download in meinem Github-Repository, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/Bitcoin-MrMaxweII-repairPrivKey oder dem Original Github-Archiv https://github.com/MrMaxweII/repairPrivKey. Alle Programme sind unter Java 11 lauffähig (vermutlich auch unter Java 8) und wurden mit intelliJ IDEA entwickelt, welches für dieses Programm aber nicht notwendig ist.

Letzte Bearbeitung: 18.03.2020