Frage zur Hashberechnung

Hi zusammen
Ich habe eine Frage über das Erstellen einer Prüfsumme: Braucht es mehr Rechenleistung, um einen Hash zu erstellen, wenn der Input grösser ist? Oder anders formuliert: Kann der Hash eines kleinen Blockes schneller errechnet werden, als der eines grossen Bockes?

Falls dies einen relevanten Unterschied macht, könnte es ja Sinn machen, nur nach leeren Blöcken zu suchen. Ist dies ein Mitgrund dafür, dass immer wieder leere, oder zumindest „nicht volle“ Blöcke geminet werden?

Greez

SHA-256 unterteilt den Input in Blöcke mit jeweils 512 Bit, die dann nacheinander durch die eigentliche Kompressionsfunktion laufen. Das Ergebnis von Block 1 ist Ausgangspunkt für Block 2, und so weiter, bis am Ende der finale Hashwert übrig bleibt. Größere Inputs benötigen also mehr Operationen, wobei das in der Praxis (beim einfachen Berechnen einer Prüfsumme) meist keine relevante Rolle spielt.

Ist der Input kleiner als 512 Bit, wird er auf 512 Bit aufgefüllt, d.h. der Input ist immer mindestens 512 Bit (genauer gesagt ist die Nachricht maximal 448 Bit lang, die restlichen 64 Bit geben glaube ich die ursprüngliche Länge der Nachricht an).

Transaktionsdaten werden nicht direkt gehasht. Im Blockheader werden die Transaktionen durch eine Merkle Root, was im Prinzip auch nur ein Hash ist, referenziert. Nur wenn ich etwas an den Transaktionen verändere, muss ich diesen Wert neu ausrechnen, ansonsten kann er einfach gleich bleiben.

Daher reicht es nur den Header zu hashen (und damit deutlich weniger Daten, ein Header hat nämlich nur 80 Byte – also zwei Blöcke in der Hashfunktion). Änderungen an den Transaktionen beeinflussen den Hash trotzdem genauso, nur eben über einen Umweg.

Nein, siehe hier: Ungewöhnliche Bitcoin Blöcke und wo sie zu finden sind

1 „Gefällt mir“

Danke für die ausführliche Antwort. Sehr nett :grinning: