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.

PGP Pretty Good Privacy – Verschlüsseln von E-Mails

Wer E-Mail nutzt, schreibt diese meist unverschlüsselt. In dieser Form kann jede Kommunikation von jeder dritten Partei mitgelesen werden.

Der Grund, warum man keine Postkarten, sondern Briefe versendet, ist der Gleiche: Man möchte eigentlich nicht, dass andere mitlesen.

Wie verschlüsselt man nun seine Mails mit PGP? Ganz einfach. Wir zeigen es hier im Beispiel von Thunderbird in möglichst einfachen Schritten:

  1. Wie funktioniert PGP
  2. Installation benötigter Programme
  3. Einrichtung – Mail-Program Thunderbird
  4. Einrichtung – Addon Enigmail
  5. Benutzung von PGP
  • Thunderbird
    Thunderbird ist ein guter open source E-Mail Client, mit welchem man leicht PGP Verschlüsselung nutzen kann: https://www.mozilla.org/de/thunderbird/
  • Enigmail
    Das Addon Enigmail macht Thunderbird zum PGP-Key Organisator.
    In Thunderbird installiert man ganz einfach Enigmail als Plugin. Unter „Extras“, dort auf „Addons“ und dann „Enigmail“ suchen und „installieren“. Dann einfach nur Thunderbird neu starten.
  • Gpg4win
    Das GoTo Windows Verschlüsselungsprogramm. Downloaden unter https://gpg4win.org/download.html. Aus den verfügbaren Paketen muss nur GnuPG installiert werden. Kleopatra kann man nutzen, um seine Keys zu verwalten (macht hier in unserem Beispiel aber Enigmail in Thunderbird für uns).

Thunderbird Nutzung

Erst einmal muss man ein E-Mail Konto aufsetzen. Dazu fordert einen Thunderbird beim Start auch auf.

Dafür nur seine eigene E-Mailadresse und Passwort eingeben. Thunderbird kann selbst keine E-Mailadressen registrieren. Es wird hierfür eine bereits registrierte E-Mailadresse bei einem E-Mailprovider benötigt.

Bedeutet: Ihr benötigt also eure Mail-Serverdaten, wie Eingangsserver und Ausgangsserver, Username und Passwort. Erhält man alles ganz einfach beim E-Mail-Anbieter.

IMAP oder POP ist egal, wobei IMAP üblicherweise immer zu empfehlen ist. Manche Anbieter bieten nur POP, das geht ebenso gut.

PGP lässt sich in Thunderbird mit Hilfe von Enigmail derzeit ganze easy einrichten:

  1. via Enigmail einen Schlüssel (bzw. ein Schlüsselpaar) erstellen und diesen mit dem gewünschten E-Mailkonto verknüpfen.
  2. via Enigmail die PGP-Schlüssel verwalten (fremde öffentliche Schlüssel eurer Mail-Partner importieren oder eure eigenen öffentlichen Schlüssel kopieren, um sie mit der Öffentlichkeit zu teilen.

Zukünftig (voraussichtlich ab Ende 2020) wird man in Thunderbird auch ohne das Plugin Enigmail seine PGP Schlüsselpaare verwalten können: Thunderbird Blog Artikel 2019. Die Nutzung von Enigmail ist aber einfach und sicher.

Jedes PGP Schlüsselpaar wird via Passwort abgesichert, wenn man also nun eine Verschlüsselung durchführen möchte, gibt man in Thunderbird nach Aufforderung also sein PGP-Key-Passwort ein und die E-Mail Nachricht wird ver- oder entschlüsselt.

Das Prinzip von PGP

PGP ist eine asynchrone Verschlüsselungsart. Klingt kompliziert, ist es aber nicht.

Ich erstelle ein Schlüsselpaar: Dazu gehört ein privater Schlüssel nur für mich, zum Entschlüsseln der Nachrichten an mich, und ein öffentlicher Schlüssel, den ich an jeder Straßenecke, Webseite und auf jedem Key-Server veröffentliche und auch z. B in Blogposts, Foren und meiner E-Mail Signatur abbilde.

Jeder soll diesen privaten Schlüssel nämlich haben und nutzen, denn damit kann man die Nachrichten an mich verschlüsseln. Ist eine Nachricht an mich einmal mit einem öffentlichen Schlüssel verschlüsselt worden, kann nur ich mit meinem privaten Schlüssel diese Nachricht entschlüsseln und lesen.

Zusätzlich zum Verschlüsseln kann und sollte man eine Nachricht auch noch signieren, also quasi mit einem Beweis versehen, dass man die Person, welche man vorgibt zu sein, auch wirklich ist.

Man kann also via PGP eine Nachricht nur signieren, nur verschlüsseln oder beides, also signieren wie auch verschlüsseln.

Eine Signatur dient dazu, die Echtheit der Nachricht zu garantieren, also dass sie vom behaupteten Absender ist (Authentizität) und nach der Signierung nicht verändert wurde (Integrität). In der Praxis wird man Nachrichten, wenn man sie verschlüsselt, zumeist auch signieren.

Mit Thunderbird und Enigmail E-Mails verschlüsseln

Hat man in Enigmail sein Schlüsselpaar hinterlegt, seinen öffentlichen Schlüssel an die Gemeinschaft verteilt, kann man nun verschlüsselte E-Mails in Thunderbird empfangen und versenden.

Beim Versenden hat man nun in Thunderbird oben in der abgehenden Mail die Möglichkeit die Verschlüsselung zu aktivieren und daneben direkt die Möglichkeit die Signatur mitzusenden.

Beim Empfang von (mit dem eigenen öffentlichen Key verschlüsselten) Nachrichten, wird Thunderbird beim Versuch die E-Mail zu lesen, nach einem PGP Passwort fragen. Dieses eingegeben, sorgt jetzt dafür, dass die Nachricht nun mit dem hinterlegten privaten Schlüssel entschlüsselt werden kann.

Man nutzt also zukünftig, nach dem einmaligen Einrichten von Thunderbird mit Enigmail, nur noch dieses PGP-Passwort, welches man beim Erstellen des Schlüsselpaares angegeben und gesetzt hat.

Eine recht schöne Veranschaulichung zu PGP mit Thunderbird und Enigmail ist hier im Video in Deutsch erhältlich: