Zerocoin

Zerocoin ist ein kryptografisches Protokoll, das die öffentliche Verknüpfung zwischen der Ausgabe und der späteren Einlösung einer Münze aufbrechen soll. Ian Miers, Christina Garman, Matthew Green und Aviel D. Rubin von der Johns Hopkins University stellten es in 2013 als vorgeschlagene Erweiterung von Bitcoin vor. Zu den zentralen Instrumenten gehören kryptografische Commitments, ein Akkumulator und Zero-Knowledge-Beweise.[1]
Der Name bezeichnet sowohl ein Protokoll als auch die darin erzeugten temporären Münzen. Es ist von Zcoin, der später in Firo umbenannten Kryptowährung, und von Zerocash zu unterscheiden, einem späteren Forschungssystem aus dem Umfeld von Zcash. Mehrere unabhängige Kryptowährungen implementierten von Zerocoin abgeleitete Designs; ihre Releases, Parameter und Sicherheitsreaktionen unterschieden sich.[2][3][4][5]
Hintergrund und Zweck
Bitcoin zeichnet Transaktionen in einem öffentlichen Hauptbuch auf. Adressen dienen als Pseudonyme und garantieren keine Anonymität: Transaktionsbeziehungen und Informationen außerhalb der Blockchain können Aktivitäten einer Person zuordnen. Ein bloßer Adresswechsel beseitigt die im Transaktionsgraphen enthaltenen Informationen nicht.[1]
Ein verwahrender Mixing-Dienst versucht, diesen Graphen zu verschleiern, indem er Gelder annimmt und zurücksendet. Sein Betreiber kann die Verbindungen erkennen oder Einlagen nicht zurückzahlen. Zerocoin schlug stattdessen vor, die Einlösung durch Konsensregeln und kryptografische Beweise zu kontrollieren, ohne eine Bank oder den Betreiber eines Mixing-Dienstes mit der Ausgabe privater Münzen zu betrauen. Damit entfällt eine Form des Verwahrungsvertrauens; kryptografische Annahmen und Setup-Annahmen bleiben bestehen.[1][6]
Wie das Prägen und Ausgeben funktionieren
Prägen und das Coin-Commitment
Zum Prägen erzeugt der Nutzer eine geheime Seriennummer S und einen Zufallswert r und erstellt dann ein Commitment C. Das Paper verwendet ein Commitment im Stil von Pedersen, geschrieben als C = g^S h^r mod p. Das öffentliche C verbirgt S; mit r kann der Eigentümer C später dieser Seriennummer zuordnen. Ein Commitment ist keine Verschlüsselung: Beim Ausgeben wird ein Beweis über den gebundenen Wert verwendet, statt C für alle zu entschlüsseln.[1][6]
Die Mint-Transaktion bindet den entsprechenden Wert in der Basiswährung zuzüglich etwaiger Gebühren. Der ursprüngliche Prototyp verwendete einen festen Münzwert. Die vorgeschlagene Bitcoin-Integration sperrte den Wert für gewöhnliche Ausgaben, sodass er nur nach den Zerocoin-Regeln eingelöst werden konnte; der Nutzer bewahrte die geheimen Coin-Daten in einer Wallet auf.[6]
Der Akkumulator und der Membership Witness
Gültige öffentliche Commitments werden in einem kryptografischen Akkumulator zusammengefasst, einem kompakten Wert, der eine Menge repräsentiert. Ein Membership Witness liefert die Informationen, die nötig sind, um zu beweisen, dass ein bestimmtes Commitment zu dieser Menge gehört. Der Ausgebende beweist, dass er einen solchen Witness besitzt, ohne das Commitment offenzulegen. Durch die kompakte Darstellung muss nicht jede mögliche Mint-Transaktion in jedem Beweis aufgeführt werden.[1][6]
Ausgeben und Verhindern von Doppelausgaben
Beim Ausgeben werden S und ein Zero-Knowledge-Beweis veröffentlicht, der S mit einer gültigen, im Akkumulator enthaltenen Münze verknüpft, deren Öffnung der Ausgebende kennt. Nodes prüfen den Beweis und gleichen S mit zuvor akzeptierten Seriennummern ab. Eine erneute Verwendung derselben Seriennummer wird als Doppelausgabe abgewiesen. Zieladresse und eingelöste Stückelung bleiben sichtbar; der Beweis soll verbergen, aus welcher Mint-Transaktion der Wert stammt.[6][3][5]
Beispielsweise können mehrere Nutzer Münzen derselben Stückelung prägen. Eine spätere Ausgabe beweist die Berechtigung, eine Münze einzulösen, ohne deren ursprüngliches Commitment zu benennen. Die Veröffentlichung einer Seriennummer ermöglicht es dem Netzwerk, eine wiederholte Einlösung abzulehnen, ohne dass der Ausgebende die ursprüngliche Mint-Transaktion offenlegen muss. Dies ist eine konzeptionelle Beschreibung des Protokolls und keine Aufforderung, Zerocoin-Transaktionen an Bitcoin zu senden.[6][5]
Die Autoren entwickelten einen modifizierten bitcoind-Prototyp. Ihr vollständiger Vorschlag erforderte ein neues Verhalten bei der Transaktionsvalidierung; seine Einführung in einer bestehenden Chain war daher sowohl eine Konsensänderung als auch eine kryptografische Implementierungsaufgabe. Die separate Bibliothek libzerocoin stellte grundlegende kryptografische Routinen bereit; Anwendungen mussten weiterhin Transaktionsformate, Mint-Validierung, die Erfassung ausgegebener Seriennummern und die Einlösung implementieren.[1][7][6]
Datenschutzversprechen und Einschränkungen
Feste Stückelungen machen die infrage kommenden Münzen vergleichbar, schränken aber Zahlungen ein. Der ursprüngliche Vorschlag erlaubte mehrere Stückelungen über separate Protokollinstanzen mit gemeinsamen öffentlichen Parametern. Ein Betrag, der mehrere Münzen mit fester Stückelung umfasst, erfordert mehrere Ausgaben mit jeweils eigenem Beweis. Bei einer Einlösung konnte außerdem eine weitere Mint-Transaktion entstehen, sodass Werte zwischen Stückelungsinstanzen übertragen werden konnten.[1][8]
Die angesammelte Menge von Mint-Transaktionen garantiert nicht dauerhaft so viele plausible Ursprünge. Das Paper nennt einen Grenzfall: Sind alle früheren Mints eingelöst, kann eine neue Mint-Transaktion die einzige mögliche Quelle der nächsten Ausgabe sein. Anzahl der Mints und Ausgaben, Stückelungswahl und Zeitpunkt beeinflussen, welche Schlüsse ein Beobachter ziehen kann. Die praktische Anonymität hängt daher neben der Korrektheit der Beweise auch von der Aktivität anderer Nutzer ab.[1][8]
Der Schutz der Ledger-Daten verbirgt nicht automatisch den Netzwerkursprung einer Transaktion. Das Paper behandelt Netzwerkanonymität gesondert; ein kompromittiertes Wallet kann die geheimen Daten offenlegen, die Münzen ihren Mints zuordnen. Auch verbirgt die Verschleierung der Verbindung zwischen Mint und Ausgabe nicht alle öffentlichen Transaktionsziele und Beträge. Diese Grenzen unterscheiden die ursprüngliche Konstruktion von einem System, das vollständig private Transfers innerhalb eines abgeschirmten Ledgers unterstützt.[1][6][3]
RSA-Parameter und Trusted Setup
Der Akkumulator verwendet einen RSA-Modulus N, der aus geheimen Primfaktoren gebildet wird. Wer diese Faktoren behält, kann den Schutz des Akkumulators vor gefälschten Mitgliedschaftsbeweisen untergraben und möglicherweise gefälschte Münzen ermöglichen. Eine sichere Parametererzeugung und die Vernichtung der geheimen Faktoren sind daher getrennte Fragen vom Verzicht auf einen verwahrenden Mixing-Dienst.[1][8]
Das ursprüngliche Paper erörtert sowohl eine Parametererzeugung mit Trusted Setup und anschließender Vernichtung der Faktoren als auch eine vorgeschlagene Alternative ohne Trapdoor namens RSA UFOs. Implementierungen müssen anhand ihrer tatsächlichen Methode zur Parametererzeugung bewertet werden. Dass Zerocoin für einzelne Transaktionen keinen vertrauenswürdigen Aussteller benötigt, belegt nicht, dass jedes Deployment ein vertrauensfreies Setup hat.[1][8]
Rechenaufwand und spätere Forschung
Zerocoin erreicht eine stärkere Trennung zwischen Mints und Ausgaben auf Kosten größerer Beweise und zusätzlicher Berechnungen. Rational Zero beschreibt das ursprüngliche Design mit 80 Bit als System mit einem Ausgabebeweis von etwa 25 KB und einer Verifizierungszeit von etwa 0.5 Sekunden bei diesen Parametern. Dies sind historische Messungen aus der Forschung, keine Spezifikationen oder Benchmarks für das heutige Bitcoin oder jedes spätere Zerocoin-Deployment.[8]
Auch die Autoren von 2013 testeten Blöcke in einem modifizierten Bitcoin-Client. Ihr Versuch umfasste Blöcke mit 200, 400 und 800 Transaktionen und unterschiedlichen Anteilen von Mints und Ausgaben; ein Block mit 800 Transaktionen, der ausschließlich aus Zerocoin-Transaktionen bestand, wurde in ihrem Setup in weniger als fünf Minuten verifiziert. Das Ergebnis hing von Testhardware, Parametern und Arbeitslast ab. Es bedeutet nicht, dass beliebige heutige Blöcke denselben Aufwand verursachen.[1]
Das Rational-Zero-Paper von 2014 untersuchte stärkere langfristige Anonymität, Teilbarkeit und kleinere Beweise. Eine vorgeschlagene Optimierung verringerte Soundness-Parameter unter der Annahme, dass ein wirtschaftlich rationaler Fälscher für einen Angriff auf eine Münze nicht mehr ausgeben würde, als sich daraus erzielen ließe. Dies war ein spezifisches Bedrohungsmodell mit Grenzen bei Angreifern, die aus anderen als finanziellen Gründen handeln; es war keine allgemeine Sicherheitsgarantie für reduzierte Parameter.[8]
Historische Implementierungen und Vorschläge
ZeroVert
Eine Entwicklerankündigung zu ZeroVert vom November 2014 beschrieb eine auf Zerocoin basierende Kryptowährung und verlinkte eine Wallet-Veröffentlichung. Später bezeichneten die Forscher, die Zerocoin-Schwachstellen untersuchten, ZeroVert als aufgegebenen Vorgänger von Zcoin. Dieses frühere Experiment macht die uneingeschränkte Behauptung irreführend, Zcoin sei die erste Implementierung gewesen. Die historische Veröffentlichung belegt kein heute aktives Netzwerk. Laut Projektankündigung waren Scrypt-N-Merge-Mining mit Vertcoin und insgesamt geplante 8.4 Millionen ZER vorgesehen. Dies sind vom Entwickler angekündigte Spezifikationen, keine unabhängig verifizierten aktuellen Netzwerk- oder Angebotsdaten.[9][5]
Moneta, Zcoin und Firo
Moneta war ein früherer Name des Projekts, aus dem Zcoin hervorging. Die Veröffentlichung im Dezember 2015 war eine Testnet-Phase; laut Rückblick des Projekts wurde der Name vor dem Start des echten Netzwerks geändert. Firo datiert den Start von Zcoin auf 2016-09-28. Poramin Insom war ein Gründer. Eine Testnet-Veröffentlichung und ein Mainnet-Start sind unterschiedliche Meilensteine.[10][11][12][13]
Laut dem Rückblick des Projekts von 2019 verwendete es Zerocoin von September 2016 bis April 2019. Sigma, der Ersatz ohne Trusted Setup, ging am 2019-07-30 live. Im Oktober 2020 kündigte Zcoin die Umbenennung in Firo auf derselben Blockchain an. Weitere Forschung führte zu späteren Datenschutzprotokollen; Lelantus Spark ging am 2024-01-18 im Firo-Mainnet live. Diese Meilensteine beschreiben die Entwicklung dieses Projekts und keine allgemeine Migration aller Zerocoin-Implementierungen.[14][15][2][16]
PIVX und zPIV
PIVX veröffentlichte Wallet 3.0.0 mit dem auf Zerocoin basierenden zPIV am 2017-10-16 und bezeichnete dies als erstes Proof-of-Stake-Deployment des Protokolls. Laut einer späteren FAQ wurde das Prägen von zPIV am 2019-03-07 deaktiviert. Die Umwandlung bestehender zPIV zurück in gewöhnliche PIV blieb eine separate Frage; ein Update vom November 2020 beschrieb öffentliche Ausgaben zur Umwandlung und erklärte, dass die zPIV-Unterstützung mit Version 5.0 enden würde.[17][18][19]
Das spätere SHIELD-System von PIVX verwendet eine andere Datenschutztechnologie und wurde laut Entwicklungsbericht am 2021-01-30 aktiviert. Die Abfolge besteht somit aus einem Start, der Deaktivierung neuer Mints, einer Umwandlungsphase und dem späteren Ersatz – nicht aus einem einzigen Datum, an dem sämtliche zPIV-Funktionen verschwanden.[20][19]
SmartCash, Zoin, Hexxcoin und Veil
Die FAU-Forscher nannten in ihrer Offenlegung vom April 2018 Zcoin, PIVX, SmartCash, Zoin und Hexxcoin als Projekte, die Zerocoin verwendeten. Sie berichteten, dass SmartCash seine Funktion deaktiviert hatte. Veil dokumentierte später seine eigene auf libzerocoin basierende Implementierung und seine Notfallreaktion im 2019. Diese datierten Belege stützen die historische Nutzung, nicht aber die Behauptung, jedes genannte Projekt biete die Funktion heute in gleicher Form an.[5][21]
Anoncoin und verwandte Zero-Knowledge-Systeme
Das Repository von Anoncoin enthält eine Übersicht, die ausdrücklich als alt und unbearbeitet gekennzeichnet ist und Zerocoin als in Entwicklung beschreibt. Sie dokumentiert einen Plan, nicht den Nachweis eines veröffentlichten, funktionsfähigen Zerocoin-Deployments. Die alte Behauptung im Präsens, Zerocoin werde dort gerade implementiert, muss daher historisch eingeordnet werden.[22]
CredaCash gehört zur breiteren Geschichte von Datenschutzsystemen mit Zero-Knowledge-Beweisen; es sollte nicht ohne Beleg als Implementierung des Zerocoin-Akkumulatorsystems behandelt werden. Das eigene Repository beschreibt ein separates Transaktionssystem, das Inputs, Outputs und Beträge verbergen soll. Gemeinsame Zero-Knowledge-Techniken machen zwei Systeme nicht automatisch zu Implementierungen desselben Protokolls. Alte Startprognosen und Leistungsangaben benötigen eigene datierte Belege.[23][3]
Sicherheitsbefunde und Vorfälle
Im Februar 2017 kam es bei Zcoin aufgrund eines Implementierungsfehlers zu einem Inflationsvorfall. Eine akademische Offenlegungsstudie beschreibt einen falschen C++-Operator und die Erzeugung zusätzlicher Münzen. Dies war ein Fehler bei der Softwarevalidierung und unterschied sich von den späteren Schwächen in Zerocoins kryptografischen Konstruktionen. Historische Angaben zur Schadenssumme variieren; der Mechanismus ist besser belegt als eine einzelne uneingeschränkte Finanzzahl.[24]
Im April 2018 legten FAU-Forscher einen Angriff zur Verhinderung von Ausgaben offen: Unter den beschriebenen Bedingungen konnte ein Angreifer die Münze eines ehrlichen Nutzers unausgebbar machen. Daneben berichteten sie über Programmierfehler, die eine unbefugte Erzeugung oder den Diebstahl von Münzen ermöglichen konnten. Die Verhinderung von Ausgaben, Inflation und Diebstahl sind unterschiedliche Folgen mit unterschiedlichen betroffenen Implementierungen und Abhilfemaßnahmen.[5]
Veils zeitgenössischer Bericht unterscheidet einen Exploit der Wrapped-Serial-Implementierung im März 2019 von einer weiteren Schwachstelle, die entdeckt wurde, nachdem Zcoin im April einen Angriff festgestellt hatte. Die Schwachstelle im April ermöglichte gefälschte Ausgaben und Inflation. Veils vorübergehende Reaktion opferte die Anonymität beim Prägen, um den Exploit zu schließen; laut Bericht legte diese Maßnahme frühere Mints nicht rückwirkend offen. Andere Projekte entschieden sich für andere Abschaltungen, Umwandlungen oder Ersatzlösungen.[21][14]
Das ursprüngliche libzerocoin-Repository bezeichnet seinen Code inzwischen als aufgegeben und ungepflegt und weist auf bekannte Exploits hin. Es ist als historischer Implementierungsbeleg nützlich, nicht als aktuelle Produktionsreferenzimplementierung. Die Sicherheit eines nachgelagerten Forks lässt sich weder aus dem ursprünglichen Paper noch aus seinem Namen oder daraus ableiten, dass ein anderes Projekt eine verwandte Schwachstelle behoben hat.[7][24]
Zerocoin, Zerocash und Zcash
Das Zerocash-Paper von 2014 entwickelte ein eigenständiges Zahlungssystem mit privaten Transaktionen auf Grundlage kompakter Zero-Knowledge-Beweise. Es erweiterte den Datenschutz vom Ursprung auf Ziel und Betrag der Zahlung und unterstützte Transfers innerhalb des privaten Systems. Seine Leistungsangaben beziehen sich auf diese Konstruktion, nicht auf das ursprüngliche Zerocoin. Zcash ging aus dieser Forschungslinie hervor; es ist weder ein anderer Name für Zcoin noch für das ursprüngliche Zerocoin-Protokoll.[3][4]
Forschung und Software-Ressourcen
Die ursprünglichen Zerocoin- und Rational-Zero-Paper erläutern die Konstruktion und ihre Abwägungen; das Zerocash-Paper dokumentiert das separate Nachfolgedesign. Das archivierte libzerocoin-Repository und die Integrationshinweise zeigen, welche Funktionen die Prototypbibliothek bereitstellte und was eine Anwendung zusätzlich implementieren musste. Historische Projektankündigungen helfen bei der Datierung von Deployments, während spätere Sicherheitsmeldungen frühere Aussagen dazu einordnen.[1][8][3][7][6]
Quellen
- ↑ 1,00 1,01 1,02 1,03 1,04 1,05 1,06 1,07 1,08 1,09 1,10 1,11 1,12 Miers, Garman, Green and Rubin, Zerocoin: Anonymous Distributed E-Cash from Bitcoin (2013)
- ↑ 2,0 2,1 Firo, Zcoin is becoming Firo, 2020-10-27
- ↑ 3,0 3,1 3,2 3,3 3,4 3,5 Ben-Sasson et al., Zerocash: Decentralized Anonymous Payments from Bitcoin (2014)
- ↑ 4,0 4,1 Zcash documentation, Project History
- ↑ 5,0 5,1 5,2 5,3 5,4 5,5 FAU researchers, A Cryptographic Flaw in Zerocoin (and Two Critical Coding Issues), 2018-04-12
- ↑ 6,0 6,1 6,2 6,3 6,4 6,5 6,6 6,7 6,8 Zerocoin authors, Integrating with Bitcoin clients
- ↑ 7,0 7,1 7,2 Zerocoin authors, archived libzerocoin repository and README
- ↑ 8,0 8,1 8,2 8,3 8,4 8,5 8,6 Garman et al., Rational Zero: Economic Security for Zerocoin with Everlasting Anonymity (2014)
- ↑ ZeroVert developer announcement, 2014
- ↑ Firo project, historical account of ZeroVert, Moneta and Zcoin
- ↑ Firo, sixth-anniversary retrospective, 2022-09-28
- ↑ Contemporaneous interview with Moneta founders, December 2015
- ↑ Firo project, founders and team
- ↑ 14,0 14,1 Firo, Zcoin: 2019 in Review, 2020-01-21
- ↑ Firo, Sigma is Live on Zcoin, 2019-07-30
- ↑ Firo, Lelantus Spark is live on Firo, 2024-01-18
- ↑ PIVX, zPIV launch announcement, 2017-10-16
- ↑ PIVX, FAQ on Zerocoin and PIVX, 2019
- ↑ 19,0 19,1 PIVX, development update, November 2020
- ↑ PIVX, development update Q1 2021
- ↑ 21,0 21,1 Veil, The libzerocoin exploit, security measure, and the future, 2019-05-15
- ↑ Anoncoin project repository, historical unedited overview
- ↑ CredaCash project source repository and protocol overview
- ↑ 24,0 24,1 Böhme et al., Responsible Vulnerability Disclosure in Cryptocurrencies