Wie holt die „geheime Kette“ die echte Kette im Langstreckenangriff ein?

Ich versuche, tief in Casper einzudringen, und eines der Dinge, die immer wieder auftauchen, ist der Langstreckenangriff in PoS. Ich verstehe den Angriff auf hohem Niveau – im Grunde würden Sie eine große Anzahl von Blöcken zurückgehen, wo Sie einen großen Anteil am Netzwerk hatten, und anfangen, Blöcke zu schmieden, so dass Sie, wenn Sie auf der Höhe der Hauptkette angekommen sind, einen großen halten würden Betrag der Währung und übernehmen die Kette.

Ich habe hier eine ähnliche Frage bezüglich des Angriffs gesehen, deren Antwort den folgenden Auszug aus dem Ethereum-Blog zitierte:

Nehmen Sie in einem naiv implementierten Proof of Stake an, dass es einen Angreifer mit 1% aller Münzen am oder kurz nach dem Genesis-Block gibt. Dieser Angreifer startet dann seine eigene Kette und beginnt, sie abzubauen. Obwohl der Angreifer nur in 1 % der Fälle für die Erstellung eines Blocks ausgewählt wird, kann er leicht 100-mal so viele Blöcke produzieren und auf diese Weise einfach eine längere Blockchain erstellen.

Die Frage, die ich zu diesem Zitat habe, lautet: Wie genau würde die geheime Kette die übergeordnete Kette übertreffen ? Nach meinem Verständnis besteht der allgemeine Weg, einen Block in PoS 3 abzubauen, darin, diese Gleichung zu lösen:

hash(kernel) ≤ target × balance of UTXO

Wo der Kernel von unten abgeleitet ist:

  • nTimeTx : aktueller Zeitstempel (wird jede Sekunde erhöht)
  • nTxPrevTime: Zeitstempel des UTXO
  • nPrevoutNum: Ausgangsnummer des UTXO
  • nTxPrevOffset: Offset des UTXO innerhalb des Blocks
  • nTimeBlockFrom: Zeitstempel des Blocks, der den UTXO bereitgestellt hat
  • nStakeModifier : eine 64-Bit-Zeichenfolge, die aus der Blockchain gesät wurde

Wie können Sie dies manipulieren, um Blöcke schneller als die übergeordnete Kette abzubauen? Sind es die Zeitstempel?

Vielen Dank!

EDIT: Nachdem ich ein bisschen mehr darüber nachgedacht habe, bin ich mir nicht sicher, ob dieser Angriff tatsächlich machbar ist ... es scheint rein theoretisch zu sein. Meine Logik ist wie folgt: Angenommen, der Angreifer hat seine eigene Chain mit sogar 50 % der gesamten „Mainchain“-Münzen erstellt. Da er sich auf seiner eigenen Kette befindet, hat er 100 % der gesamten gestaketen Coins auf seiner eigenen Kette. Mit 100 % der gesamten Coins auf seiner eigenen Chain wird er sicherlich der einzige Minter auf der Secret Chain sein und wird für die Hälfte der insgesamt möglichen „Minting Opportunities“ auf der Chain ausgewählt.

Da er der einzige Online-Staker in seiner eigenen Kette ist, prägt er tatsächlich jeden Block, aber das Problem ist, dass der Angreifer immer noch der 1-Transaktion pro UTXO pro Sekunde unterliegt, sodass er Blöcke nicht schneller produzieren kann. Er kann sicherlich eine massive Blockchain produzieren, die viel größer als die Mainchain ist, da die Zeit, die er braucht, um durch ein paar Jahre zu beschleunigen, in der Simulation vielleicht nur ein paar Sekunden beträgt, aber das Problem wird sein, dass der Kopfzeitstempel doppelt so lang sein könnte wie die Mainchain (vielleicht ein Jahr), und Kunden werden einfach keine Kette akzeptieren, deren Kopf Jahre in der Zukunft liegt.

Wenn jemand zusätzliche Einsichten oder einen anderen Ansatz hat, um über das Problem nachzudenken, würde ich mich freuen! Ich fand diese Quelle ziemlich gut.

