Kryptographie Teil 4 – Hashing

Erwartete Lesezeit: 2 minuten

Um die Integrität einer Nachricht oder einer Datei zu überprüfen, benötigt man ein Verfahren, welches beim Sender und Empfänger durchgeführt werden kann und ein eindeutiges Ergebnis liefert.
Hierfür wurden kryptografische Hashfunktionen eingeführt die genau dieses sicherstellen sollen. Die allgemeine Arbeitsweise einer Hashfunktion ist die Umwandlung einer Zeichenfolge mit variabler Länge in einen festlängen Hashwert.

Im Jahr 1991 entwickelte Ronald Rivest seinen MD5 Checksummen- (Hash-) Algorithmus, der bis 2005 als sicher galt.
Hier ein kleines Beispiel anhand einer kurzen Nachricht:

Nachricht: Ich bin ein unsicherer Hash einer Nachricht
Hash: 4183e71f7de6d7de0df4251fad2eac99

Der Sender der Nachricht übersendet den Hash über einen gesonderten Weg an den Empfänger, der ebenfalls über dieselbe MD5 Funktion die Checksumme der Nachricht erstellen kann. Wurde die Nachricht zwischenzeitlich geändert (z.B. durch einen Man-In-The-Middle- Angriff) stimmt die ermittelte Summe nicht mehr mit der vom Sender erhaltene Summe überein.
Ändern wir mal die Nachricht und erzeugen eine Prüfsumme:

Originalnachricht: Ich bin ein unsicherer Hash einer Nachricht
Neue Nachricht   : Ich bin ein unsicherer Hash einer  Nachricht

Wir haben hier ein einfaches Leerzeichen eingefügt und schon ist die Checksumme nun:

2db3a2a35ba286aa396fa7935846f35b

Ein eindeutiger Hinweis das da was nicht stimmt.
Ein weiterer Nutzen der Checksummen war die Speicherung von Passwörtern in Datenbanken. Hierbei wurde davon ausgegangen , dass die Kollisionsfreiheit bei der Generierung gegeben ist. Mit steigender Rechnerkapazität konnte dieses 2009 wiederlegt werden. Bereits nach ca. 35 Minuten wurden Identischen Checksummen ermittelt.
Daher ist MD5 nach heutiger sicht unsicher. Wer ein Beispiel einer solchen Kollision mal sehen möchte kann dieses auf der Seite der Dalhousie University (Link) sehen.

Neben MD5 wurde z.B. SHA-1 entwickelt. Hier wurde 2017 die erste Kollision erfasst.
Aktuell gilt der SHA-2 (in den Varianten SHA-256, SHA-384 und SHA-512 ) noch als sicher.

Es wird trotzdem empfohlen , für die Speicherung von Passwörtern andere Verfahren wie BCRYPT zu nutzen.