SHA256 in Bitcoin

Wie hängt SHA256 mit Bitcoin zusammen?

Was ist SHA-256?

SHA-256 ist eine kryptografische Hash-Funktion, die eine Eingabe nimmt und eine Ausgabe mit einer festen Größe erzeugt. Beispiele und Tests kann man z. B. hier durchführen.

Hash-Funktionen sind einseitig. Das bedeutet, dass es für jeden möglich ist, eine Hash-Funktion zu verwenden, um eine Ausgabe zu erzeugen, wenn eine Eingabe gegeben wird; es ist jedoch unmöglich, die Ausgabe der Hash-Funktion zu verwenden, um die gegebene Eingabe zu rekonstruieren.

Diese mächtige Eigenschaft der SHA-256 Hash-Funktion macht sie ideal für die Anwendung innerhalb des Bitcoin Netzwerks.

Die SHA-256 Hash-Funktion wird innerhalb des Bitcoin Netzwerks hauptsächlich auf zwei Arten verwendet:

  • Mining
  • Erstellung von Bitcoin Adressen


Mining
Mining ist ein Prozess, durch den neue Bitcoin in den bestehenden zirkulierenden Vorrat des Bitcoin Protokolls eingeführt werden, sowie eine Methode, die verwendet wird, um das Bitcoin Netzwerk zu sichern.

Damit eine Person berechtigt ist, einen Block zur Bitcoin Blockchain hinzuzufügen, muss sie zunächst einen so genannten Mining Node betreiben.

Nach erfolgreicher Einrichtung eines Mining Nodes kann eine Person damit beginnen, Blöcke zu erstellen, die dann an das Bitcoin Netzwerk weitergeleitet werden, um auf ihre Gültigkeit geprüft zu werden. Innerhalb eines Blocks befindet sich ein sogenannter Block-Header; um einen Block zu konstruieren, müssen 6 Parameter vom Miner ausgefüllt werden. Diese beinhalten:

Version – Versionsnummer der Bitcoin-Software
Previous block hash – Verweis auf den Hash des vorherigen Blocks
Merkle Root – Ein repräsentativer Hash aller im Block enthaltenen Transaktionen
Zeitstempel – Die Zeit, zu der der Block erstellt wurde
Target – Proof-of-Work-Algorithmus für den Block
Nonce – Die Variable, die im Proof-of-Work-Prozess verwendet wird

Zusammensetzung eines Bitcoin-Blocks

Bild von Gizmodo


Wie in der obigen Abbildung zu sehen ist, muss der Block-Header des vorherigen Blocks zweimal durch den SHA-256-Algorithmus geschickt werden, damit ein Miner den Hash-Parameter des vorherigen Blocks erzeugen kann, dies wird auch als Doppel-SHA-256 bezeichnet:

Previous Block Hash = SHA-256(SHA-256(Block Header))

Der SHA-256-Algorithmus wird auch verwendet, um die Merkle-Wurzel (Master-Hash) zu erzeugen, die dann anschließend in den Block-Header eingefügt wird. Eine umfassende Erklärung dieses Aspekts des Bitcoin Protokolls finden Sie z.B. in englischer Sprache hier: Merkle Tree & Merkle Root.

Nach erfolgreicher Konstruktion eines Blocks kann der Miner nun mit dem Mining-Prozess beginnen, wobei sich ein weiterer Anwendungsfall des SHA-256-Algorithmus ergibt.

In diesem Fall ist ein Parameter des Block-Headers, die Nonce, eine Variable, die wiederholt geändert wird, und nach dem Hashing des Block-Headers mit der SHA-256-Funktion wird der Miner als erfolgreich angesehen, wenn der Hash unter dem Zielwert liegt.

Wenn die Nonce z. B. die Variable „12345“ wäre, würde diese im Block-Header neben den anderen 5 oben aufgeführten Parametern platziert werden. Der Block-Header würde dann gehasht werden, aber wenn sich der resultierende Hash als über dem Zielwert („Anzahl Nullen vorne“, Vorgabe durch die aktuelle Difficulty) liegend erweist, muss der Miner es erneut versuchen.

Der Miner kann dann die Nonce in eine andere Variable ändern, z. B. „90872“, und diese im Block-Header platzieren, wobei die anderen 5 Parameter konstant bleiben. Der resultierende Hash liegt unter dem Zielwert, daher wird der Block des Miners dann an das Netzwerk weitergeleitet, um sicherzustellen, dass er gültig ist.

Erstellung von Bitcoin-Adressen

Um eine Bitcoin-Adresse zu erzeugen, wird ein privater Schlüssel, der eine zufällig ausgewählte Zahl ist, mit einer elliptischen Kurve multipliziert, um einen öffentlichen Schlüssel zu erzeugen. Dieser öffentliche Schlüssel wird dann durch die beiden Hash-Algorithmen SHA-256 und RIPEMD160 geschickt.

Dabei ist K = der öffentliche Schlüssel und A = Bitcoin-Adresse:

A = RIPEMD160(SHA-256(K))

Die Verwendung der Hash-Algorithmen SHA-256 und RIPEMD160 für die Erstellung einer Bitcoin-Adresse hat einen entscheidenden Vorteil:

Kürzere Adressen

Kürzere Adressen: Ein öffentlicher Schlüssel ist 256 Bit lang, während die gehashte Version, also die Bitcoin Adresse, 160 Bit lang ist. Dies macht es für die Benutzer aufgrund der kürzeren Zeichenlänge viel bequemer zu verwenden.

Fazit
Zusammenfassend lässt sich sagen, dass der SHA-256-Hashing-Algorithmus ein integraler Bestandteil des Bitcoin Protokolls ist. Er wurde in verschiedenen Bereichen der Technologie implementiert, z. B. beim Bitcoin Mining, bei Merkle-Bäumen und bei der Erstellung von Bitcoin-Adressen.


Im englischen Original hier zu finden.

Wer sich neben Hash-Funktionen auch für asymetrische Verschlüsselung interessiert, kann z. B. hier mehr darüber lernen: https://www.privacytutor.de/blog/asymmetrische-verschluesselung/