CryptoMonday
Home News Was ist eine Hashfunktion?

Was ist eine Hashfunktion?

Marius Kramer
Marius Kramer
Marius Kramer
Autor*in:
Marius Kramer
Writer
04. August 2018

Hier erklären wir dir grundlegendes Wissen zum Thema Blockchain und Kryptowährungen. In anderen Wissensartikeln haben wir bereits erklärt, wie Verschlüsselung funktioniert. In diesem Teil wollen wir dir zeigen, was es mit Hashfunktionen auf sich hat.

Hashfunktionen sind eine weitere Stütze der Blockchain und ein integraler Bestandteil moderner Kryptographie. Da die genaue Wirkungsweise einer Hashfunktion sehr komplex ist, bleiben wir in diesem Artikel bei einer Übersicht, sodass wir am Ende des Artikels auch anderen Menschen erklären können, was Hashfunktionen sind, wofür sie wichtig sind und warum wir sie beispielsweise in Bitcoin unbedingt benötigen.

Definition Hashfunktion

Wird im Bereich Blockchain von Hashes oder einer Hashfunktion gesprochen, ist zumeist die speziellere Form der „Kryptographischen Hashfunktion“ gemeint. Im weiteren Verlauf dieses Artikels wird zunächst die Hashfunktion im Allgemeinen erklärt und anschließend sein sicheres Pendant, die Kryptographische Hashfunktion, wie sie als SHA-256 oder SHA-3 im Blockchain-Sektor zum Einsatz kommt. Erstere wird beim Mining von Bitcoin eingesetzt, letztere ist auch unter dem Namen „Keccak“ bekannt und ist integraler Bestandteil des Ethereum Proof-of-Work-Algorithmus „Ethash“.Zuletzt wird der Bogen zum Bitcoin-Mining gespannt.

Ursprung

Hashfunktionen, oder zu Deutsch seltener „Streuwertfunktionen“, sind Teil moderner Informationssicherheitsmethoden. Neben Verschlüsselungen und digitalen Signaturen sind sie integraler Bestandteil für die sichere Kommunikation, beispielsweise über das Internet. Hierbei ist es tatsächlich unerheblich, ob der genutzte Kommunikationskanal unsicher ist: moderne Informationssicherheit muss auch Sicherheit in ungeschützten Kanälen gewährleisten, welche im schlimmsten Fall jedem zugänglich sind.

Der Begriff geht auf das englische „to hash“ zurück und bedeutet „zerhacken“. Hashfunktionen machen im Grunde genau das: sie zerhacken Informationen und bilden diese Information in einer anderen Form ab. Das Produkt einer Information, die durch eine Hashfunktion abgebildet wurde, nennt man „Hash“.

Problematik

[override_inline_ad]

Wie jede andere weiträumig genutzte Funktion in der IT-Sicherheit, löst auch die Hashfunktion wichtige bestehende Probleme. Diese Probleme treten hauptsächlich in der Kommunikation zweier Teilnehmer auf.

Will Alice Bob Nachrichten senden, so kann es aufgrund von verzerrter Kommunikation manchmal dazu kommen, dass die Nachricht nicht vollständig bei Bob angekommen ist. Es kann auch sein, dass ein Angreifer die Datei auf dem Weg manipuliert hat. Diese Nachricht kann verschiedener Natur sein: sei es eine Musikdatei, eine Textnachricht, eine Bilddatei oder anderes.

Wie stellen wir nun fest, dass alle Nullen und Einsen bei Bob angekommen sind und in der richtigen Reihenfolge? Hier kommen Hashfunktionen ins Spiel. Sie überprüfen die Vollständigkeit der Daten und die Reihenfolge. Zusammengefasst wird dieser Zustand unter dem Begriff Integrität. Hashfunktionen in sogenannten Prüfsummenfunktionen prüfen die Daten auf ihre Integrität, also ihre richtige innere Zusammensetzung.

Vorstellung

Wir können uns die Hashfunktion wie eine Funktion aus der Schule vorstellen: man hat eine Eingabe, die Funktion und eine Ausgabe. Die Eingabe wird auch als Schlüssel bezeichnet, während die Ausgabe als Hashwert bezeichnet wird. Die Normalparabel, die manche von uns noch aus der Schule kennen, ist auch eine Funktion.

Das Bild zeigt die graphische Darstellung der Funktion f(x) = x². Man kann Werte in diese Funktion einsetzen und eine Ausgabe generieren.

