Sind Bitcoin-Block-Hashes vorhersehbar?

Um die Blockkette zu erstellen, führt das Bitcoin-Netzwerk Hash-Algorithmen für jeden Block aus. Ist es mathematisch möglich, den Hash-Wert von beispielsweise dem 100. Block aus dem letzten Block, der sich derzeit in der Kette befindet, vorherzusagen?

Antworten (2)

Bitcoin verwendet zwei Runden von SHA256 für den gesamten Inhalt jedes Blocks (der einen Verweis auf den vorherigen Block enthält) sowie eine zufällig variierte Nonce. Wenn das Ergebnis dieser Berechnungen unter einem vom Netzwerk festgelegten Schwellenwert liegt, wird es als gültige Lösung betrachtet. Diese Lösungen werden zusammen mit dem Block veröffentlicht, wenn er an das Netzwerk verteilt wird, sodass das Auffinden des Hashs alter Blöcke trivial einfach ist, Sie suchen sie einfach nach. Um zu überprüfen, ob die Mathematik korrekt durchgeführt wurde und das Ergebnis die Kriterien erfüllt, ist nur eine einzige Iteration von sha256(sha256(block+nonce)) erforderlich, während das Finden der geeigneten Nonce beim ersten Mal eine absolut verrückte Anzahl von Versuchen erfordert.

Die wahnsinnige Anzahl von Versuchen ist notwendigerweise darauf zurückzuführen, dass die Ausgabe von sha256 effektiv pseudozufällig ist und einen riesigen Raum abdeckt. Der Algorithmus ist deterministisch, daher wird sha256(x) immer dasselbe Ergebnis haben, aber das Ergebnis ist völlig unvorhersehbar und geringfügige Änderungen des Werts von x werden die Ergebnisse dramatisch verändern.

Die einzige Möglichkeit, die Ausgabe eines kryptografisch sicheren Hash-Algorithmus wie sha256 vorherzusagen, ist ein Pre-Image-Angriff: Sie müssten die Inhalte aller möglichen Blöcke vorgenerieren, sie hashen und die Ergebnisse speichern. An diesem Punkt wäre das Lösen eines Blocks so trivial wie eine Datenbanksuche, vorausgesetzt, Sie könnten alle 2 ^ 256 möglichen Ergebnisse speichern, was Sie nicht können, und Sie könnten alle 2 ^ 256 möglichen Ergebnisse vor dem Hitzetod des Universums generieren , was du nicht kannst.

Nein überhaupt nicht. Der Hash jedes Blocks hängt vom vorherigen Block ab. Und es hängt auch von allen Transaktionen ab, die im Block enthalten sind. Das ist der springende Punkt :-)