Wie Arbeitsnachweise doppelte Ausgaben verhindern

In einem Artikel, den ich gerade lese, heißt es, dass das Proof-of-Work-System in Bitcoin verwendet wird, um doppelte Ausgaben zu verhindern. Genauer:

Stellen Sie sich vor, wir schützen uns auf folgende Weise vor doppelten Ausgaben. Wenn Bob eine Transaktion von Alice erhält, die besagt, dass „Alice ungefähr 1234 BTC an Bob überträgt“, sendet Bob dies an das gesamte Netzwerk, um sie zu bitten, zu überprüfen, ob dies eine legitime Transaktion ist. Sagen wir in der Zwischenzeit, wenn Alice auch dieselbe Nachricht an Charlie gesendet hätte (die besagt, dass sie dieselben 1234 BTC an Charlie überweist), hätte Charlie diese Nachricht ebenfalls gesendet und andere Knoten im Netzwerk würden erkennen, dass Alice versucht, dieselben 1234 BTC auszugeben BTC mit zwei Personen, und sie würden Bob (oder Charlie) wissen lassen, dass dies eine ungültige Transaktion ist. Oder wenn alles in Ordnung ist, würden Bob oder Charlie warten, bis einige Knoten eine Bestätigung senden, dass dies eine gültige Transaktion ist.

SOCKENPUPPEN-ANGRIFF : Das obige Schema würde funktionieren, aber Alice könnte auf folgende Weise schummeln. Sie könnte beispielsweise eine Million gefälschte Identitäten im Netzwerk erstellen, und sie würden Bob und Charlie anlügen, dass die Transaktionen gültig waren, und sie dazu bringen, die Zahlung zu akzeptieren.

Jetzt kommt meine Frage. Es scheint, dass in Bitcoin ein Arbeitsnachweis eingeführt wurde, um genau die oben genannte Art von Socken-Poppet-Angriff zu verhindern. Aber ich sehe nicht, wie der Arbeitsnachweis zum Schutz vor dem oben genannten Sockenpuppenangriff beiträgt. Warum sollte Alice diese gefälschten 100000 Identitäten nicht mehr im Netzwerk einführen können?

Kann jemand ausarbeiten und erklären?

p.s. Ich weiß, was Proof of Work ist, diese Frage hängt eher damit zusammen, wie und warum es den oben erwähnten Sockenpuppenangriff verhindert.

Antworten (3)

Es ist nicht wirklich der Proof of Work, der doppelte Ausgaben verhindert, sondern die Blockchain selbst, die doppelte Ausgaben verhindert. Der Proof of Work ist nur ein Aspekt der Blockchain.

Damit eine Transaktion als endgültig gilt, muss sie sich in der Blockchain befinden. Sonst könnte es für immer verschwinden und jeder vergisst es. Damit eine Transaktion zur Blockchain hinzugefügt werden kann, muss sie in einen Block aufgenommen werden, und Miner führen einen Proof of Work für den Block durch. Damit die Transaktion in einen Block aufgenommen werden kann, dürfen die Ausgaben, von denen sie ausgibt, nicht von einer anderen Transaktion in der Blockchain oder von einer anderen Transaktion im Block ausgegeben worden sein. Wenn eine solche andere Transaktion in der Blockchain existiert, ist der Block ungültig.

Es ist dieser Prozess, Transaktionen in Blöcke einzuschließen, der doppelte Ausgaben vermeidet. Es stellt im Wesentlichen eine Bestellung auf und sagt: "Diese Transaktion ist die echte Transaktion, alle anderen, die irgendwelche der Ausgaben ausgeben, die diese Transaktion ausgibt, sind gefälscht".

Der Proof-of-Work-Mechanismus existiert in Bitcoin, weil das die Blockchain unveränderlich macht. Ein gültiger Arbeitsnachweis bedeutet, dass ein Miner nachweist, dass er im Durchschnitt eine bestimmte Menge an Arbeit geleistet hat, um einen Block zu produzieren. Um diesen Block zu ersetzen, muss jemand anderes ungefähr die gleiche Menge an Arbeit für diesen Block leisten. Wenn jemand einen Block in der Blockchain ändern und ihn von allen akzeptieren lassen möchte, muss diese Person die gleiche Menge an Arbeit leisten, die für die Erstellung des Blocks aufgewendet wurde, und dann dasselbe für jeden einzelnen Block, der darauf folgt, tun, da diese Blöcke seitdem ungültig wären ein Block in ihrer Geschichte hat sich geändert. Dies macht die Blockchain unveränderlich; Der Arbeitsaufwand, der erforderlich ist, um die Geschichte neu zu schreiben, wird als undurchführbar und viel zu kostspielig für die praktische Durchführung angesehen. Dafür gibt es den Proof of Work.