Wir können uns Hashfunktionen wie sehr komplizierte Funktionen vorstellen. Wir geben Daten ein und bekommen Daten in anderer Form heraus. Wollen wir nun prüfen, ob Alice und Bobs Datenaustausch erfolgreich war, können wir den sicheren SHA-256 benutzen.

Secure Hash Algorithm

SHA steht für „Secure Hash Algorithm“ und ist tatsächlich einer der wenigen wirklich sicheren Hashalgorithmen auf der Welt. Entwickelt wurde SHA-256 als Teil des SHA-2 Algorithmus von der amerikanischen Nachrichtendienstbehörde NSA im Jahr 2001.

Da die NSA diesen Algorithmus entworfen hat, fürchten besonders viele Laien, dass er deswegen unsicher ist. Diese Reaktion ist keineswegs unnatürlich, beachtet man die zahlreichen Verletzungen der Persönlichkeitsrechte durch die NSA, die Ex-Geheimdienstmitarbeiter Edward Snowden aufgedeckt hat. In der Kryptographie, also in der Wissenschaft dieser Sicherheitsmethoden, existiert damit zusammenhängend der Begriff „Security through obscurity“, was zu Deutsch so viel wie „Sicherheit durch Geheimhaltung“ bedeutet.

Zu Anfang des 20. Jahrhunderts, als Banken und Militärs Verschlüsselungen für sich entdeckt hatten, wurden diese Algorithmen geheim gehalten, aus Angst, jemand könnte herausfinden wie sie funktionieren und damit die Verschlüsselung brechen. Dieses Prinzip wurde nach dem zweiten Weltkrieg aus der Kryptographie verbannt. Aus einem einfachen Grund.

Wirklich funktionierende Algorithmen sollten „offensichtlich“ sicher sein. Sie sollten trotz Offenlegung einen sicheren Output generieren. Und ein zusätzliches Plus hierbei war, dass mit Offenlegung des Algorithmus nicht nur 10 interne Geheimdienstmitarbeiter Schwachstellen im Algorithmus suchen konnten, sondern tausende Gelehrte weltweit – damit stieg die Sicherheit des Algorithmus immens, weil sie weltweit von jedem Techniker überprüft werden konnte.

So ist es auch mit dem SHA-2 Algorithmus der NSA. Es gibt keine Hintertüren im Algorithmus, da er aufgedeckt ist und ihn jeder selbst untersuchen kann. Würde es eine Hintertür geben, wäre das einem von tausenden Kryptographen sicherlich bereits aufgefallen.

Solche kritischen Blicke auf Algorithmen sind heutzutage Normalität – „Codeknacker“ besitzen ein hohes Ansehen in der Gemeinschaft der Kryptographen, weil sie die Sicherheit der Algorithmen aufs höchste Testen.

Eigenschaften einer kryptographischen Hashfunktion wie SHA-256

Eine kryptographische Hashfunktion ist also eine Funktion, die unter anderem bei Integritätsprüfungen zum Einsatz kommt. Sie besitzt aber noch mehr Eigenschaften, die ihr Einsatzgebiet erweitert.

Kollisionsfreiheit

Angenommen ich besitze eine Textdatei mit den Buchstaben „abc“. Setze ich diese Textdatei in SHA-256 ein erhalte ich folgenden Output:

BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD

Bei SHA-256 werden Dateien, wie meine Textdatei und andere, auf eine Länge von 64 Ziffern, verlängert oder reduziert. Wenn man genau hinschaut, erkennt man nur Zahlen und die Buchstaben „A“ bis „F“. Dies ist tatsächlich keine „Zeichenfolge“ im engeren Sinne, sondern eine Zahl in „hexadezimaler“ Schreibweise. Es gibt Generatoren im Internet, die hexadezimale in dezimale Zahlen umrechnen, wie wir sie alltäglich nutzen. Was das genau bedeutet, können wir in einem anderen Artikel beleuchten, hierfür reicht es zu wissen, dass wir einen eindeutigen Hashwert für „abc“ bekommen haben. Immer wenn ich „abc“ in SHA-256 eingebe, bekomme ich dasselbe Ergebnis. Dies lässt sich mit diesem Online-Generator testen.