Antworten (2)

Wie der Autor des zitierten Artikels selbst bemerkte:

Ursprünglich dachte ich, dass dieses Problem grundlegend ist, aber in Wirklichkeit ist es ein Problem, das umgangen werden kann. Eine Lösung besteht beispielsweise darin, zu beachten, dass jeder Block einen Zeitstempel haben muss, und Benutzer lehnen Ketten mit Zeitstempeln ab, die ihrem eigenen weit voraus sind. Ein Langstreckenangriff muss also in die gleiche Zeitspanne passen, aber da es sich um eine viel geringere Menge an Währungseinheiten handelt, wird seine Punktzahl viel geringer sein.

Ihre Schlussfolgerung über die Unmöglichkeit der „geheimen Kette“ mit nur 1% Anteil, die die Hauptkette übertrifft, ist also richtig, da die Kunden die Blockzeitstempel validieren (sie können nicht zu weit in die Zukunft gehen).


Der Begriff Long-Range Attack kann sich je nach Kryptowährung und gewähltem Algorithmus auf unterschiedliche Dinge beziehen. Die Formel, die Sie in Ihre Frage aufgenommen haben

hash(kernel) ≤ target × balance of UTXO

gilt nicht für Ethereum und Casper, da es dort kein UTXO gibt.

Der im NeuCoin-Whitepaper beschriebene vorprogrammierte Langstreckenangriff, der sich aus der Tatsache ergibt, dass der Einsatzmodifikator eines bestimmten Einsatzes statisch ist und aufgrund der Verwendung des Münzalters in der Mining-Gleichung, gilt auch nicht für Ethereum.


Ich bin keineswegs ein PoS-Experte, aber ich werde versuchen, die Logik hinter dem in On Stake von V. Buterin beschriebenen Langstreckenangriff zu skizzieren, der sogar mit weniger als 50 % Beteiligung an einer „nicht geheimen“ Kette funktioniert:

  1. Wenn wir den einfachsten PoS-Algorithmus erhalten, bei dem jedes Konto eine bestimmte Chance pro Sekunde hat, einen gültigen Block zu generieren. Diese Chance wird mit der Formel beschrieben:

SHA256(Prevhash + Adresse + Zeitstempel) <= 2^256 * Balance / Diff

  1. „Es steht nichts auf dem Spiel“-Problem: Ein rationaler Miner wird sich entscheiden, auf 2 Chains oder mehr abzubauen, wann immer sich die Gelegenheit bietet, um seinen erwarteten Wert zu maximieren.

    • Bergleute, die nur auf einer einzelnen Kette abbauen, werden als altruistisch bezeichnet. Miner, die auf so vielen Chains wie möglich minen (rational), werden als nicht-altruistisch bezeichnet.
    • Ein Angreifer muss nur die altruistischen Miner überholen, um einen Angriff durchzuführen, daher ist es möglich, diesen Angriff sogar mit einem Einsatz von weniger als 50 % durchzuführen (solange die Einsätze von nicht-altruistischen Minern und Angreifern 51 % betragen).
  2. Um dieses Problem zu lösen, kann der Slasher- Algorithmus verwendet werden. Wenn ein Miner einen Block auf 2 Ketten erstellt, wird er bestraft. Dafür kann jeder den Block von der anderen Kette in die ursprüngliche Kette einreichen, um die Mining-Belohnung zu stehlen und den Doppelwähler zu bestrafen.

    • Bergleute müssen Sicherheitsleistungen hinterlegen, damit es im Falle einer doppelten Abstimmung eine Möglichkeit gibt, sie zu bestrafen
    • Der Miner muss das Recht haben, die Kaution letztendlich abzuheben, und sobald die Kaution abgehoben ist, gibt es keinen Anreiz mehr, nicht über eine weit zurückliegende Fork mit diesen Coins abzustimmen ( Referenz ). Beispielsweise hat der Miner nach 1000 Blöcken das Recht, seine Einzahlung abzuheben.
  3. Langstreckenangriff ist, wenn ein Miner beginnt, eine Sidechain 1000 oder mehr Blöcke zurück zu schürfen.

    • Andere nicht-altruistische Bergleute werden auch auf dieser Kette minen, da es keine Bestrafung gibt und der erwartete Wert höher ist.
    • Tatsächlich wird sogar ein Schwarzmarkt von Menschen erwartet, die ihre alten privaten Schlüssel verkaufen, was darin gipfelt, dass ein Angreifer im Alleingang Zugang zu den Schlüsseln erhält, die irgendwann in der Geschichte über 50 % des Währungsangebots kontrollierten, und den Angriff durchführt ( Referenz ).

