Können wir das Protokoll so gestalten, dass eine Adresse nur einmal als Ausgabe in einer Transaktion verwendet werden kann?

Die meisten Benutzer verwenden ihre Adressen für Einzahlungen wieder (dh sie erhalten Geld mehr als einmal an einer bestimmten Adresse).
Kann das Protokoll so gestaltet werden, dass eine Adresse nur einmal als Output in einer Transaktion verwendet werden kann?
Ich denke, es müsste eine Möglichkeit geben, schnell nachzuschlagen, ob eine Adresse bereits "aufgebraucht" ist.
Außerdem müsste es einen Weg geben, irgendwie an die "nächste Adresse" zu kommen. Wenn beispielsweise eine Adresse für Dividenden verwendet wird und diese nur einmal verwendet werden kann, sollte der Dividendenzahler in der Lage sein, automatisch eine neue Adresse zu erhalten, ohne dass der Eigentümer (Zahlungsempfänger) eine erneute Eingabe vornehmen muss. (eine einmalige Einrichtung davon wäre in Ordnung)
Der Sinn dabei ist, die Privatsphäre zu verbessern.

Dies sind nur Gedanken, Kommentare erwünscht.

Ich glaube, Android Bitcoin Wallet 4 rät von der Wiederverwendung von Adressen ab, indem es immer automatisch eine neue Adresse anzeigt.

Antworten (2)

Alice lässt ihren Computer von Mallory hacken und sie stiehlt ihre Brieftasche. Glücklicherweise hatte Alice es mit einer starken Passphrase verschlüsselt. Alice will Mallory verklagen, weil sie in ihren Computer eingebrochen ist, also holt sie sich einen Anwalt, Bob.

  • Alices Adresse, 10 BTC --> Bobs Adresse

Unglücklicherweise für Alice kontrolliert Mallory einen Knoten im Bitcoin-Netzwerk, nicht allzu weit von Alice entfernt, der schnell erkennt, dass die Transaktion von Alice stammt (sie hat alle ihre Adressen), und stattdessen die Transaktion an Hunderte von Knoten gleichzeitig weiterleitet:

  • Mallorys Adresse, 1000 Satoshis --> Bobs Adresse

Was mit Alices ehrlicher Transaktion nicht vereinbar ist.

Jetzt passieren drei Dinge:

1) Alice versucht, die Bitcoins an eine andere von Bob angegebene Adresse zu senden

2) Alices Knoten sehen ihre Transaktion als doppelte Ausgabe an und weigern sich, jede Transaktion, die diese Münze ausgibt, an eine andere Adresse weiterzuleiten

3) Mallorys Transaktion wird schließlich abgebaut. Zurück zu dem Versuch, die Münzen für Bob auszugeben.

Mallory kann mit ihrer Position andere schelmische Dinge anstellen, z. B. Alice erlauben, ihr Bitcoin bei einer Spendenaktion der Kirche auszugeben, aber nicht in einer Abtreibungsklinik (vorausgesetzt, sie kennt die Adressen von beiden).

Der wichtigste Weg, auf dem Menschen heute ihre Privatsphäre in Bitcoin verlieren, ist die heuristische Analyse der Blockchain, nicht die Wiederverwendung von Adressen. Die Einführung einer neuen Netzwerkregel zum Schutz der Benutzer vor ihrer eigenen Dummheit wird die Privatsphäre nicht wesentlich verbessern (die meisten Wallets verwenden Adressen sowieso nicht wieder) und öffnet die Benutzer für einige interessante Angriffe.

Ich verstehe deine Argumentation nicht. Mallory hat keinen Zugriff auf Alices private Schlüssel (Alices Wallet ist verschlüsselt). Auch wenn Mallory die Transaktion von Alice nicht weiterleitet, werden andere Knoten dies tun. Es braucht Zeit, um einen neuen Tx zu erstellen, in dieser Zeit würde Alices Tx Hunderte von Knoten erreichen. Die Wiederverwendung von Adressen erleichtert die heuristische Analyse.
Mallory würde Alices Schlüssel brauchen, um Alices Münze doppelt auszugeben. Aber hier sprechen wir von einem doppelten Empfang , nicht von einem doppelten Verbrauch. Der Vorschlag besteht darin, eine Transaktion ungültig zu machen, wenn dieses Ausgabeskript jemals in einem Block enthalten war. Das bedeutet, dass alle Knoten, die Mallorys Transaktion zuerst sehen, sich weigern würden, die von Alice weiterzuleiten, da das Netzwerk andernfalls kostenlos DoS-fähig gemacht werden könnte, indem Millionen von Transaktionen an eine Adresse gesendet werden. Mallory benötigt dazu nur die Adresse von Alice, nicht ihren privaten Schlüssel.
Was "Es braucht Zeit, um einen neuen TX vorzubereiten" ja, aber es kann im Voraus getan werden: Mallory signiert eine Transaktion mit einem signierten und einem anderen nicht signierten Ausgang, indem er clevere SigHash-Flags verwendet. Sobald sie Alices Transaktion sieht, fügt sie einfach Bobs Adresse in die unsignierte Ausgabe ein, was nur ein memcpy() kostet, keine Krypto erforderlich.
Ja, ich folge jetzt, danke. Was ist mit all den anderen Knoten, die die ursprüngliche tx von Alice erhalten würden? Glauben Sie nicht, dass sich einer schneller ausbreiten würde? Ich stimme dem DoS-Angriff hier zu. Wir können jedoch eine Anforderung hinzufügen, dass die Gebühr in diesen Txs ausgegeben wird. (Ich meine, es würde Kosten verursachen, ungültige txs zu senden) Trotzdem, wie gesagt, dies soll das Gespräch anregen, es muss einen Weg geben, dies irgendwie so zu gestalten, dass keine neuen Angriffsvektoren eröffnet werden.
Angenommen, Mallory kontrolliert genügend gut verbundene Knoten, damit ihre Transaktion 90 % der Hashleistung vor der von Alice erreicht. Dies bedeutet, dass Alice eine Erfolgswahrscheinlichkeit von 10 % hat. Eine Anwaltskanzlei war wahrscheinlich ein schlechtes Beispiel, da Alice es einfach wiederholen kann, bis ihre Transaktion akzeptiert wird (was schließlich mit 100%iger Wahrscheinlichkeit passieren wird), und nur einmal die Gebühr bezahlt. Wenn Bob in zwei Tagen bezahlt wird, macht es ihm nichts aus, und Mallory zahlt eine Gebühr für jeden Angriffs-TX, bis Alice erfolgreich ist. Wenn Alice in einem Lebensmittelgeschäft wäre, wäre Mallorys Angriff ärgerlicher.
Mallory hat jedoch einen besseren Trick im Ärmel. Sie kann versprechen, jede Transaktion, die mit Alices anfänglicher Ausgabe an Bob behaftet ist, rekursiv zu blockieren. Wenn sie genug Leute davon überzeugt, dass ihr Angriff erfolgreich sein wird, werden Alices Münzen an Wert verlieren und nicht mehr fungibel sein, da es ewig dauern wird, sie auszugeben, und höhere Gebühren erfordern, um erfolgreich ausgegeben zu werden. Wenn Bob wirtschaftlich vernünftig ist, wird er Alices verfluchte Münze ablehnen, es sei denn, er hat einen guten Münzbecher zur Hand.

