Warum kann nicht jeder beliebige Hash für einen Block verwendet werden? [Duplikat]

Haftungsausschluss: Ich bin völlig neu auf diesem Gebiet, grundlegende Computerkenntnisse sind auf GUI Point-and-Click beschränkt

  1. Ich habe mir angesehen, wie die Schwierigkeit erklärt wurde, dass sie "erhöht" wird, indem die SHA-256-Generation von Blöcken mit mehr führenden 0-Bits erforderlich ist, also eine Folge von 0s am Anfang des Hashs, was immer seltener vorkommt. Wenn dies nicht so erklärt wurde, wie ich es richtig verstehe, bedeutet dies, dass Sie die Bitcoin-Schwierigkeit betrügen und Blöcke erstellen können, wann immer Sie möchten? Sie benötigen lediglich ein benutzerdefiniertes SHA-256-Hash-Generierungsprogramm, das nicht zufällig die angegebene Anzahl von Nullen gefolgt von einem zufälligen SHA-256-Hash generiert, der um die Anzahl der Ziffern gekürzt wird, die der Anzahl der vorangestellten Nullen entspricht, oder einfach ein SHA- 256-Hash und ersetzt dann die führenden Bits durch 0-Bits, um das Schwierigkeitsziel zu erreichen, wodurch ein Block-Hash gefälscht wird. Also von dem, was mir gesagt wurde, ist es A) leicht zu betrügen; ODER B) nicht gut genug erklärt.

  2. Ist ein Block-Hash mit höherem Schwierigkeitsgrad nicht immer weniger sicher, weil er immer weniger zufällig ist? Wenn die Schwierigkeit theoretisch hoch genug steigen würde, würde es nicht erfordern, dass der gesamte Hash NUR 0 Bits enthält, anstatt nur den ersten Teil? Ruiniert das nicht die Sicherheit von Bitcoin, je schwieriger es wird? Hashes sind scheinbar leichter zu knacken, je höher der Schwierigkeitsgrad ist, leichter zufällig zu erraten und leichter zu fälschen. Könnte ich oder jemand anderes nicht einfach Zeichenfolgen von 0 spammen und genauso schnell mit Blöcken belohnt werden, wie sie genug 0s spammen könnten, um einen Hash zu vervollständigen?

Mir ist klar, dass die Antwort auf beide Fragen wahrscheinlich "nein, so ist es nicht" lautet, aber so wurde es im Wiki, in Wikipedia und an verschiedenen anderen Stellen erklärt.

Ich denke, es ist eher so, dass Miner tatsächlich Transaktionen verarbeiten und nicht nur (oder vielleicht nicht einmal, weil diese von beiden Parteien der Transaktion stammen könnten) zufällig Hashes generieren. Es ist wahrscheinlich auch eine Verschlüsselung beteiligt, die nicht richtig erklärt wurde und die, wenn die Schwierigkeit zunimmt, in viel mehr mehreren Schichten hinzugefügt wird, wodurch die bereits verschlüsselten Daten verschlüsselt und erneut verschlüsselt werden.

Die Erklärung über 0 Saiten lässt auch keine stufenlose Schwierigkeit über 1 zu und erscheint aus diesem Grund auch nicht sinnvoll.

Ich würde mir mehr Transparenz wünschen, wie der eigentliche technische Vorgang erklärt wird, auch wenn er so lang ist, dass ich ihn nicht lesen möchte. Es wäre auch toll, Links zu den vollständigen öffentlich veröffentlichten SHA-Standards und Dokumentationen zu finden.

Je transparenter die Sicherheit ist, desto wahrscheinlicher ist es, dass jemand einen Weg findet, sie zu knacken oder zu durchbrechen, wenn dies möglich ist, und obwohl dies nicht wünschenswert ist, ist es besser, dass es früher als später passiert, wenn es passieren kann alle. Somit können robustere Standards implementiert werden, die diese Art von Verletzung blockieren.

Antworten (3)

Hashes sind Einwegfunktionen. sha256("DataGoesHere") --> HashResult, aber bei nur einem HashResult können Sie dann nicht bestimmen, was der Wert der gehashten Daten war.

Wenn Sie auch nur ein Bit dieses HashResult ändern (z. B. eine Null voranstellen), dann sind die Daten, denen es entspricht, völlig anders. So ist es einfach, das HashResult zu erhalten. Es ist im Wesentlichen unmöglich, in die andere Richtung zu gehen und den Wert der Daten zu bestimmen.

Wie erwartet lautet die Antwort auf beides nein :-)

Für die Generierung von Hashes: Der Miner versucht, eine Eingabe zu finden, die, in eine bestimmte Funktion eingespeist, eine Ausgabe ergibt, die bestimmte Eigenschaften erfüllt. Bei Bitcoin ist die Eigenschaft, dass die Ausgabe eine bestimmte Anzahl von Nullen haben muss. Da Ihre Kollegen den Hash aus der Eingabe, die Sie ihnen zur Verfügung stellen (dem Block), neu berechnen, werden sie feststellen, dass der Hash nicht mit der Eigenschaft übereinstimmt, und ihn verwerfen. Tatsächlich wird der Hash nicht einmal direkt weitergegeben, sondern nur der Block, aus dem der Hash berechnet werden kann.

Da das Ziel unerreichbar ist, wurde diese Frage schon einige Male gestellt . Der Kern davon ist, dass H(block) < target. Eine Erhöhung des Schwierigkeitsgrades verringert die Anzahl möglicher Lösungen, aber nicht die Menge, in der Sie nach ihnen suchen müssen, wodurch es schwieriger wird, eine zu finden.

Eine Hash-Funktion ist eine mathematische Funktion, die in einer Richtung einfach auszuführen ist, für die es jedoch keinen bekannten Weg gibt, sie einfach in die andere Richtung auszuführen.

Warum generieren Sie also nicht einen SHA-256-Hash und ersetzen den Anfang des Hashs durch Nullen? Denn dann wäre es nicht mehr der Hasch. Es ist (per Definition einer Hash-Funktion) für jeden einfach, den Hash zu verifizieren.

Warum schreiben Sie kein benutzerdefiniertes SHA-256-Programm, das einen Hash generiert, der mit der erforderlichen Anzahl von Nullen beginnt? Denn (wieder per Definition) bedeutet eine Hash-Funktion, dass es keine Möglichkeit gibt, die Funktion in umgekehrter Richtung auszuführen: Sie können das Ergebnis des Hashs (oder sogar einen Teil des Hashs, wie z. B. die führenden Nullen) nicht vorhersagen. Es gibt keine Möglichkeit, ein solches Programm zu schreiben, sonst würde SHA-256 als "kaputt" gelten und nicht als Hash verwendet werden.

Mining ist im Wesentlichen (wie im verlinkten Artikel beschrieben) das wiederholte Hashen des Blocks, wobei nur ein Feld namens „Nonce“ variiert wird. Ein Miner wird Millionen von möglichen Nonces ausprobieren, in der Hoffnung, dass das Ergebnis am Anfang die erforderliche Anzahl von Nullen hat.