Multisignatur-Bitcoin-Wallets als Diebstahlschutz

Multisignatur-Bitcoin-Wallets als Diebstahlschutz

Wissen | Hintergrund

Bitcoins und andere Kryptowährungen sind besonders anfällig für Diebstähle: Meist genügt ein einziges mitgelesenes Passwort. Bei Multisignatur-Wallets ist die Hürde doppelt so hoch.

Gebrauchsfertige Bitcoin-Stealer gibt es in Darknet- und Untergrundforen schon ab 50 Euro, man muss sie dem Opfer nur noch als Anhang einer möglichst glaubwürdigen E-Mail unterschieben. Einmal installiert, tauschten sie in Bitcoin-­Clients gezielt Zahlungsadressen aus oder greifen Passwörter ab, um das Wallet entsperren und das Guthaben klauen zu ­können.

Um das zu verhindern, wurden Hardware-Wallets populär, bei denen der für Transaktionen benötigte Signaturschlüssel des Wallets auf einem externen Gerät gespeichert ist. Eine andere Möglichkeit bieten Multisignatur-Wallets, kurz Multisig-Wallets, bei denen jede Transaktion durch mehrere Signaturen bestätigt werden muss, bevor sie ausgeführt wird. Indem Sie die Signaturschlüssel auf verschiedenen Rechnern oder wie im nachfolgenden Artikel beschrieben auf einem Raspberry Pi als Offline-Hardware-Wallet speichern, schlagen Sie den Bitcoin-­Dieben ein Schnippchen. Außerdem können Sie mit einem Multisignatur-Wallet Ihr Kryptovermögen so aufbewahren, dass Ihre Erben im Falle eines Falls darauf zugreifen können – aber nicht davor.

Multisignatur ist nur ein Anwendungsfall für Bitcoin Script, der Programmier­sprache, die in jeder Bitcoin-Transaktion die Bedingungen festlegt, unter denen über den Betrag verfügt werden darf. Bei herkömmlichen Transaktionen enthält das Skript lediglich die Zieladresse, die ihrerseits nur ein verkürzter Hash-Wert des Public Keys des Empfängers ist, den vollständigen Public Key und eine mit dem zugehörigen privaten Key signierte Auszahlungsoperation – wobei sich der Absender durch die Signatur als Eigentümer der Quelladresse(n) ausweist.

Im Fachjargon werden solche Skripte mit „p2pkh“ bezeichnet, was für „pay to public key hash“ steht. Weil es in Zukunft möglich werden könnte, mittels Quantenkryptografie von einem Public auf den Private Key zu schließen, wird bei Einzahlungen ein 160 Bit langer Hash des Public Keys verwendet. Außerdem sind Bit­coin-Adressen so nur 20 Zeichen lang und der wesentlich längere Public Key muss erst dann veröffentlicht und in der Blockchain gespeichert werden, wenn die Bitcoins ausgegeben werden – was selbst für einen Angreifer mit Quantencomputer zu spät ist, um noch etwas klauen zu können.

In Bitcoin Script lassen sich auch sehr viel komplexere Auszahlungsoperationen als „pay to public key hash“ formulieren. Die Sprache kennt darüber hinaus Dutzende Befehle, Operationen und Kontrollstrukturen. Grundsätzlich gilt, dass eine Transaktion dann als korrekt betrachtet und in die Blockchain aufgenommen wird, wenn der Reihe nach alle Operationen keinen Fehler erzeugt haben und außerdem der Rückgabewert der letzten Operation wahr ist. Bitcoin ist damit eine der ersten Kryptowährungen, mit der sich – wenn auch nur sehr rudimentäre – Smart Contracts formulieren lassen. So kann es zum Beispiel notwendig sein, ein bestimmtes Passwort anzugeben, um über die Bitcoins zu verfügen.

Möglich ist es aber auch, dass gar keine Ansprüche gestellt werden und der Betrag von jedermann beansprucht werden kann. ­Solche „anyone can spend“-Transaktionen sind aber meist keine Geschenke, sie werden benutzt, um im Zuge eines abwärtskompatiblen Soft-Forks neue Funktionen in das Bitcoin-Protokoll einzufügen.