Ich denke, es müsste eine Möglichkeit geben, schnell nachzuschlagen, ob eine Adresse bereits "aufgebraucht" ist.

Es gibt, in Bitcoin. Fügen Sie einfach die Adresse in das Suchfeld (nicht die in der Kopfzeile) auf https://blockchain.info ein .

Bezüglich Ihrer Neuanlage einer Adresse: Dies ist mit der derzeitigen Vorgehensweise nicht nur unmöglich, sondern widerspricht auch Ihrem Ziel einer verbesserten Privatsphäre.

Lassen Sie uns zunächst über die aktuelle Situation sprechen. Adressen sind Hashes öffentlicher Schlüssel (vereinfacht). Diese öffentlichen Schlüssel sind kryptografisch privaten Schlüsseln zugeordnet, die nur ihr Besitzer kennt, weil ihre Kenntnis es einem ermöglicht, das Geld auszugeben, das an die ihnen zugeordneten Adressen gesendet wurde. Hashes sind unidirektional, was bedeutet, dass Sie den Hash von etwas bestimmen können, aber nicht, dass etwas nur den Hash enthält. Um an eine andere Adresse des Empfängers zu zahlen, mussten Sie entweder eine bekannte Funktion wie das Erhöhen um 1 auf dem privaten Schlüssel ausführen – was unmöglich ist, nicht nur, weil Sie den öffentlichen Schlüssel aufgrund seines Hashs nicht finden können, sondern auch, weil Sie können den privaten Schlüssel angesichts des öffentlichen Schlüssels nicht finden – oder irgendwie auf eine Liste mit Adressen des Empfängers zugreifen, was das Ziel einer erhöhten Privatsphäre untergraben würde.

Nun zu allen fiktiven Situationen, also werden alle Besonderheiten von Bitcoin in diesem Absatz gestrichen. Wenn ich der erste bin, der an Herrn Schmidts Adresse 1e9Kp22bezahlt, und Sie 5 Minuten später an dieselbe Adresse zahlen möchten, müssen Sie sich eine neue Adresse besorgen. Es kann entweder eine oder mehrere Adressen geben, die danach kommen können, 1e9Kp22aber es gibt sicherlich nur eine kleine Anzahl von ihnen, damit Herr Müller die richtige finden kann. Sei Φ(α)die Menge aller Adressen, die die möglichen nächsten Adressen nach der Adresse α sind. In dieser allgemeinen, fiktiven Situation können wir die Möglichkeit nicht ausschließen, einfach neue Adressen von Mr. Smith erstellen zu können, ohne das ausschließliche Recht des Eigentümers von Coins zu untergraben, diese auszugeben. Da du einen φ ∈ Φ(α)zum Bezahlen finden kannst und nichts weiter weißt als mich und ∀α∈Addreses : |Φ(α)| small, kann ich deinen findenφindem Sie einfach alle Elemente finden Φ(α)und untersuchen, an welche Geld gezahlt wurde. Da wir jetzt beide wissen, dass die Adresse Herrn Müller 1e9Kp22gehört, und ich gerade erfahren habe, dass φsie auch Herrn Müller gehört, wissen wir beide, dass die Adresse, die die andere Person verwendet hat, Herrn Müller gehört.

Die einfache Lösung dieses Problems in der Praxis besteht darin, für jede erwartete Zahlung, beispielsweise für jeden Einkauf in einem Webshop, einfach eine andere Adresse anzugeben. Warum sollte uns der Ladenbesitzer überhaupt die gleiche Adresse geben? Adressen sind völlig kostenlos.