SHA-256 ist ein genau festgelegtes Verfahren, das aus Daten einen Fingerabdruck berechnet, den Hash. Dieselbe Eingabe liefert immer dasselbe Ergebnis mit 256 Bit: 32 Byte, meist als 64 hexadezimale Zeichen dargestellt. Bitcoin nutzt es zum Verknüpfen und Prüfen von Daten sowie beim Mining. Der Fingerabdruck ist aber keine verschlüsselte Kopie des ursprünglichen Inhalts.
Stellen Sie sich vor, jemand schickt Ihnen eine Datei und ihren Hash. Durch eine eigene Berechnung können Sie prüfen, ob die heruntergeladenen Daten zu diesem Fingerabdruck passen. Selbst eine kleine Änderung der Eingabe verändert mit sehr hoher Wahrscheinlichkeit das gesamte Ergebnis. Der Fingerabdruck verrät aber weder den Urheber der Datei noch, ob sie sicher ist. Liefert ein Angreifer eine manipulierte Datei samt passendem Hash, stimmen beide überein. Deshalb muss auch die Quelle des Vergleichswerts vertrauenswürdig sein. [1] [5]
Für die drei ASCII-Bytes abc ohne Anführungszeichen und ohne Zeilenumbruch lautet das Ergebnis ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad. Das ist keine zufällig erzeugte Zahl: Jede korrekte Implementierung liefert für genau diese Bytes dieses Ergebnis. Ein zusätzliches Leerzeichen oder ein Zeilenumbruch verändert die Eingabe. Ein anderer Hash bedeutet dann keinen Fehler des Algorithmus. Bei Text ist deshalb auch die Zeichencodierung entscheidend. [3]
Verschlüsselung soll es ermöglichen, eine Nachricht mit einem Schlüssel wiederherzustellen. SHA-256 besitzt weder einen solchen Schlüssel noch ein Umkehrverfahren. Wahrscheinliche Eingaben lassen sich trotzdem ausprobieren: Vermutet jemand hinter dem Hash eine vierstellige PIN, kann er alle 10.000 Kombinationen berechnen und vergleichen. Ein langer Hash ergänzt die fehlende Entropie (die Unvorhersehbarkeit der Eingabe) eines schwachen Geheimnisses nicht. Die Sicherheit hängt auch davon ab, wie viele Möglichkeiten ein Angreifer tatsächlich prüfen muss. [5] [7]
Blockkennungen, txid (Transaktionskennungen) und das Zusammenführen von Hash-Paaren in einem Merkle Tree (einem Baum aus verknüpften Hashes) verwenden SHA256(SHA256(data)). Der zweite Durchlauf verarbeitet die 32 rohen Bytes des ersten Ergebnisses, nicht dessen Textdarstellung aus 64 Zeichen. Das Ergebnis bleibt 256 Bit lang. Doppeltes Hashing ist hier eine Protokollregel, kein Beleg für einen gebrochenen einfachen SHA-256. Bitcoin nutzt auch andere Konstruktionen: Taproot fügt beispielsweise festgelegte Tags zur Eingabe hinzu, um unterschiedliche Verwendungszwecke zu trennen. [2] [4] [6]
Ein Miner verändert wiederholt zulässige Angaben in einem vorgeschlagenen Blockheader und berechnet dessen doppelten SHA-256. Gesucht ist ein Ergebnis, das als Zahl den vorgegebenen Zielwert (target) nicht überschreitet. Miner entschlüsseln keine Nachricht und suchen keinen fremden privaten Schlüssel. Einen passenden Header zu finden erfordert viele Versuche; ihn zu prüfen geht schnell. Der Header verweist auch auf den vorherigen Block. Änderungen an älteren Blöcken stören deshalb die folgenden Verknüpfungen. Ein Full Node (ein Knoten, der Bitcoins Regeln selbstständig prüft) prüft zusätzlich die Transaktionen und übrigen Regeln: Ein passender Hash allein macht einen ungültigen Block nicht gültig. [4]
Es gibt mehr mögliche Nachrichten als 256-Bit-Fingerabdrücke. Daher müssen manche unterschiedlichen Eingaben denselben Hash besitzen. Das nennt man eine Kollision. Entscheidend ist, ob man sie gezielt finden kann. Bei einem idealen 256-Bit-Hash benötigt eine allgemeine Suche nach irgendeiner Kollision ungefähr 2^128 Versuche; die Suche nach einer Eingabe zu einem vorgegebenen Fingerabdruck ungefähr 2^256. Das sind unterschiedliche Aufgaben. Eine gefundene Kollision offenbart für sich genommen keinen privaten Bitcoin-Schlüssel. Diese Zahlen garantieren auch nicht die Sicherheit einer ganzen Wallet oder eines Protokolls. [5]
SHA-256 ist ein Baustein, keine fertige Lösung für jedes Sicherheitsproblem. Es ist absichtlich schnell und deshalb allein ungeeignet, um von Menschen gewählte Passwörter zu speichern: Angreifer könnten Vermutungen schnell durchprobieren. Dafür gibt es spezielle Verfahren zur Passwortableitung, etwa mit einstellbarem Rechenaufwand. Auch das selbst erdachte Rezept „etwas hashen und einen sicheren Schlüssel erhalten“ löst weder das Problem der ursprünglichen Zufälligkeit noch das einer offengelegten Eingabe. Nutzer müssen SHA-256 normalerweise nicht selbst berechnen, sollten aber verstehen, was der geprüfte Fingerabdruck belegt und was nicht. [8] [7]
SHA-256 gehört zur SHA-2-Familie und ist in NIST FIPS 180-4 beschrieben. Vor der Berechnung wird die Eingabe einschließlich ihrer Längeninformation ergänzt und in 512-Bit-Abschnitten verarbeitet, jeweils über 64 Runden. Diese internen Blöcke umfassen 64 Byte und sind keine Bitcoin-Blöcke. Ein Bitcoin-Blockheader umfasst 80 Byte; der vollständige Bitcoin-Block enthält zusätzlich Transaktionen. Die 256 im Namen bezeichnet die Länge des Fingerabdrucks, nicht die Größe eines Blocks oder privaten Schlüssels. [1] [4]
Für ein möglichst vollständiges Bild lies diesen Eintrag zusammen mit Hash, Proof of Work, Block Header, Bitcoin-Adresse, Merkle Tree, Bitcoin. Auf diesen Eintrag verweisen außerdem Hash, ASIC Miner, Hashrate, Nonce.