Zum Inhalt springen
buybitcoinsmart

Glossar / Entwicklerreferenz

OP_HASH160

Was ist OP_HASH160?
OP_HASH160 wendet SHA-256 auf das oberste Element des Stapels an und danach RIPEMD-160 auf dieses Ergebnis; übrig bleibt ein Digest von 20 Byte, derselbe Fingerabdruck, den jede Adresse trägt, die mit 1 oder 3 beginnt.

Ein Byte, 0xa9, das für zwei der am besten untersuchten Hashfunktionen der Kryptografie steht. Die Paarung schrumpft eine Ausgabe von 32 Byte auf 20 Byte und sichert gegen eine Schwäche in einem der beiden Algorithmen ab, zum Preis von rund 80 Bit Kollisionsresistenz statt 128. Sie ist der Grund, warum eine Bitcoin-Adresse kurz genug ist, um sie am Telefon vorzulesen.

So funktioniert es

OP_HASH160 nimmt ein Element beliebiger Länge vom Stapel und legt genau 20 Byte darauf ab, und dieselbe Eingabe erzeugt stets denselben Digest.

Die beiden Funktionen stammen aus unabhängigen Entwurfslinien. RIPEMD-160 wurde im Jahr 1996 von einem europäischen akademischen Team veröffentlicht, das offen arbeitete; SHA-256 stammt von der NSA und wurde von NIST im Jahr 2001 standardisiert. Sie zu verketten war eine konservative Wahl. Ein struktureller Bruch in der einen würde die andere immer noch zwischen einen Angreifer und eine brauchbare Fälschung stellen, und in drei Jahrzehnten wurde keine von beiden so gebrochen, dass diese Konstruktion bedroht wäre.

Die Verkleinerung ist nicht kosmetisch. Zwölf gesparte Byte pro Ausgabe waren wichtig, als das Ziel darin bestand, ein dauerhaftes globales Register klein zu halten, und deshalb ist das klassische Sperrskript 25 Byte statt 37 groß.

Zwanzig Byte haben allerdings eine Obergrenze. Zwei Eingaben zu finden, die sich einen Digest von 160 Bit teilen, erfordert in der Größenordnung von 2 hoch 80 Operationen statt 2 hoch 128, was bequem ist, wenn nur Sie den Schlüssel wählen, dessen Hash berechnet wird, und deutlich unbequemer, wenn eine Gegenpartei mitbestimmt, auf welches Skript festgelegt wird. Genau diese Überlegung ist der Grund, warum Segregated Witness in P2WSH die Skript-Festlegungen auf ein einzelnes SHA-256 von 32 Byte verlagert hat, während für Ausgaben mit einem einzigen Schlüssel die kürzere Form bleibt.

Wo es auftritt

OP_HASH160 steckt in zwei Skript-Vorlagen, und seine Ausgabe steckt in fast jeder Adresse, die Sie je kopiert haben.

Legacy-Ausgaben wenden es auf einen öffentlichen Schlüssel an. Pay-to-Script-Hash-Ausgaben wenden es auf ein Einlöseskript an. In beiden Fällen ist die Adresse, die Sie sehen, dieser Digest von 20 Byte mit einem Versionsbyte davor, 0x00 für die Adressen, die mit 1 beginnen, und 0x05 für die, die mit 3 beginnen, verpackt in eine Base58Check-Prüfsumme. Native Segwit-Ausgaben mit einem einzigen Schlüssel tragen dieselben 20 Byte ohne einen Opcode, weil die Regeln für diesen Ausgabetyp im Validator eingebaut und nicht als Skript geschrieben sind.

Taproot brach mit dieser Gewohnheit. Eine bc1p-Ausgabe legt einen öffentlichen Schlüssel von 32 Byte fest, ohne einen Hashschritt dazwischen, deshalb enthält eine Taproot-Adresse nirgends einen hash160.

Das ist auch der praktische Grund, warum die Prüfung einer Adresse auf dem Bildschirm einer Hardware-Wallet funktioniert. Zwei Adressen, die sich irgendwo unterscheiden, erzeugen zwei unabhängige Digests, eine ausgetauschte Adresse kann also nicht fast richtig aussehen; der Vergleich der ersten und letzten paar Zeichen auf dem Gerät mit dem, was Ihr Computer zeigt, genügt, um Malware in der Zwischenablage zu erkennen.

OP_HASH160 vs. SHA-256

SHA-256 ist eine Hashfunktion; OP_HASH160 ist eine Anweisung, die sie zufällig einmal aufruft. Die Funktion taucht im gesamten Bitcoin ohne Skript auf: Der Proof of Work hasht einen Blockkopf zweimal damit, Transaktions-IDs sind eine doppelte Anwendung davon, und Merkle-Bäume werden daraus gebildet. Der Opcode existiert nur innerhalb von Bitcoin Script, läuft nur, während eine Ausgabe ausgegeben wird, und liefert stets 20 Byte statt 32. Die Zusammensetzung, die er vornimmt, RIPEMD-160 von SHA-256, ist in Wallet-Code so verbreitet, dass sie einen eigenen Namen hat, hash160, den man beim Durchsehen der Funktionsliste einer Bibliothek kennen sollte.

Nicht zu verwechseln mit

Häufig gestellte Fragen

Warum hasht Bitcoin zweimal mit zwei verschiedenen Algorithmen?

Aus zwei Gründen. Der zweite Hash verkleinert den Digest von 32 Byte auf 20, was jede Adresse und jedes Ausgabeskript kürzer macht, und der Einsatz zweier unabhängiger Entwürfe bedeutet, dass ein Bruch in nur einem Algorithmus nicht ausreichen würde, um eine Übereinstimmung zu fälschen.

Ist ein Hash von 20 Byte noch sicher?

Für eine gewöhnliche Adresse mit einem einzigen Schlüssel ja. Der schwächere Fall ist ein Skript, bei dem jemand anderes einen Teil des gehashten Inhalts wählt, deshalb legt Segregated Witness Skripte stattdessen mit einem vollen SHA-256 von 32 Byte fest.

Weiterlesen

Verwandte Begriffe

Mehr zum Thema Entwicklerreferenz

Diese Seite auf Englisch lesen