Auch sehr lange Dateien lassen sich damit „hashen“. Ein Beispiel ist die Text-Datei von Goethes „Faust“. Man könnte auch Musik, Spieldateien oder jede andere binäre Datei nutzen. Das Werk von Faust ist aber hier anschaulicher. Es besitzt 187.937 Zeichen – also deutlich mehr als unser vorheriger Text. Eingesetzt in SHA-256 bekommt man folgenden Hashwert:

812927030CEFAF404BFD9879F06B46FAAB9FDEA4A11A5F52DE8A03B945C9392F

Auch hier haben wir wieder eine Zahl mit 64 Ziffern, die im Grunde eine hexadezimale Zahl darstellt. Gibt man die verlinkte Textdatei 1:1 in den SHA-Generator ein, bekommt man immer wieder den oben gezeigten Hash heraus. Damit können wir digitale Daten per SHA-256 eindeutig identifizieren!

Jede Datei ist anders aufgebaut, hat eine andere Abfolge von Nullen und Einsen, außer sie sind echte Kopien – und zwar bis auf die letzte Null und Eins. Wenn ich aber wissen will, ob eine Datei wirklich eine Kopie einer anderen Datei ist, kann ich das mit SHA testen und damit der Datei einen eindeutigen Hashwert zuteilen. Der Hashwert wird auch als „Fingerabdruck“ einer Datei bezeichnet.

Damit Dateien aber eindeutig zuweisbar sind, dürfen keine zwei Dateien denselben Hashwert produzieren. Wenn man jetzt Shakespeares „Much ado about nothing“ hashen würde, darf dort nicht derselbe Hashwert herauskommen, sonst wäre die Identifikation nicht eindeutig und die Hashfunktion damit unbrauchbar. Diese Eigenschaft nennt sich Kollisionsfreiheit. Selbst wenn man Goethes „Faust“ nur um ein simples Leerzeichen erweitern würde, darf der Hashwert nicht derselbe sein, da es grundsätzlich nicht dieselbe Datei ist. Mehr dazu bei der Eigenschaft „Lawineneffekt“.

Speicherbedarf des Hashwerts soll kleiner als der des Schlüssels sein

Beziehen wir uns auf das eben genannte Beispiel mit Goethes „Faust“, dann sehen wir, dass es Sinn macht, dass der Hashwert nicht 187.937 Zeichen lang sein muss. Stattdessen „dampft“ SHA-256 Dateien beliebiger Länge auf eine feste Länge ein und macht sie damit einfach vergleichbar.

Die Länge von SHA-256 Hashes lässt sich damit auch von Microcontrollern bearbeiten und eignet sich auch für langsame Computer. Ein Hashwert für den unsicheren SHA-1 Algorithmus lässt sich sogar mit Stift und Papier ausrechnen.


Hast du dich schon um deine Krypto-Steuer gekümmert? Ein hilfreiches Tool für die Bearbeitung und Optimierung deiner Krypto-Steuer ist übrigens das Steuer-Tool von Accointing. Hole für dich selbst das Maximum bei deiner Steuererklärung heraus. Sign up for free.


Lawineneffekt

Aus Sicherheitsgründen dürfen ähnliche Eingabewerte keine ähnlichen Ausgabewerte produzieren. Gebe ich „abc“ und „abcc“ in SHA-256 ein, sieht das wie folgt aus:

„abc“

BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD

„abcc“

FC7368F13B4CED2FCF36FD0F589A0930928499E9C0F88EA83E5AC9464BDFC25A

Wie man erkennt, weisen die beiden Hashwerte keinerlei Ähnlichkeit zueinander auf. Warum ist das so? Hier liegt der Ursprung wirklich in der Kommunikationssicherheit, die Hashfunktionen sicherstellen sollen. Will ein Bankangestellter sichergehen, dass eine gesendete Datei vollständig angekommen ist, fordert er vom Empfänger den Hashwert der gesendeten Datei mit dem Hashwert der Ursprungsdatei zu vergleichen.

Urbildresistenz

Sollte ein Angreifer aber den Hashwert abgefangen haben, soll dieser Hashwert keinerlei Rückschluss auf den Ursprung des Hashwerts zulassen. Denn sollte der Angreifer den Hashwert abfangen und die Daten rekonstruieren können, stünde die Informationssicherheit der Bank (und tatsächlich des ganzen Internets) auf dem Spiel. Diese Unumkehrbarkeit von Hashwerten nennt sich auch „Einweg-Funktion“ oder „Falltürfunktion“:

