Website-Icon BitcoinBlog.de – das Blog für Bitcoin und andere virtuelle Währungen

Silent Payments für Bitcoin biegt in die Zielgerade ein

Pssst ... Bild von Dennis Skley via flickr.com. Lizenz: Creative Commons.

Silent Payment Addresses sollen es ermöglichen, Bitcoins wiederholt an dieselbe Adresse zu senden, ohne an Privatsphäre zu verlieren. Das Protokoll könnte einen langen Wunsch der Bitcoin-Szene erfüllen – und hat nun endlich eine BIP-Nummer bekommen.

Bitcoin-Transaktionen sind, wie ihr hoffentlich alle wisst, pseudonym. Sie sind nicht anonym, weil sie an eine Adresse gebunden sind, aber pseudonym, weil diese Adresse nicht an eure Identität gekoppelt ist. Wenn es euch gelingt, diese Verbindung zu vermeiden, bietet euch Bitcoin eine angemessene finanzielle Privatsphäre.

Wenn … es gelingt.

Denn es ist nicht ganz trivial, zu verhindern, dass Experten für die Onchain-Spionage, deren Server die Blockchain ununterbrochen auswerten, mehr über einen wissen, als man ahnt, enthüllt zu haben. Es passiert schnell, dass man durch ein paar unbedachte Transaktionen versehentlich eine ganze Wallet kompromittiert hat, ohne es auch nur zu bemerken.

Das wichtigste Werkzeug, wie man seine Privatsphäre bei Bitcoin wahrt, ist das Wissen: Wissen darum, wie Transaktionen funktionieren, wie Blockchain-Analysten arbeiten, welche Wallets am besten geeignet sind, um privat zu bleiben.

Eine elementare Praxis, um zumindest eine Basis-Privatsphäre zu halten, ist es, für jede eingehende Zahlung eine neue Adresse zu verwenden. Dies macht es für Blockchain-Beobachter deutlich schwieriger, eure Wallets zu identifizieren. Allerdings ist es nicht in jeder Situation möglich, neue Adressen zu verwenden, etwa wenn man auf einer Webseite eine Adresse für Spenden postet.

Vorschläge, wie man dieses Problem lösen kann, wurden im letzten Jahrzehnt viele gemacht. Doch Silent Payments könnte der erste sein, der es in naher Zukunft in die Wallets schafft.

Die Magie der Kryptographie

Silent Payments ist eines der Protokolle, bei denen die Mathematik der Kryptographie magisch wird. Sie macht etwas, von dem man gedacht hätte, dass es gar unmöglich sein sollte, aber das vollkommen logisch wird, wenn man sich die Gleichungen anschaut.

Zunächst generiert der Empfänger einer Zahlung, erklärt Ruben Somsen, der Erfinder des Protokolls, „eine sogenannte Silent Payment Adresse und veröffentlicht diese.“ Bis hierhin ist der Vorgang ganz normal. Interessant wird es, wenn der Sender ins Spiel kommt. Denn dieser bezahlt nicht direkt an die Adresse, sondern „nimmt einen öffentlichen Schlüssel seiner gewählten Inputs und benutzt diesen, um ein geteiltes Secret abzuleiten, durch das er dann die Silent Payment Adresse modifiziert.“

Ich vermute, ihr habt so wenig verstanden wie ich beim ersten Anlauf. Der Sender verändert die Adresse, so dass die öffentlich sichtbare Adresse für einen Beobachter wertlos wird. Er generiert eine neue Adresse anstelle des Empfängers. Doch wie kann dieser dennoch einen Zugriff auf die Adresse haben, die er gar nicht gebildet hat?

Um das zu verstehen, muss man wissen, dass es es gibt zwar für jeden der möglichen 2256 privaten Schlüssel nur einen passenden öffentlichen Schlüssel gibt, aber die Adresse, die aus dem öffentlichen Schlüssel abgeleitet wird, in einem Format ist, welches nur maximal 2160 Adressen zulässt. Es gibt also eine fast unendliche Anzahl von möglichen Adressen je öffentlichem Schlüssel. Die Silent Payment Address enthält nun die Informationen, die der Sender braucht, um aus dem öffentlichen Schlüssel neue Adressen abzuleiten, welche der Empfänger mit seinem privaten Schlüssel öffnen kann.

Der Empfänger hat also bereits den privaten Schlüssel, noch bevor der Sender eine Adresse generiert hat. Aber woher weiß er überhaupt von der Adresse? Er hat sie ja nicht gebildet, und es ist zu unmöglich, alle potenziellen Adressen zu kennen. Das ist die schwierigere Frage, die eine Variante des Diffie-Hellman-Schlüsseltauschs beantwortet: Der Sender verwendet einen Input der Transaktion als Geheimnis, um die Adresse anzupassen. Damit wird die Blockchain zum Nachrichtenkanal. Dem Empfänger ist es möglich, durch einige Kalkulationen, die nur er, als Besitzer des privaten Schlüssels, ausführen kann, zu erkennen, ob ein beliebiger Input ein Geheimnis für seine Silent Payment Address ist.

