Ist es möglich, einen Double-Spend-Angriff zu erstellen, indem ein Tx im Merkle-Baum ersetzt wird?

Diese Frage zu crypto.SE beschreibt, wie Preimage-Angriffe im Bitcoin-Netzwerk vermieden werden.

Für einen zweiten Preimage-Angriff:

hash(x) = hash(y)implizierthash(hash(x)) = hash(hash(y))

Es würde also nicht vor einem direkten Preimage-Angriff schützen. Bitcoin baut einen Merkle-Baum für a b cso: hash(hash(hash(a)+hash(b))+hash(hash(c)+hash(c))).

Sie können wieder sehen, dass, wenn jemand eine c'findet, die denselben SHA-256-Hash wie chat, er sie ersetzen könnte und das Endergebnis immer noch dasselbe wäre.

Es stimmt zwar, dass dies den Widerstand gegen erste Preimage-Angriffe verbessern könnte, aber es gibt keine offensichtlichen Fälle, in denen dies von Bedeutung wäre – ein Angreifer hätte normalerweise den Klartext, der den Hash generiert hat. (Und Preimage-Angriffe auf Adressen scheinen weit hergeholt zu sein, wenn man bedenkt, dass die ECDSA-Operation darin enthalten ist.)

Angenommen, zwei Offline-Transaktionen werden mit demselben c'Hash generiert. Angenommen, es dauert mehrere Monate/Jahre, um jeden Tx zu erstellen. Dann:

  1. Der Angreifer erstellt ein Tx an einen Händler
  2. Der Angreifer erstellt einen zweiten Tx mit den gleichen Eingaben wie Nr. 1. Dann wird ein privater Schlüssel regeneriert, bis der Tx-Hash gleich dem Hash von c' ist.

Frage

  1. Wie reagiert das Bitcoin-Netzwerk auf diese konkurrierenden Transaktionen mit demselben Hash?

  2. Wie würde das Ergebnis anders ausfallen, wenn die Transaktion nicht dem Standard entspräche und daher nicht von allen Bergleuten repliziert würde?

Antworten (2)

Sie sollten auch wissen, dass die Aufgabe, eine SHA256-Kollision (gleicher Hash für zwei verschiedene Byte-Arrays) zu finden, ziemlich komplex ist. Bergleute geben Terahashes pro Sekunde aus, um einen Hash zu finden, der kleiner als ein Ziel ist. Eine genaue Übereinstimmung wäre sehr schwer zu finden.

Außerdem muss der Angreifer bei dieser Aufgabe ein Miner mit genügend Leistung sein, um einen [speziellen] Block zu lösen und zu übertragen, der in die Hauptkette aufgenommen werden soll.

Kurz gesagt, ich kann sagen, dass diese Aufgabe so viel Hashing-Power erfordert – wenn also jemand genug Power dafür hat, kann er eher einen weniger komplexen 51%-Angriff durchführen als diesen.

Selbst ohne die ganze Diskussion über Merkle-Bäume könnte das Vorhandensein von zwei Transaktionen mit demselben Hash zu einer Verzweigung führen, die ohne manuellen Eingriff nicht aufgelöst werden würde.

Da die Transaktionen auch durch ihren Hash im Protokoll identifiziert werden, würden die Clients entweder toder erhalten t', wobei hash(t) = hash(t')bedeutet, dass die Knoten zwar glauben, dass sie dieselbe Transaktion akzeptiert haben, sich aber tatsächlich auf zwei verschiedene Transaktionen geeinigt hätten, die miteinander in Konflikt stehen. Dies würde auf der ganzen Linie zu Chaos führen, wenn eine Transaktion versucht, die von erstellten Ausgaben zu beanspruchen t. Da diese Ausgaben in tund nicht in erstellt werden, t'je nachdem, welche der beiden Sie akzeptiert haben, wäre die Folgetransaktion entweder gültig oder ungültig, und so breitet sich das Problem von einer Transaktion auf viele aus.

Eine Transaktion, die in einem Teil des Netzwerks gültig ist und in dem anderen nicht, führt zu einer Blockchain-Verzweigung, die möglicherweise bestehen bleibt und möglicherweise einen manuellen Eingriff erfordert.

Um auf das von Ihnen genannte Szenario zurückzukommen: Der Händler würde um sein Geld betrogen. Er würde glauben, dass die Gelder ausgegeben werden können, aber jede Transaktion, die er mit diesen Ausgaben versucht, würde als ungültig gekennzeichnet, da er gemäß Ihrem Szenario teinen Großteil der Mining-Power erhält t'und t'es daher in die Kette schafft.

Abgesehen davon gilt SHA-256 als kollisionsresistent, und die Chance, eine Kollision mit einem bestimmten Hash zu finden, erfordert unglaublich viele Versuche. Selbst eine Kollision zwischen zwei beliebigen Eingaben zu finden, ist unglaublich schwierig und Gegenstand vieler Forschungsherausforderungen. Es ist also unwahrscheinlich, dass dies in absehbarer Zeit geschieht.

Verwendet Bitcoin irgendwo SHA1? Ich dachte, dass jeder Hash SHA2-basiert war.
Sie haben natürlich Recht, es ist SHA-256 oder RIPEMD160 für Adressen. Ich werde das in meiner Antwort korrigieren.