Aus Schlüsseln lassen sich einfach Hashwerte berechnen, aber es ist nicht möglich Schlüssel aus Hashwerten zu berechnen.

Die Eigenschaft einer guten Hashfunktion, von einem Hashwert nicht auf den Ursprung, oder das „Urbild“ schließen zu können, nennt sich „Urbildresistenz“.

Auch ein „Probieren“ von anderen Schlüsseln, um denselben Hashwert zu generieren soll damit unmöglich gemacht werden. So werden Passwörter, die wir im Internet eingeben, als Hashwerte in Datenbanken gespeichert – und nicht in ihrer Originalform. Um also Zugang zur Webseite zu bekommen, prüft die Seite regelmäßig ob der Hashwert des eingegebenen Passworts, mit dem Hashwert in der Datenbank übereinstimmt.

Nun könnte auch hier ein Angreifer auf die Idee kommen, analog zum Schlösser-Knacken, einfach den Hashwert aus der Datenbank zu nehmen und „herumzuprobieren“ bis er den passenden Schlüssel gefunden hat, der genau den Hashwert generiert. Dies ist, glücklicherweise, nicht in einem Menschenleben möglich. Dafür müsste der Angreifer 2 hoch 256 mögliche Kombinationen ausprobieren – was selbst bei modernen Computern länger dauert, als die Lebensdauer unseres Sonnensystems.

Der Lawineneffekt beschreibt die Eigenschaft, dass die Ähnlichkeit die zwischen Eingangswerten herrscht, bei den Ausgangswerten nicht mehr vorhanden ist. So wird kein Rückschluss auf die Ursprungsdaten zugelassen und damit können selbst Top Secret-Hashes gefahrlos umhergesandt werden.

Es gibt noch mehr Eigenschaften, die eine Hashfunktion wie SHA-256 vorweisen kann, welche aber im Rahmen dieses Artikels nicht unbedingt weiter zum Verständnis beitragen.

SHA-256 in Bitcoin

Der SHA-256 wird beim Bitcoin-Mining genutzt. Tatsächlich sind Hashfunktionen eine primäre Stütze von Kryptowährungen. Ohne Hashfunktionen gäbe es heutzutage keine Kryptowährungen. Wollt ihr wissen, wie SHA-256 genau im Bitcoin-Mining eingesetzt wird? Schreibt uns einen Kommentar und lasst es uns wissen!

Vorweg können wir euch aber erklären, dass die Hashfunktion beim Mining eingesetzt wird, um auch hier die Integrität der Daten zu schützen. Ein Bitcoin-Block enthält die Transaktionen der letzten zehn Minuten. Die Daten, die in diesem Block enthalten sind, darunter die Uhrzeit, die Transaktionen, der Hash des vorherigen Blocks und noch einige andere Daten, werden zusammengefasst, wie im Beispiel vorher der Buchtext von Goethe, und danach durch die SHA-256-Funktion geschleust, um einen Hashwert zu generieren.

Dieser kann, aufgrund der oben erklärten Eigenschaften, dann eindeutig als Fingerabdruck dieses einen Blocks herhalten. Sollte jemand nur eine kleine Änderung bei den Transaktionen durchführen, würde das durch den Lawineneffekt direkt auffallen, da der Hash nach der Veränderung sehr verschieden von dem vorherigen ist.

Jeder der einen Bitcoin-Knoten, eine Bitcoin-Node betreibt, verifiziert die Echtheit jedes neuen Bitcoin-Blocks alle zehn Minuten, indem die Software die Inhalte des Blocks selber hasht und mit dem empfangenen Block-Hash vergleicht. Dadurch kommt im Bitcoin-Netzwerk eine immense Sicherheit zustande, die von jedem Teilnehmer selbst überprüft werden kann. Das ist den sicheren Eigenschaften des SHA-256 zu verdanken.


Hast du es bereits gewusst? Über eToro kannst du 15 verschiedene Kryptowährungen direkt oder als CFD mit Hebel handeln. Profitiere von einer hohen Benutzerfreundlichkeit, geringen Mindesteinzahlung, Social Trading und breiten Palette an Assets. Richte dir noch heute ein kostenloses Demo-Konto mit 100.000$ ein und teste es selbst!


 

Hast du Fragen oder Anmerkungen zum Text? Lass uns einen Kommentar da!

[Bild: PureSolution/ Shutterstock]