Der Empfänger muss also, um von der Theorie in die Praxis zurückzugehen, „lediglich“ jeden einzelnen Input der Blockchain scannen und verarbeiten, um zu erfahren, ob eine stille Zahlung erhalten hat. Über diese kann er dann in seiner Wallet verfügen, während ein Blockchain-Beobachter im Dunkeln bleibt.

Wie aufwändig ist es für die Wallet?

Silent Payments haben einen klaren Vorteil gegenüber anderen Konzepten: Weder müssen die Parteien einer Zahlung eine bestimmte Information austauschen, etwa einen Xpub-Key, was seine ganz eigenen Nachteile hat, noch müssen sie anderweitig miteinander kommunizieren oder Informationen per OP_Return in der Blockchain hinterlassen. Kein bisheriges Verfahren hat die Usererfahrung ganz normaler Adressen so gut rekonstruiert wie Silent Payments.

Der offensichtliche Nachteil ist aber, dass das Scannen der gesamten Blockchain nicht eben eine triviale Aufgabe ist, die etwa für Light-Clients gar nicht zu erfüllen ist. Man braucht einen Full Node, und der muss mehrere Stunden lang arbeiten, um zu erkennen, ob man bezahlt wurde. Dies ist ein äußerst schwerer Hemmschuh dafür, dass sich das Verfahren jemals in der Praxis durchsetzt.

Glücklicherweise lässt sich dieses Problem entschärfen. Man könnte etwa nur das UTXO-Set scannen anstatt die gesamte Blockchain, also 4-5 Gigabyte anstatt ein halbes Terrabyte. Dadurch entgehen dem Scan zwar bereits ausgegebene Transaktionen, aber er findet das gesamte verfügbare Guthaben. Nach einer einmaligen Synchronisierung ist es zudem nur noch notwendig, neue UTXO-Einträge zu prüfen, und weil Silent Payments im Taproot-Format sind, reicht es auch, nur Taproot-Outputs zu erkennen.

Damit werden Silent Payment Addresses gar nicht so unpraktisch, wie es auf den ersten Blick erscheint. Gut umgesetzt sollten nicht nur Bitcoin Nodes, sondern auch SPV-Wallets und womöglich auch Electrum-Wallets in der Lage sein, Silent Payments relativ zügig zu erkennen. Im Grunde steht der Implementierung nichts mehr im Weg – außer die übliche Prozedur der Core-Entwicklung.

Von Version zu Version

Das Silent Payment Protocoll existiert bereits seit ein paar Jahren und gilt als hoffnungsvollstes Verfahren, um das Problem der wiederverwendbaren Adressen zu lösen. Im Lauf dieser Jahre wurde das Protokoll vielfach diskutiert und angepasst.

Nachdem Ruben und seine Mitentwickler im vergangenen Jahr mehrere Versionen entwickelt haben, traten sie im Juni 2023 mit der vierten oder fünften Version an die Mailing-List der Bitcoin-Entwickler, um sich für ein „Bitcoin Improvement Proposal“ (BIP) zu qualifizieren. Ein BIP ist die Voraussetzung, um eine Idee in den Bitcoin-Client zu bringen.

In diesem Zuge erhielt Silent Payment Addresses die BIP-Nummer 352, doch es gab auch weitere Diskussionen und Anmerkungen. Ruben und sein Team haben diese umgesetzt und im August eine Version vorgestellt, die nun annährend final ist. Die Änderungen seit Juni bleiben bei Details, die das generelle Konzept nicht anrühren, sondern nur die Umsetzung um einige kleine Parameter anpassen. Das ist ein ziemlich gutes Zeichen für die Reife und Akzeptanz des Vorschlags.

Dennoch gibt es noch die eine oder andere Frage. Peter Todd merkt an, dass Silent Payment Addresses ein Ablaufdatum haben sollten, falls jemand eine Wallet verliert. Denn anders als normale Adressen seien Silent Payment Addresses explizit dafür gemacht, wiederverwendet zu werden, weshalb es möglich ist, dass jemand die Adresse einmal speichert und immer wieder an sie bezahlt. Ein Ablaufdatum könnte einfach durch ein 3-Byte-Feld an die Adresse angehängt werden und solche Verluste verhindern.

Die Diskussion zu Silent Payment Addresses ist damit noch nicht ganz am Ende. Aber sie hat einen Zustand erreicht, bei dem dem die Chance, es bald als Teil der Bitcoin-Wallets zu sehen, gar nicht so gering ist.

Die mobile Version verlassen