Die Lösung, wie der Autor feststellte, besteht darin, in jeden Client eine Regel einzuführen, um keine Forks zu akzeptieren, die mehr als 1000 Blöcke zurückreichen. Das Problem ist jedoch, was passiert, wenn ein neuer Benutzer das Bild betritt. Dann hält er hybride PoW/PoS- und Social-Graph-Systeme für eine mögliche Lösung.


Mit dem im Mauve Paper beschriebenen Finalitäts-Gadget :

selbst mehrheitliche Kollusionen können keine 51%-Angriffe mit mittlerer oder langer Reichweite durchführen, ohne ihren gesamten Äther zu zerstören.

Danke für Ihre Antwort. Ich weiß, dass diese Frage nicht sehr spezifisch für Ethereum selbst ist, da es nicht unter diesem Problem leidet, aber es war schwierig, viele maßgebliche technische Ressourcen zu diesem Thema zu finden. Ich werde Ihnen das Kopfgeld für Ihre Bemühungen aussprechen, aber da der Antwort technische Details zum Angriff fehlen, kann ich sie nicht akzeptieren. Ich werde meine eigene Antwort mit den technischen Details schreiben

Nach langer Recherche verstehe ich diesen Angriff jetzt besser. Ich möchte zunächst anmerken, dass dieser Angriff nicht auf Ethereum zutrifft, da Ethereum ein Proof-of-Work ist, und auch nicht auf Ethereum mit Casper FFG, das darüber gelegt wird, da dies eigentlich immer noch ein Proof-of-Work als Vorschlagsmechanismus ist .

Erstens, um es klarer zu sagen, der in der Frage beschriebene Langstreckenangriff ist eine bestimmte Art von Langstreckenangriff. Es ist wahrscheinlich am besten, es den Angriff „Verlaufsrevision mit alten privaten Schlüsseln“ zu nennen. Es gibt andere Angriffe, die „lange Reichweite“ beinhalten, wie der vorprogrammierte Langstreckenangriff, der im NeuCoin-Whitepaper beschrieben wird, aber das ist eine lange Reichweite in die tatsächliche Zukunft – dieser liegt in der Vergangenheit.

Die eigentlichen Schritte des Angriffs sind wie folgt:

  1. Der Angreifer erlangt N-1000000in der Vergangenheit zu einem gewissen Zeitpunkt die Kontrolle über alte private Schlüssel in der Blockchain, und der Gesamtwert der vom Angreifer gehaltenen Coins ist ein Bruchteil, q, der Gesamtmenge der Coins, die derzeit auf der Mainchain gestaket werden . Nist die aktuelle Höhe der Mainchain.
  2. Der Angreifer modifiziert seinen Client so, dass er zu seiner eigenen geheimen Blockchain wechselt, die N-1000000in der Vergangenheit beginnt. Sie deaktiviert alle eingehenden oder ausgehenden Clientverbindungen.
  3. Der Angreifer beginnt mit dem Prägen von Blöcken und kopiert die Transaktionen jedes Blocks der Reihe nach von der Hauptkette. Die Idee ist, dass die Historie genau gleich sein wird, weil jeder Block genau die gleichen Transaktionen haben wird, aber sie wird jeden Block abgebaut haben, da niemand sonst in der Kette ist. Beachten Sie, dass sie ihre eigenen neuen Transaktionen einbeziehen könnte, aber in Wirklichkeit hat dies keinen Zweck, da sie sowieso nicht mehr als qdie gesamten Münzen gewinnen kann. Was sie also tun wird, ist, alle Transaktionen aus dem Block N-1000000+1in der Hauptkette zu nehmen, sie in ihren Block N-1000000+1in der geheimen Kette zu stecken und zu versuchen, sie zu prägen, indem sie eine Zeit versucht t+1, wo tder Zeitstempel in UNIX-Ticks von Block ist N-1000000. Wenn die Zeit t+1nicht funktioniert, wird sie es versuchent+2usw. Sehen Sie sich die Gleichung in der Frage an, was sie zu lösen versucht.
  4. Irgendwann wird sie eine Zeit finden, in der t+sSekunden N-1000000+1auf der geheimen Kette Minzen blockieren. Sie wird dafür die Coinstake-Belohnung erhalten.
  5. Wiederholen Sie Schritt 3 für jeden Block bis zu einer Höhe , N+nbei nder einige Blöcke hinter dem Kopf der Hauptkette liegen (dies ist möglich, weil sie einfach Transaktionen nehmen kann, die auf dem Mempool der Hauptkette anstehen, und sie in ihre geheime Kette einfügen kann). An diesem Punkt wird sie alle Coinstake-Belohnungen durch das Prägen aller 1000000 Blöcke erhalten haben. Sie kann ihre geheime Blockchain jetzt wieder an das Netzwerk senden, und solange die Clients sie akzeptieren, ist die Kette gültig und sie hat effektiv die „Geschichte neu geschrieben“.