Im August 2017 wurde diese Methode für die Einführung von SegWit („Segre­gated Witness“, „abgetrennte Bestätigung“) verwendet, um mehr Platz für Transaktionen in der Blockchain zu schaffen: Dabei stehen die signierten Auszahlungsoperationen nicht mehr in der Transaktion und damit im Block, sondern im Anhang des Blocks. Damit ältere Bit­coin-Clients solche Transaktionen ohne Auszahlungsoperationen nicht verwerfen, wird an der Stelle mit OP_TRUE lediglich ein wahrer Wert eingefügt – mit der ein solcher alter Client folgende Transaktionen klaglos akzeptiert, denn die Auszahlungsbedingung wurde ja in jedem Fall erfüllt.

Frei verfügbar werden die Bitcoins dadurch aber nicht, denn die Miner, die alle Transaktionen zu Blöcken verarbeiten, und die Bitcoin-Nodes, die die Blockchain verwalten und verteilen, arbeiten mit der aktuellen Version des Bitcoin-Protokolls und wissen deshalb, wo sie die tatsächlichen Auszahlungsoperationen finden. Eine Transaktion eines alten Bit­coin-Clients, der solche vermeintlich gemeinfreien Bitcoins beansprucht, würde also von den Minern und den Nodes als ungültig verworfen.

Transaktionen, bei denen die Auszahlung nicht einfach an einen Public Key Hash erfolgt, werden mit „p2sh“ abgekürzt, „pay to script hash“. Entscheidend ist auch hier, dass als Zahlungsziel lediglich der Hashwert des Skripts mit den Auszahlungsoperationen verwendet und in die Blockchain aufgenommen wird – das Skript selbst bleibt zunächst unbekannt. Das spart nicht nur Platz in der Blockchain, sondern verhindert auch Angriffe auf das Auszahlungsskript – etwa Versuche, ein Auszahlungspasswort zu erraten. Erst wenn jemand die Bitcoins aus einer solchen „p2sh“-Transaktion für sich beanspruchen will, muss er das zum Hashwert passende signierte Skript vorlegen.

Bei einer Multisig-Transaktion enthält das Skript vereinfacht gesagt die Anweisungen, welche Schlüssel in welchem Zusammenspiel berechtigt sind, über den Bitcoin-Betrag aus dieser Transaktion zu verfügen. So kann es viele verschiedene Schlüssel geben, die einzeln verfügungsberechtigt sind, oder festgelegt sein, dass eine bestimmte Anzahl von Schlüsseln eine Transaktion signiert haben müssen, bevor man auf den Betrag zugreifen darf. Im Fachjargon spricht man von „x of y“-Multisig-Wallets, der wohl gebräuchlichste Typ ist „2 of 3“, wo für eine Transaktion zwei von drei Schlüsseln erforderlich sind.

Verzichtet man auf die SegWit-Unterstützung, was weiterhin akzeptiert ist, lässt sich ein Multisig-Wallet aus den Master Public Keys (MPK, „xpub“) aller Verfügungsberechtigten erzeugen. Der Master Public Key eines deterministischen Wallets ist der Schlüssel, mit dem sich alle weiteren Public Keys eines Wallets erzeugen lassen. Ein nur anhand von Master Public Keys erstelltes Multisig-Wallet kann daher nur den Zahlungsverkehr verfolgen.

Um mit einem Multisig-Wallet selbst Transaktionen erzeugen zu können, muss man das Wallet mit einem (verfügungsberechtigten) Master Private Key („xprv“) anstelle des zugehörigen Master Public Keys erzeugen. Der Master Private Key ist vom Urschlüssel des Wallets, des Seeds, abgeleitet und im Unterschied zum Seed mit dem Passwort des Wallets verschlüsselt. Alternativ kann man das Multisig-Wallet aber auch mit dem Seed anstelle des Master Private Key erzeugen, denn der Master Private Key lässt sich problemlos aus dem Seed erzeugen – umgekehrt der Seed aber nicht aus dem Master Private Key.

In der Praxis werden einfach drei Standard-Wallets angelegt und dann von jedem einzelnen Verfügungsberechtigten durch Eingabe der öffentlichen Schlüssel und eines privaten Schlüssels in einem Bitcoin-Client zu einem Multisig-Wallet zusammengeführt.

Bei Multisig-Wallets mit SegWit-Unterstützung ist das Vorgehen etwas komplizierter. SegWit-Transaktionen, die lediglich an eine andere SegWit-Adresse auszahlen, verwenden als Ziel den Hash eines Public Keys – wobei die Operationen nicht in der Transaktion selbst, sondern abgetrennt gespeichert sind. Dies bezeichnet man, in Anlehnung an „p2pkh“, bei SegWit als „p2wpkh“. Der Master Public Key wird mit „zpub“, der zugehörige Master Private Key mit „zprv“ abgekürzt.