Vielleicht möchten Sie die Frage noch einmal lesen. Nur Blockchain würde nicht ausreichen. Alle Knoten haben lokal eine Blockchain. Wenn Alice also in der Blockchain beider Benutzer gleichzeitig dieselbe Transaktion an Bob und Charlie sendet, scheint die Transaktion gültig zu sein (weil diese Münze noch nicht ausgegeben wurde). Sie brauchen also ein Consesus-Protokoll, bei dem Bob und Charlie zum Beispiel das gesamte Netzwerk fragen würden, ob die Transaktion, die sie erhalten, in Ordnung ist. aber da kommt der Sockenpuppenangriff, den ich erwähnt habe.
So funktioniert die Blockchain nicht. Die Blockchain ist das Konsensprotokoll, bei dem Bob und Charlie das Netzwerk fragen, ob die Transaktion, die sie erhalten, in Ordnung ist. Die Blockchain wird nicht lokal hinzugefügt, wenn neue Transaktionen eingehen. Es wird lokal hinzugefügt, wenn neue Blöcke empfangen werden, und neue Blöcke können nur durch Ausführen des Arbeitsnachweises erstellt werden. Blöcke und Transaktionen müssen auch den Konsensregeln entsprechen, denen der Knoten folgt. Zu diesen Regeln gehört auch der Schutz vor doppelten Ausgaben.
Hier ist der Artikel, auf den ich mich bezog: michaelnielsen.org/ddi/how-the-bitcoin-protocol-actually-works . Abschnitt „Arbeitsnachweis“
Und außerdem können Sie dann erklären (vielleicht als Antwort), WARUM ein Arbeitsnachweis zu Bitcoin hinzugefügt wurde? welchen Zweck erfüllt es?
Ich habe meine Antwort aktualisiert
Bedeutet dies, dass der Knoten alle Blöcke in der Blockchain durchsuchen muss (bis zur Generierung der Ausgabe, von der er ausgibt), um zu bestätigen, dass die Ausgaben, von denen er ausgibt, nicht von einer anderen Transaktion in der Blockchain ausgegeben wurden? ?
@qianfg Ja, aber es gibt intelligentere Möglichkeiten, dies zu tun, als die Blockchain tatsächlich nach jeder Transaktion zu durchsuchen.
@AndrewChow Sie haben die Frage, wie der Angriff blockiert wird, nicht beantwortet.
Danke für diese klare Antwort. Sie sagten, dass es einen Arbeitsnachweis gibt, um es rechnerisch unmöglich zu machen, eine Transaktion zu ändern, und damit auch finanziell unmöglich. Aber wenn wir sagen, es gab eine Transaktion für 10 Millionen Dollar im letzten Block, wäre es dann nicht potenziell profitabel, wenn jemand diesen Block ändern würde?
@NS Es könnte rentabel sein, aber eine Mine müsste schnell handeln und Glück haben. Wenn mehr Blöcke darauf gebaut werden, wird es exponentiell schwieriger und damit teurer, eine Reorganisation durchzuführen.

Damit eine Transaktion gültig ist, reicht es nicht aus, dass sie vom Angreifer gesendet oder von vielen Knoten wiederholt wird. Es muss von einem Knoten im Netzwerk zur Blockchain hinzugefügt werden. Das Hinzufügen der Transaktion zur Blockchain ist nicht einfach, da einige Knoten im Netzwerk PoW machen müssen, was Zeit und Rechenleistung verbraucht.

Innerhalb einer einzelnen Kette können Transaktionen nicht kollidieren. Jeder Knoten akzeptiert die längste Kette als gültig, sodass der Angreifer zwei gleich lange Ketten aufrechterhalten muss, damit ein Angriff erfolgreich ist. Dann akzeptieren einige Knoten eine Kette und andere andere Ketten als gültig, wodurch ein Angreifer Geld zweimal ausgeben kann – innerhalb einer Transaktion auf einer Kette und einer anderen „kollidierenden“ Transaktion auf einer anderen Kette.

Wenn der Angreifer 10 % aller Knoten im Netzwerk hat (nach Verarbeitungsleistung), ist es unwahrscheinlich, dass er 2 solcher Ketten verwaltet und in jede gewünschte unterschiedliche Transaktionen einfügt, da die Mehrheit der Knoten (ehrliche 90 %) ihn mit ihrer eigenen Kette überflügeln wird. Somit wird es (langfristig: 2, 3 oder mehr Blöcke) nur eine Kette geben. Wie gesagt, Transaktionen innerhalb einer Kette können nicht kollidieren, daher können Sie nicht doppelt ausgeben.

Wenn wir davon ausgehen könnten, dass die Mehrheit der Knoten ehrlich ist (dh Regeln befolgt), könnten wir weniger verschwenderische Regeln (dh ohne Proof-of-Work) zum Erstellen eines neuen Blocks verwenden.

Die Sockenpuppen-Referenz

Warum sollte Alice diese gefälschten 100000 Identitäten nicht mehr im Netzwerk einführen können?

Identitätswechsel, ID-Fälschung der Nodes/Miner auf der Grundlage von IP-Spoofing ist in Blockchain „schwierig“, da zunächst ein Proof of Work/ Hash GuessingProblem gelöst werden muss, bevor ein Node eine (bösartige?) Nachricht an das Netzwerk senden kann. Da der zum Senden von Rogue-Nachrichten erforderliche Rechenaufwand (do Hash Guessing) so hoch ist, wird es unpraktisch, 1 Million Identitätswechselanforderungen durchzuführen.

Sie könnte sagen wir eine Million gefälschte Identitäten im Netzwerk erstellen...

Man kann private keysandere Nodes stehlen, um Transaktionen in ihrem Namen zu erstellen, aber es würde immer noch den Blockchain-Konsensprinzipien folgen. Wenn Alice die Mehrheit der Blockchain-Knoten besitzt , kann sie eine Rogue-Transaktion mithilfe des Konsenses authentifizieren. Dies wird allgemein als 51 %-Angriff, Sybil-Angriff bezeichnet .

Das Fälschen von Identitäten ist ziemlich schwierig, und die Szenarien, warum es schließlich scheitern wird, wurden in Crorafs Antwort erläutert .