Sind sogenannte Payment Codes wie sie im BIP-47 (Bitcoin Improvement Proposal) vorgeschlagen werden, die Lösung für einfaches Austauschen von Bitcoin Adressen, ohne auf Privatsphäre verzichten zu müssen? Wie funktioniert das überhaupt und gibt es Nachteile, die man beachten sollte? Die Antworten gibt es in diesem Beitrag!

Das Problem

Die Funktionsweise des Bitcoin-Netzwerks ist nicht wirklich ideal, wenn man viel Wert auf Privatsphäre legen möchte. Alle Transaktionen sind öffentlich nachvollziehbar und kennt jemand eine Adresse, können sowohl die Historie als auch zukünftige Transaktionen eingesehen werden.

Die erste und einfachste Maßnahme gegen dieses Problem ist daher, Adressen nicht mehrmals, also nur für jeweils eine Transaktion, zu verwenden. Mit heutigen Wallets wird dieses Verhalten ohnehin begünstigt, da einem alte bzw. bereits verwendete Adressen oftmals gar nicht mehr angezeigt werden.

Doch was ist, wenn man regelmäßige Zahlungen von jemandem empfangen möchte? Bisher hatte man dafür eigentlich folgende Möglichkeiten:

  • Eine einzelne Adresse veröffentlichen, die dann einfach mehrmals verwendet wird – Schlecht für Privatsphäre
  • Einen erweiterten öffentlichen Schlüssel veröffentlichen[1], damit der Sender selbst beliebig viele neue Adressen erzeugen kann – Schlecht für Privatsphäre
  • Manuell für jede Transaktion eine neue Adresse veröffentlichen -- Unpraktisch
  • Einen Server (z.B. BTCPAY) aufsetzen, der automatisiert Zahlungen bzw. Adressen verwaltet -- Viel Aufwand

Keine dieser Möglichkeiten ist ideal, wobei zumindest die letzten beiden keinen Kompromiss in Richtung Privatsphäre eingehen. Dafür leidet im Gegenzug in irgendeiner Form die Nutzererfahrung. Die letzte Option ist zwar mit Abstand die Beste, allerdings für den einfachen Nutzer mit entschieden zu viel Aufwand verbunden, der sich in den meisten Fällen nicht lohnen würde.

[1] Mit einem Extended Public Key (xpub) ist es möglich beliebig viele Adressen innerhalb einer Wallet bzw. genauer gesagt innerhalb eines Accounts abzuleiten. Veröffentlicht man einen solchen Schlüssel also an einen Transaktionspartner, lernt dieser alle Adressen des Accounts kennen. Man würde demnach sämtliche Privatsphäre gegenüber dem Transaktionspartner aufgeben.

Lese-Tipp: Wie funktionieren HD-Wallets und was sind Ableitungspfade?

Die Lösung

Es bräuchte also so etwas wie eine immer gleich bleibende Kontonummer, mit der man gemeinsam neue Adressen erzeugen kann. Diese Adressen könnte allerdings nicht jeder einfach so aus der Kontonummer ableiten, sonst hätte man schließlich nichts erreicht, sondern man müsste sich zunächst untereinander auf ein Geheimnis einigen, also Informationen austauschen.

Nutzen Bob und Carol die Kontonummer von Alice, hätte Bob entsprechend keinen Zugriff auf die Adressen, die Carol mit Alice erzeugt hat und umgekehrt. Jeder kennt also nur die Adressen, die er kennen soll, was ideal für die Privatsphäre ist. Gleichzeitig muss Alice nicht selbst aktiv werden, sondern einfach nur die Kontonummer veröffentlichen.

Genau diese Funktionalität wird mit BIP-47 und sogenannten Payment Codes ermöglicht und wird vereinzelt sogar bereits angeboten. Die technische Umsetzung schauen wir uns jetzt etwas genauer an, denn auch diese augenscheinlich perfekte Lösung bringt, wer hätte es gedacht, einige Kompromisse mit sich.

Ein gemeinsames Geheimnis

Wenn Bob den Payment Code von Alice mit seiner Wallet einscannt, erzeugt diese zunächst eine Benachrichtigungsadresse. Diese kann ganz einfach und direkt aus dem Payment Code abgeleitet werden und ist damit also für jeden öffentlich. An diese Adresse tätigt Bob allerdings nicht seine eigentlichen Transaktionen, sondern er sendet nur eine Benachrichtigung an Alice, in Form einer Bitcoin Transaktion, die eine besondere Information enthält.

Die beiden führen mithilfe dieser Benachrichtigungs-Transaktion einen Schlüsselaustausch durch. Ohne zu sehr ins technische Detail zu gehen, ermöglicht ein Schlüsselaustausch nach Diffie-Hellman das Erzeugen von einem gemeinsamen Geheimnis, ohne geheime Informationen tatsächlich austauschen zu müssen. Bob benötigt nur den öffentlichen Schlüssel von Alice und seinen eigenen privaten Schlüssel, um das gleiche Geheimnis wie Alice mit ihrem privaten Schlüssel und dem öffentlichen Schlüssel von Bob zu erzeugen.

