Hashing

Wie funktioniert Hashing?

Hashing ist eines der wichtigsten Konzepte in der Informatik überhaupt. Vor allem in der Kryptographie und in verschiedenen Blockchain-Implementierungen wie z. B. Bitcoin kommt es intensiv zum Einsatz. Grund genug, es sich in einem eigenen Artikel genauer anzusehen.

Als Hashing bzw. Hashfunktion wird ein Algorithmus bezeichnet, der eine digitale Eingabe beliebiger Länge auf eine immer gleiche, eindeutige Ausgabe fester Länge abbildet. Bekannte Hash-Verfahren sind z. B. CRC32, MD5, SHA-1 oder SHA-256. In den nachfolgenden Beispielen wurde das Hashverfahren CRC32 verwendet, welches sehr kurze Hashes generiert. Heutzutage verwendet man eher SHA-1 oder besser noch SHA-256, u.a. um eine Kollision (zwei unterschiedliche Eingaben führen zum selben Hashwert) zu vermeiden.

Hashing – Kleine Änderung mit großer Wirkung

Für das nachfolgende Beispiel habe ich das kurze CRC32 verwendet, um es übersichtlicher zu gestalten. Hier sieht man vor allem zwei wichtige Merkmale sehr deutlich, nämlich dass die Länge der Hashes immer gleich ist und dass nur kleine Änderungen an der Eingabe zu einem völlig neuen Hash führen:

Eingabe CRC32 Ausgabe (Hash)
a e8b7be43
Hallo 78b31ed5
Hallo Welt 50281475
Das ist ein ganz langer Text, der aber wieder auf einen Hash fester Länge abgebildet wird. 4d73bcc6

Du kannst diese Beispiele auch selbst überprüfen, indem Du z. B. einen Online-Dienst wie Fileformat verwendest.

Die CRC32-Ausgabe (Hash) hat immer eine Zeichenfolge fester Länge mit 8 Zeichen. Egal, wie kurz oder lange die Eingabe ist, diese Länge bleibt gleich. Wird nur ein kleiner Wert an der Eingabe verändert, ändert sich der errechnete Hashwert grundlegend, die Zeichenlänge bleibt jedoch gleich. Wird im Beispiel z. B. die Eingabe “Hallo” durch “Hello” ersetzt, ändert sich der Hashwert vollständig:

Eingabe CRC32 Ausgabe
Hallo 78b31ed5
Hello f7d18982

Kleine Veränderungen werden sofort bemerkt. Wird ein ursprünglicher Eingabetext – auch nur minimal – verändert, kann man zwar aus dem errechneten Hashwert nicht erkennen, was geändert wurde. Man kann aber mit Sicherheit sagen, dass sich die Eingabe verändert hat.

hashing_2

Hash = Eindeutiger, digitaler Fingerabdruck

Es ist zudem nahezu ausgeschlossen, dass zwei beliebige, unterschiedliche Eingaben zum selben Hashwert führen. Weswegen der Hashwert oftmals auch als digitaler Fingerabdruck bezeichnet wird. Genau wie ein Fingerabdruck eindeutig einem Menschen zugeordnet werden kann, wird ein digitaler Fingerabdruck einer digitalen Einheit, wie z. B. einem Word-Dokument , einer Zip-Datei oder einem Text unverwechselbar zugeordnet.

hashing

Der umgekehrte Weg, um vom digitalen Fingerabdruck (also dem Hashwert) wiederum die Eingabe zu reproduzieren, ist so gut wie ausgeschlossen. Hinzu kommt, dass in der Regel noch deutlich bessere Verfahren als CRC32 verwendet werden (z. B. SHA-2).

Man kann mit Hashing also sicher stellen, dass die originale Eingabe (z. B. ein Dokument) unverändert ist, indem man den Hashing-Algorithmus darauf anwendet und darauf achtet, dass immer derselbe Hashwert (Fingerprint) ausgegeben wird. Ist dies nicht der Fall, so wurde die ursprüngliche Eingabe garantiert verändert. An welcher Stelle allerdings, ist daraus nicht ersichtlich. Dafür müsste man dann die beiden Eingaben (z. B. Dokumente) gegenüberstellen und vergleichen. Alleine aber die Aussage, “es hat sich etwas oder nichts verändert” ist in der Informatik extrem wertvoll. Sie entscheidet manchmal über Kosten in Millionenhöhe.

Stephan Niedermeier