Jeder, der sich für Bitcoin interessiert, wird irgendwann den Begriff "kryptografische Hash-Funktion" gehört haben. Aber was genau bedeutet es, und wie ist es mit Kryptowährung verbunden?

Hash-Funktionen sind ein wesentlicher Bestandteil nicht nur des Bitcoin-Protokolls, sondern der Informationssicherheit insgesamt.

Im folgenden Artikel sehen wir uns einige einfache Beispiele ihrer Funktionsweise an, mit einer einfachen Demonstration.

Was ist eine Hash-Funktion?

In der Zusammenfassung ist eine Hash-Funktion ein mathematischer Prozess, der Eingabedaten beliebiger Größe entgegennimmt, eine Operation an ihm ausführt und Ausgabedaten einer festen Größe zurückgibt.

In einem konkreteren Beispiel kann dies verwendet werden, um eine Folge von Buchstaben von Länge als Eingabe zu nehmen - was wir eine Zeichenkette nennen - und eine Folge von Buchstaben von a feste Länge. Unabhängig davon, ob es sich bei der Eingabezeichenfolge um einen einzelnen Buchstaben, ein Wort, einen Satz oder einen ganzen Roman handelt, hat die Ausgabe - genannt Digest - immer die gleiche Länge.

Eine häufige Anwendung dieser Art von Hash-Funktion ist das Speichern von Passwörtern.

Wenn Sie ein Benutzerkonto mit einem Webdienst erstellen, für den ein Kennwort erforderlich ist, wird das Kennwort über eine Hashfunktion ausgeführt, und der Hash-Digest der Nachricht wird gespeichert. Wenn Sie Ihr Kennwort eingeben, um sich anzumelden, wird dieselbe Hash-Funktion für das eingegebene Wort ausgeführt, und der Server überprüft, ob das Ergebnis mit dem gespeicherten Auszug übereinstimmt.

Das heißt, wenn ein Hacker auf die Datenbank mit den gespeicherten Hashes zugreifen kann, kann er nicht sofort alle Benutzerkonten kompromittieren, da es keinen einfachen Weg gibt, das Passwort zu finden, das einen bestimmten Hash erzeugt hat.

Einfache Hash-Funktionen in Python

Sie können mit Hash-Werten experimentieren, indem Sie Python verwenden, eine Programmiersprache, die standardmäßig auf Mac- und Linux-Betriebssystemen installiert ist. (In diesem Tutorial wird davon ausgegangen, dass Sie eine Version von OS X oder Linux verwenden, da die Verwendung von Python unter Windows komplizierter ist.)

Öffnen Sie zuerst ein Terminal, geben Siepythonein und drücken Sie ENTER.

Dies versetzt Sie in die Python REPL, eine Umgebung, in der Sie Python-Befehle direkt ausprobieren können, anstatt ein Programm in eine separate Datei zu schreiben.

Geben Sie dann Folgendes ein, drücken Sie nach jeder Zeile die Eingabetaste und TAB, wo markiert:

import hashlib def hash (mystring): [TAB] hash_object = hashlib. md5 (mystring. encode ()) [TAB] drucken (hash_object. hexdigest ()) [ENTER]

Sie haben nun eine Funktion erstellt,hash (), die den Hash berechnet und ausdruckt Wert für eine gegebene Zeichenfolge, die den MD5-Hashalgorithmus verwendet. Um es auszuführen, setzen Sie einen String zwischen die Klammern in Anführungszeichen, zB:

Hash ("CoinDesk rockt")

Und drücken Sie ENTER, um den Hash-Digest dieser Zeichenkette zu sehen.

Sie werden sehen, dass das Aufrufen der Hash-Funktion in derselben Zeichenfolge immer den gleichen Hash generiert, aber das Hinzufügen oder Ändern eines Zeichens erzeugt einen völlig anderen Hash-Wert:

Hash ("CoinDesk rockt") => 7ae26e64679abd1e66cfe1e9b93a9e85 Hash ("CoinDesk rockt!") => 6b1f6fde5ae60b2fe1bfe50677434c88

Hash-Funktionen in Bitcoin

Im Bitcoin-Protokoll sind Hash-Funktionen Teil des Block-Hashing-Algorithmus, mit dem durch den Mining-Prozess neue Transaktionen in die Blockchain geschrieben werden.

Im Bitcoin Mining , die Eingaben für die Funktion sind alle der jüngsten, noch nicht bestätigten Transaktionen (zusammen mit einigen zusätzlichen Eingaben bezüglich des Zeitstempels und eines Verweises auf den vorherigen Block).

Im obigen Codebeispiel haben wir bereits gesehen, dass das Ändern eines kleinen Teils der Eingabe für eine Hash-Funktion zu einer völlig anderen Ausgabe führt.Diese Eigenschaft ist entscheidend für den "Proof of Work" -Algorithmus im Bergbau: Um einen Block erfolgreich zu "lösen", versuchen die Bergleute alle zu kombinieren der Eingaben mit ihren eigenen willkürlichen Eingabedaten so, dass der resultierende Hash mit einer bestimmten Anzahl von Nullen beginnt.

Als grundlegende Demonstration könnten wir versuchen, mit unserer Python-Hash-Funktion "Mining" durchzuführen, indem wir Ausrufe manuell hinzufügen Punkte nach "CoinDesk rockt!", bis wir einen Hash finden, der mit einer einzigen Null beginnt.

>>> Hash ("CoinDesk rockt!") 66925f1da83c54354da73d81e013974d >>> hash ("CoinDesk rockt!!!") C8de96b4cf781a6373766c668ceac0f0 >>> hash ("CoinDesk rockt!!!!") 9ea367cea6a2cc4a6f5a1d9a334d0d9e >>> hash ( "CoinDesk rockt!!!!!") B8d43387d98f035e2f0ac49740a5af38 >>> hash ("CoinDesk rockt!!!!!!!") 0fe46518541f4739613b9ce29ecea6b6 => Gelöst!

Natürlich erfordert das Auflösen des Hashs für einen Bitcoin-Block, der zum Zeitpunkt des Schreibens mit 18 Nullen beginnen muss, einen extrem großen Rechenaufwand (und damit die kombinierte Verarbeitungsleistung aller Computer) im Netzwerk dauert es immer noch ca. 10 Minuten, um einen Block zu lösen).

Es ist die Notwendigkeit für diese große Menge an Verarbeitungsleistung, die bedeutet, dass neue Bitcoins über einen langen Zeitraum hinweg nicht auf einmal abgebaut werden.

Um Bitcoins durch Mining verdienen zu können, müssen Sie die enorme Menge an Arbeit aufbringen, die notwendig ist, um einen Block zu lösen - und indem Sie diese Belohnung verdienen, sperren Sie alle neuen Transaktionen in einen Block, der hinzugefügt wird zur dauerhaften Aufzeichnung aller vorherigen Transaktionen: die Blockchain.

Alle Krypto-Grundlagen, die Sie als nächstes erklärt haben möchten? E-Mail: Redakteure @ coindesk. com.

Bitcoin auf Tastaturabbild über Shutterstock