Mit diesem gemeinsamen Geheimnis als zusätzliche „Zutat“ kann Bob jetzt gemeinsam mit Alice beliebig viele Adressen erzeugen. Alles, was er dafür tun musste, ist eine Benachrichtigung an die entsprechende Adresse von Alice zu schicken. Alice wiederum musste nicht aktiv tätig werden, sondern nur ihren Payment Code öffentlich bereitstellen.

Einfaches Backup

Selbstverständlich muss Alice eine Möglichkeit haben, die individuell erzeugten Adressen ihrer Transaktionspartner irgendwie wiederherzustellen. Praktischerweise kann sie dafür einfach einen Blick auf ihre Benachrichtigungsadresse werfen. Mithilfe der dort eingegangenen Transaktionen kann sie jederzeit die jeweiligen Geheimnisse erneut ausrechnen und die entsprechenden Adressen bzw. Schlüssel erzeugen.

Anders als man zunächst erwarten würde, müssen also nicht ständig neue Backups erzeugt werden.

PayNyms

Aktuell ist die auf Privatsphäre fokussierte Samourai Wallet die größte Anlaufstelle für BIP-47 Payment Codes, welche von der Wallet als sogenannte PayNyms dargestellt werden. Die Sparrow Wallet bietet die Funktion ebenfalls an. Diese Paynyms sind etwas länger als gewöhnliche Adressen und beginnen mit PM8T:

PM8TJfsLCnCbRWQk1aNBnx8JMBpyytV9QMY7uVSuqbXRdyoJvktNuaFb1ivZPhKmZRrMQt3qwyXnVrHtsd9sQzh9P2ojTKMHJsoZ86sK6ZkBf1MkkUkV
Grafische Darstellung als PayNym Bot

BlueWallet

Auch die sehr beliebte Smartphone-Wallet BlueWallet wird in naher Zukunft ein Update mit Unterstützung für PayNyms, also BIP-47 Payment Codes, erhalten. Die Änderung ist auf GitHub, der Plattform, die zur Entwicklung der open-source Wallet genutzt wird, bereits integriert worden.

"BIP-47 in BlueWallet ist bereit für den Start!"

@abhiShandy

Kritik

Der größte Kritikpunkt an den hier dargestellten Payment Codes hängt ironischerweise mit Privatsphäre selbst zusammen. Man kann tatsächlich argumentieren, dass das eigentliche Ziel, also bessere Privatsphäre, nicht wirklich, oder zumindest nicht besonders elegant, erreicht wird.

Der ein oder andere kann es sich vielleicht schon denken: Jeder Transaktionspartner muss zunächst eine öffentlich nachvollziehbare Transaktion an die Benachrichtigungsadresse schicken. Dadurch ist stets bekannt, mit wie vielen Nutzern der Besitzer des Payment Codes Transaktionen getätigt hat. Zwar sind die eigentlichen Zahlungen relativ privat, da niemand die Adressen dem Payment Code zuordnen kann, aber dafür ist die erstmalige „Anmeldung“ öffentlich ersichtlich und eventuell sogar die Identität der Transaktionspartner selbst.

Dieser Nachteil war bisher, also bei manuellem Veröffentlichen von Adressen, nicht relevant. Man holt sich also mit einer speziell auf Privatsphäre ausgelegten Funktion einen völlig neuen Kompromiss für die eigene Privatsphäre an Bord, was fast schon etwas absurd ist.

Dem gegenüber steht eine bessere Nutzererfahrung, da kein manueller Austausch mehr stattfinden muss. Allerdings muss dieser zumindest einmalig mit einer Bitcoin Transaktion stattfinden, die entsprechend Transaktionsgebühren und Zeit (bis zur Bestätigung) kostet. Diese kann man allerdings auch nahtlos in Wallet Software integrieren, sodass der Nutzer gar nichts davon mitbekommt oder sich zumindest nicht aktiv darum kümmern muss.

Fazit

Payment Codes wie im BIP-47 vorgeschlagen werden sicherlich auch zukünftig ihre Anwendung finden. Es bietet für viele einen Mehrwert „feste Kontonummern“ benutzen zu können, ohne die eigene Privatsphäre vollständig an den Nagel hängen zu müssen. Ideal ist die Umsetzung allerdings noch nicht ideal und Privatsphäre im Bitcoin Netzwerk bleibt weiterhin mit relativ viel Aufwand und Kompromissen verbunden.

Für Anbieter wie Relai oder Pocket Bitcoin, mit denen man über einen Sparplan direkt auf die eigene Wallet Bitcoin kaufen kann, könnten solche Payment Codes vielleicht interessant sein. Hier steht man häufig vor dem Problem entweder eine einzelne Adresse oder eben einen xpub an den Anbieter zu veröffentlichen, was wie eingangs erwähnt beides nicht im Sinne der Privatsphäre sein kann. Dafür müssten aber erst einmal die Wallets nachziehen und BIP-47 implementieren, was sich bisher als eine eher schleppende Entwicklung herausstellt. Mit dem anstehenden Update für die BlueWallet werden allerdings sehr viele Nutzer mit der neuen Funktion in Berührung kommen, was die Adoption beschleunigen dürfte.