Da bei SegWit die Auszahlungsoperationen von der Transaktion selbst abgetrennt sind, also praktisch ein eigenständiges Skript, benötigt man zum Erzeugen eines SegWit-tauglichen Multisig-Wallets die Hashes der Skripte, die den jeweiligen Master Public Key enthalten – abgekürzt „Zpub“ (man beachte die Groß-Kleinschreibung). Der zugehörige Master Private Key wird dementsprechend mit „Zprv“ abgekürzt. Eine solche SegWit-Transaktion, die ein Auszahlungsskript enthält wird mit „pay to segwit script hash“ bezeichnet, kurz „p2wsh“.

Um Ihre Bitcoins mit einem zweiten Schlüssel abzusichern, würde prinzipiell ein „2 of 2“-Multisig-Wallet genügen. Die Gefahr bei einem solchen Wallet ist aber, dass Sie nicht mehr an Ihre Bitcoins herankommen, sobald Sie einen der beiden Schlüssel verlieren.

In der Praxis hat es sich bewährt, statt eines „2 of 2“-Wallets ein „2 of 3“-Wallet zu erzeugen und den Seed des dritten Schlüssels lediglich auf Papier aufzuschreiben und sicher zu verwahren. So haben Sie einen Notschlüssel für den Fall der Fälle.

Im Alltag kämen lediglich die ersten beiden Schlüssel zum Einsatz: Den ersten Schlüssel verwenden Sie auf Ihrem Arbeitsrechner, um Zahlungseingänge zu beobachten und vor allem, um neue Bitcoin-Transaktionen zu erzeugen. Dabei geben Sie die Zieladresse, den Betrag und die Transaktionsgebühr an. Anschließend signieren Sie die Transaktion mit Ihrem ersten Schlüssel und speichern sie auf einem USB-Stick.

Den zweiten Schlüssel speichern Sie auf einem separaten Rechner, etwa einem Raspberry Pi. Damit Angreifer keine Chance haben, sollte dieser zweite Rechner keine Internetverbindung bekommen. Das ist auch nicht erforderlich, denn Sie müssen lediglich die vorbereitete und auf dem USB-Stick gespeicherte Transaktion zum zweiten Mal signieren und das Ergebnis wiederum auf dem USB-Stick speichern. Anschließend übertragen Sie die fertige Transaktion mit Ihrem Arbeitsrechner ins Internet.

Wenn Sie sichergehen wollen, dass Ihre Erben im Falle eines Falls auch an Ihr Kryptovermögen herankommen, dann sollten Sie statt eines „2 of 3“-Wallets ein „2 of 4“-Wallet anlegen. Wie gehabt sind die ersten beiden Schlüssel für Ihren Arbeitsrechner und den Zweitrechner bestimmt, während Sie den Seed des dritten Schlüssels lediglich auf Papier notiert sicher – aber prinzipiell auffindbar – verwahren. Auch vom vierten Schlüssel benötigen Sie nur den Seed: Diesen schreiben Sie in Ihr Testament, versiegeln es und hinterlegen es bei einem Notar oder dem Nachlassgericht. Andere Möglichkeiten sind ein Nachlassverwalter oder auch ein Bankschließfach. Wichtig ist nur, dass niemand vor der Testamentseröffnung an den Seed des vierten Schlüssels herankommt und – beispielsweise in Verbindung mit dem dritten – so Ihr Kryptovermögen vorzeitig abräumen kann.

Im alltäglichen Gebrauch unterscheidet sich ein solches „2 of 4“-Nachlass-Wallet nicht von einem anderen Multisig-Wallet: Sie verwenden genau wie bei einem „2 of 2“ oder einem „2 of 3“-Wallet die ersten beiden Schlüssel, um Ihre Transaktionen auf dem Arbeitsrechner respektive dem Zweitrechner ohne Internetanbindung zu signieren. Wie Sie einen günstigen Zweitrechner zum Signieren Ihrer Bitcoin­-Transaktionen einrichten, erklärt unser Artikel Multisignatur-Wallets im Raspberry Pi. (mid)


Dieser Artikel stammt aus c't 4/2020.