Datenschutz und Sicherheit gehen als ergänzende und vom Benutzer geschätzte Eigenschaften für Bitcoin Hand in Hand. Bei Blockstream waren wir führend bei der Entwicklung einer Reihe von Methoden zur Verbesserung der Privatsphäre von Bitcoin-Benutzern, von Best Practices für Wallets in Green und Jade bis hin zur Entwicklung von MuSig2 und Confidential Transactions (CT). Während einfache Bitcoin-Transaktionen nur begrenzte Vertraulichkeit bieten, haben vertrauliche Transaktionen durch Verblendung der Transaktionsbeträge bemerkenswerte Fortschritte gemacht. Eine vollständige Anonymität bleibt jedoch weiterhin schwer zu erreichen, und wir beschreiben hier einige neue Wege der angewandten Forschung zur Erreichung dieses Datenschutzziels.
Völlig unkorrelierbare Transaktionen, die sowohl den Betrag als auch den Transaktionsgraphen abschirmen können, sind seit der Einführung von Bitcoin immer interessanter geworden. Während Kryptowährungen wie Monero und ZCash mit Ringsignaturen und SNARKs eine verbesserte Privatsphäre erreicht haben, hat keine von beiden eine vollständige Anonymität mit Unterstützung mehrerer Asset-Typen ermöglicht. Bevor vollständige Anonymität erreicht werden kann, liegt ein entscheidender Schritt in der Weiterentwicklung von Bulletproofs++ (BP++). Diese Verbesserung zielt darauf ab, die Effizienz vertraulicher Transaktionen zu steigern und gleichzeitig die derzeitige Multi-Asset-Unterstützung beizubehalten, ohne dass ein Trusted Setup (als vertrauenswürdig akzeptierte Installation/Einrichtung) erforderlich ist.
Bulletproofs++ ist ein neues, effizienteres, diskretes, protokollbasiertes Signaturausführungssystem, das es uns ermöglicht, die Platzeffizienz vertraulicher Transaktionen zu verbessern. Durch vertrauliche Transaktionen können Benutzer die Vertraulichkeit ihres Transaktionsbetrags wahren und sicherstellen, dass der Nettogeldfluss bei einer Transaktion Null ist. Um geheime Inflation und „negative“ Abflüsse zu verhindern, verwenden vertrauliche Transaktionsprotokolle sogenannte Range Proofs (Bereichsbeweise), um nachzuweisen, dass jeder Output innerhalb eines positiven Bereichs liegt.
Frühe Privatsphäre wahrende Protokolle: Vertrauliche Transaktionen
Das aktuell auf Liquid bereitgestellte CT-Protokoll verwendet Borrome’sche Ring-Signaturen für Range Proofs und vertrauliche Assets zur Unterstützung mehrerer Asset-Typen. Dabei handelt es sich um eines der am frühesten eingesetzten Transaktionsprotokolle zum Schutz der Privatsphäre, dessen Wurzeln direkt auf Greg Maxwells früheste Arbeiten zu Zero-Knowledge Proofs und Bitcoin zurückgehen. Seitdem haben Zero-Knowledge-Proofs eine beispiellose Entwicklung erfahren. Blockstream spielt weiterhin eine aktive Rolle im breiteren Zero-Knowledge-Proof-Forschungsökosystem, insbesondere bei der Entwicklung von Bulletproofs (BP). BP war eine bahnbrechende Konstruktion, da es das erste war, das konkret kleine Proofgrössen ohne Trusted Setup erreichte.
Bulletproofs++: Kompaktheit und Effizienzverbesserung
Die Möglichkeit, Transaktionen kostengünstig zu speichern, abzuwickeln und zu überprüfen, ist für jede Blockchain-Anwendung von entscheidender Bedeutung. Natürlich möchten wir, dass jedes für private Transaktionen verwendete Beweissystem so klein und so effizient wie möglich zu überprüfen ist, um die in der Blockchain gespeicherte Datenmenge zu begrenzen. Die 64-Bit-Range-Proof-Größe von BP++ beträgt nur 416 Bytes, was 39 % kleiner als bei BP und zehnmal kleiner als aktuelle Liquid-Range-Proofs ist. Die reduzierten Proof-Größen würden die Transaktionsgebühren und den Node Speicherbedarf reduzieren. Auf einem handelsüblichen Laptop sind die Verifizierung und Prüfung von BP++ Range Proofs etwa viermal schneller als bei BP, was BP++ für die Blockchain-Verifizierung effizienter macht. Jeder BP++ Range Proof hat etwa die Größe von sieben Schnorr-Signaturen und kann in der Zeit verifiziert werden, die zur Verifizierung von 20 Schnorr-Signaturen erforderlich ist. Durch BP++ werden wir alle Verbesserungen von BP und diese zusätzlichen Verbesserungen in Liquid einbringen.
Bei den aktuellen Range Proofs für Liquid CTs und BPs beweisen wir, dass ein Wert innerhalb eines Bereichs liegt, indem wir die Kenntnis der Bits des Werts nachweisen. Um beispielsweise zu beweisen, dass ein Wert in [0, 2^64 -1] liegt, würden wir die Kenntnis von 64 Bits nachweisen. Bulletproofs++ ermöglicht uns die Verwendung größerer Basen, wodurch die Anzahl der Ziffern reduziert wird, die wir zur Darstellung einer Zahl benötigen. Beispielsweise kann ein Wert in [0, 2^64 - 1] mit nur 16 hexadezimalen Ziffern dargestellt werden, was einer 4-fachen Reduzierung im Vergleich zu Bits entspricht. Dies wird durch eine neuartige Technik ermöglicht, die als reziprokes Argument bezeichnet wird und ein Suchargument implementieren kann. Wenn das reziproke Argument als Lookup instanziiert wird, wird es auch als Log-Derivat-Lookup-Argument bezeichnet.
Unterstützung mehrerer Assets und das reziproke Argument
Das reziproke Argument ist eine Technik, die im Bulletproofs++-Protokoll verwendet wird, um die Unterstützung mehrerer Assets in derselben Transaktion zu ermöglichen. Es ermöglicht im Wesentlichen die Teilnahme verschiedener Arten von Token an der Transaktion, während die Arten aller Ein- und Ausgaben privat bleiben. Die Idee kann durch die Analogie einer Tabelle innerhalb eines Zero-Knowledge Proofs erklärt werden.
Wir können uns das reziproke Argument als eine Möglichkeit vorstellen, eine Tabelle innerhalb eines Zero-Knowledge Proofs zu verwenden; Wenn ein Index und ein Betrag gegeben sind, können wir diesen Betrag bei diesem Index zur Tabelle addieren oder davon subtrahieren. Jeder Input und jeder Output einer Transaktion hat eine Art und einen Betrag. Um zu überprüfen, ob alle Beträge jedes Typs ausgeglichen sind, gehen wir jeden Input durch und fügen den Betrag der Tabelle an dem durch den Typ angegebenen Index hinzu. Dann gehen wir jeden Output durch und entfernen den Betrag aus der Tabelle an dem durch seinen Typ angegebenen Index. Die Transaktion ist nur dann ausgeglichen, wenn alle Einträge der Tabelle Null sind.
# Start with empty table
T = {}
# Add all the inputs
for (v, t) in I:
T[t] += v
# Remove all the outputs
for (v, t) in O:
T[t] -= v
# Check all the amounts in the table are zero
for (t, v) = T.items():
assert(v == 0)
Eine Bulletproofs++ Implementation
Derzeit haben wir den ersten von zwei PRs in libsecp256k1zkp zusammengeführt, die das Normargument implementieren. Dies baut auf dem inneren Produktargument von BP auf und ist das zugrunde liegende Element, das BP++ seine geringe Größe verleiht. Als Nächstes binden wir den zweiten PR ein, der Range Proofs unterstützt. Danach implementieren wir die Unterstützung für mehrere Assets und die notwendigen Beweise, um bestehende Assets privat in das BP++-Asset-Format zu migrieren. Durch die Implementierung in libsecp256k1zkp können wir die standesgemässe Leistung von libsecp nutzen und problemlos auf Liquid ausrollen.
Längerfristig sehen wir unter Nutzung der neuen Flexibilität von BP++ und einiger Forschungsrichtungen bei Blockstream einen Weg hin zu robusten privaten Transaktionen auf Liquid und möglicherweise Bitcoin, der auch eine Unkorrelierbarkeit zwischen Transaktionen und verblendete Beträge (und verblendete Asset-Typen in Liquid) ermöglichen kann.
Zusätzlich zum CT-Kern, der die in BP++ entwickelten Techniken nutzen wird, erfordern unkorrelierbare Transaktionen den Nachweis weitaus komplexerer Aussagen. Dieser Bereich befindet sich noch in der aktiven Forschung.
Datenschutz war schon immer ein wichtiger Teil des Bitcoin-Ethos; Geld erfordert Fungibilität und Fungibilität erfordert Privatsphäre. Unser Ziel ist es, diesen Datenschutz in das Bitcoin-Ökosystem zu bringen, mit BP++ als erstem Schritt. Durch die Ausrichtung auf Simplicity für eine Implementierung von BP++ kann jedes Projekt, das Simplicity unterstützt, BP++ integrieren und mit ihm interagieren.
Um mehr zu erfahren, lesen Sie die neueste Version des Dokuments „Bulletproofs++: Next Generation Confidential Transactions via Reciprocal Set Membership Arguments“, das derzeit im IACR-Eprint-Archiv gehostet und frei verfügbar ist, und sehen Sie sich unsere in Arbeit befindliche Implementierung auf GitHub an.