Die eigentliche Ausführung der Schritte 3 bis 5 kann in einem Skript nur ein paar Minuten dauern und ehrlich gesagt wahrscheinlich weniger. Das Problem ist jedoch, dass dieser Angriff nicht durchführbar ist, da der Angreifer immer noch der Ein-Hash-pro-UTXO-pro-Sekunde-Regel unterliegt. Auch wenn sie das Ganze in ein paar Minuten simulieren kann, wird sie, sobald sie blocken N+nkann, wahrscheinlich zu einer Zeit sein t+T, Tdie sehr groß und t+Tdeutlich weiter als die gegenwärtige Zeit ist. Es könnte in Bezug auf die Zeitstempel für den Kopf ihrer Kette zwei Jahre voraus sein, und die Zeitdriftregel von Clients, die keine Blöcke mehr als 2 Stunden in der Zukunft akzeptieren, wird die Kette ablehnen.

Überlegen Sie für ein bisschen mehr Intuition, ob q=1/3, dh sie ein Drittel aller Coins hat, die derzeit auf der Mainchain gestaket werden. In diesem Fall prägt sie jeden Block auf der Secret Chain, aber mit einer Rate von nur einem Drittel der Rate der Mainchain . Sie wird also 1/3keine Gelegenheit mehr haben, an ihrer geheimen Kette zu partizipieren, und nicht mehr. Tatsächlich wird ihr 2/3die Möglichkeit entgehen, ihre geheime Kette durch die Ein-Hash-pro-UTXO-pro-Sekunde-Regel zu pfählen. Wahrscheinlichkeitsmäßig ist es für sie, die Hauptkette in einer Zeit t+Tvon Tweniger als 2 Stunden einzuholen, effektiv null und nähert sich null, wenn die Zeitverzögerung zunimmt, dh es ist viel unmöglicher mit einer Zeitverzögerung von 2000000.

Solange also q > 0,5 ist, kann der Angriff durchgeführt werden. Angesichts der Tatsache, dass die Kosten für die Erlangung der Kontrolle über alte private Schlüssel in Schritt 1 relativ gering sind, ist der Angriff durchaus möglich, oder?
Nein, es ist nicht möglich. Selbst wenn q = 0,75 ist, bewegt sich das Hauptnetzwerk immer noch mit einer Rate von 100 %, wenn dies sinnvoll ist, also bewegt es sich 130 % schneller als Ihre geheime Kette. Denken Sie eher an zwei konkurrierende Ketten als an die 51% Attack-Einstellung. Es reicht nicht aus, mehr als die Hälfte der Hauptkettenleistung zu haben, Sie müssen MEHR als ALLE Hauptkettenleistung haben, wenn dies sinnvoll ist.