Bitcoin Wallet Software Electrum Verification

Bei einem Einsatz von Electrum im echten Mainnet solltet Ihr auf jeden Fall die Software auf Veränderungen prüfen. Der Hintergrund ist sehr einfach – wir reden hier von echtem Geld und wenn ich es schaffe, eine modifizierte Version einer Geldbörsen-Software zu verteilen, dann kann ich super einfach die in den Wallets gespeicherten Bitcoins für eigene Zwecke nutzen. Was hält „die bösen Buben“ denn davon ab, z.B. den geheimen Seed des Wallets über die bestehende Internetverbindung „nach Hause“ zu senden? Danach dauert es nur noch ein paar Augenblicke und die Bitcoins hat nun jemand ganz anderes…

Selbstverständlich gibt es für diesen Zweck eine „offizielle“ Lösung (für Windows „Gpg4win“) – hier ist ein Ausschnitt aus der Electrum Download-Seite:

How to verify GPG signatures

GPG signatures are a proof that distributed files have been signed by the owner of the signing key. For example, if this website was compromised and the original Electrum files had been replaced, signature verification would fail, because the attacker would not be able to create valid signatures. (Note that an attacker would be able to create valid hashes, this is why we do not publish hashes of our binaries here, it does not bring any security).

In order to be able to verify GPG signatures, you need to import the public key of the signer. Electrum binaries are signed with ThomasV’s public key. On Linux, you can import that key using the following command: gpg --import ThomasV.asc. Here are tutorials for Windows and MacOS. When you import a key, you should check its fingerprint using independent sources, such as here, or use the Web of Trust.

Ich biete Euch nachfolgende eine Lösung unter Java an, für die die Krypto-Bibliothek „Bouncy Castle“ einbinden müsst. Die beiden notwendigen Bibliotheken „bcprov-jdk15on-164.jar“ und „bcpg-jdk15on-164.jar“ sind in meinem Github-Archiv bereits im Ordner „libs“ für Euch gespeichert.

Den Download und die Einrichtung von Electrum habe ich Euch auf der separaten Seite Bitcoin Wallet Software Electrum bereits gezeigt. Auf der Downloadseite https://electrum.org/#download findet Ihr nicht nur die Software, sondern auch die elektronische Signatur zum Download (auf der rechten Seite einfach auf „signature“ klicken und die Datei herunterladen). Beide Dateien haben die Versionsnummer in ihrem Dateinamen: zum Zeitpunkt der Artikelerstellung war es die Versionsnummer 3.3.8, daher lautet der Name der (portablen Windows) ausführbaren Datei „electrum-3.3.8-portable.exe“ und der Name der Signaturdatei „electrum-3.3.8-portable.exe.asc“.

Um an den öffentlichen Schlüssel („Public Key“) des Unterzeichners („Signierer“) heranzukommen klickt Ihr einfach die nachstehende Internetadresse an () und bekommt eine nackte Textseite zu sehen, die Ihr einfach auf der Festplatte als reine Textdatei abspeichert: „https://raw.githubusercontent.com/spesmilo/electrum/master/pubkeys/ThomasV.asc„. Hinweis: im obigen Ausschnitt aus der Downloadseite findet Ihr den Absatz „Electrum binaries are signed with ThomasV’s public key“ – dort ist der Link ebenfalls vorhanden. Ich empfehle, die neue Datei zum Beispiel „electrum_3_3_8_pgp_publickey.txt“ zu nennen.

Alle drei Dateien gehören in das Wurzelverzeichnis Eurer Java-Entwicklungsumgebung und im Programmcode solltet Ihr die Dateinamen passend zu den aktuellen Namen anpassen.

So sieht die aktuelle Signatur für Electrum Windows 3.3.8 portable aus:

Der Public Key des Entwicklers ist etwas länger:

Bei dem Programm handelt es sich um ein Beispiel von den Entwicklern von Bouncy Castle, welches ich ein ganz klein wenig verändert habe (z.B. feste Dateinamen). Bitte beachtet, das die Beispielprogramme von Bouncy Castle unter der MIT-Lizenz stehen.

und die dazugehörende Utility-Routinen:

Auf der Konsole wird die Signatur überprüft und als Ergebnis (hoffentlich) „signature verified“ ausgegeben:

Alle Quellcodes zum Bitcoin findet Ihr zum Download in meinem Github-Repository, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/Bitcoin. 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: 26.02.2020