Kryptografische Hashfunktionen

Eine kurze Erklärung

Kryptografische Hashfunktionen sind Hashfunktionen die kryptografischen Anforderungen genügen und in Verschlüsselungs-, Signatur- oder Authentifizierungsverfahren genutzt werden können.

Was sind Hashfunktionen?

Hashfunktionen sind Funktionen, die einen Input beliebiger Länge in einen Output umwandeln, welcher einer zuvor festgelegten Größe entspricht. Hashfunktionen liefern hierbei bei zwei identischen Inputs stets denselben Output. Man spricht hierbei von deterministischem Verhalten.

Was ist eine Kryptografische Hashfunktion?

In einer Vielzahl von kryptografischen Verfahren werden Kryptografische Hashfunktionen eingesetzt.

Die Stärke, sprich die Resistenz gegen Angriffe auf kryptografische Verfahren wie z. B. ein Verschlüsselungsprotokoll hängt stark von den in diesen Algorithmen genutzten Hashfunktionen ab. Deshalb werden an Hashfunktionen, die in kryptografischen Verfahren genutzt werden sollen, hohe Ansprüche gestellt.

Eine solche Hashfunktion muss in der Lage sein, allen bekannten kryptoanalytischen Angriffen widerstehen zu können, welche unter anderem bei einer Schwachstellenanalyse zum Einsatz kommen würden. Hierfür muss die Funktion die folgenden drei Eigenschaften besitzen.

Pre-image resistance:

Ein Hashwert, der durch den Einsatz einer Hashfunktion erzeugt wurde, darf sich nur sehr schwer in den Wert zurückrechnen lassen, der als Input für die Hashfunktion diente. Das bedeutet, dass Hashfunktionen sich wie Einwegfunktionen verhalten müssen, bei denen die Funktion in eine Richtung sehr einfach und möglichst effizient funktionieren soll, eine Umkehr der Funktion aber sehr schwer und mit einem hohen (Rechen-) Aufwand verbunden ist.

Second pre-image resistance:

Es muss schwierig sein, für einen konkreten Input und dessen entsprechenden Output der Hashfunktion einen weiteren Input zu finden, der denselben Output liefert.

Collision resistance:

Es muss auch hier schwierig sein zwei unterschiedliche Inputs zu finden, die denselben Output aus der Hashfunktion produzieren. Hashfunktionen, die eine hohe collision resistance aufweisen, weisen auch folglich eine hohe second pre-image resistance auf.

Diese drei Anforderungen führen dazu, dass eine gute Hashfunktion die Eigenschaft des sog. Avalanche effect erfüllt. Diese Eigenschaft besagt, dass selbst geringfügige Änderungen am Input den erzeugten Output sehr stark verändern. Dadurch ist es nicht möglich, durch eine Analyse verschiedener Outputs auf die zugehörigen Inputs schließen zu können.

Ein Beispiel mit SHA3_256 Hashes:

ProSec =

ProSek

58e769d6dede714bcfa1e3953b31d8e575420fd10e9e187e77166dfd472173a2

 6e085d38614a1b999dece462a176780b675dffd07de2f6381ec8400c5b66e344

ProSec GmbH Logo

=

ac8192b8f83f38b89762f747c9171849eaaaaeb24c4fcfc532db6cfcf5403e06

Eine Kundenberatung?
Optimiere mit uns Deinen Datenschutz!
Jetzt Anfragen

Anwendungen von kryptografischen Hashfunktionen

Passwortbestätigung:

Verfahren zur Prüfung und Bestätigung von Passwörtern benötigen kryptografische Hashfunktionen. Es ist nicht sicher, Passwörter im Klartext zu speichern, um diese dann direkt mit einem eingegebenen Passwort abzugleichen. Hierbei besteht das Risiko, dass die Datenbank, in der solche Passwörter gespeichert werden, gehackt wird und die Passwörter öffentlich verfügbar sind. In der Folge könnten diese Passwörter direkt ausgenutzt werden.

Bild einer Hand, die eine Kryptographie beinhaltet

Um dies zu verhindern, müssen Passwörter als Hashwerte gespeichert werden. Weil sich aus diesen Hashes die genutzten Passwörter nicht zurückerrechnen lassen (Eigenschaft der Einwegfunktion), ist das tatsächliche Passwort, bei Einsatz einer sicheren Hashfunktion und eines guten Passworts, nicht in realistischer Zeit ausrechenbar.

Verfahren zum sicheren hashen von Passwörtern bezeichnet man als key derivation functions. Bei diesen Verfahren werden Passwörter, meistens verbunden mit einem sog. Salt, wiederholt durch eine Hashfunktion gehasht. Hierbei wird der Output der vorherigen Hashfunktion erneut durch dieselbe Funktion gehasht. Üblich sind hierbei beispielsweise 10.000 Wiederholungen dieses Vorgangs. Die Verwendung eines Salts ist notwendig, um die Sicherheit der Passwörter zu erhöhen und z. B. Rainbowtable-Attacken zu verhindern.

Bei der Erstellung eines Passworts wird dieser Prozess durchlaufen und das Ergebnis und der entsprechende Salt-Wert gespeichert. Meldet sich ein Nutzer nun mit dem vergebenen Passwort an, wird dieses zunächst mit dem gespeicherten Salt kombiniert und durchläuft danach denselben Prozess erneut. Wird das korrekte Passwort genutzt, entspricht der Hashwert, der aus dem Prozess gewonnen wird, dem zuvor hinterlegten Hashwert und das eingegebene Passwort ist korrekt. Beispiele für gängige und aktuell als sicher geltenden key derivation functions sind PBKDF2 oder scrypt.

Ein Beispiel mit PBKDF2:

Verwendung der key derivation function PBKDF2 mit dem Passwort „hunter22“ und dem Salt „salt“ bei 10000 Iterationen:

hunter22 =

787a933636cf2ffcb383b99365245ee639db5a5a833e757c05fe36ac7b9a1ff7

Dieser Wert würde in der Folge in einer Passwortdatenbank abgespeichert werden.

Ein Einsatz „einfacher“ kryptografischer Hashverfahren ist für die Passwortbestätigung nicht sicher. Passwörter, die mit dem Algorithmus MD5 gehasht werden, lassen sich z. B. zum Teil schon durch einfache Googlesuchen des Hashwerts mit Ihren Inputs verknüpfen.

Ein Beispiel mit MD5-Hashwert

MD5-Hashwert für hunter22 = cb95015a436fe976eb38e45455372032

google Hashsuche
Auch als sicher geltende Hashingverfahren (SHA-2, SHA-3) sind nicht für den einfachen Einsatz beim Passworthashing geeignet, weil in diesem Fall rainbowtables erstellt werden können, die das „zurückrechnen“ der Hashwerte in das Passwort effizient durchführen können.
Sind auch Deine Passwörter
im Internet zu finden?
Wir finden die Schwachstellen Deiner IT!
Mehr über Pentesting

Authentizität von Nachrichten und Dateien

Die Bestätigung der Authentizität und Integrität von Nachrichten und Dateien wird durch Kryptografische Hashfunktionen und deren Hashwerte ihre Anwendung ermöglicht. Durch das Bilden eines Hashwerts einer übermittelten Nachricht lässt sich prüfen, ob die Nachricht bei der Übermittlung der Nachricht entspricht, die empfangen wird.

In diesem Fall ist die Rede von sog. HMAC (hashed message Authentication Codes). Hierbei bildet der Sender einer Nachricht den Hashwert für diese Nachricht mit einer zuvor bestimmten Hashfunktion und übermittelt diesen ebenfalls. Der Empfänger bildet mit der empfangenen Nachricht und derselben Hashfunktion ebenfalls den Hashwert der Nachricht und vergleicht diesen Hashwert mit dem übermittelten Hashwert.

Sind beide Werte identisch, kann davon ausgegangen werden, dass die Nachricht beim Transport nicht verändert wurde. Dieses Verfahren setzt voraus, dass der übermittelte HMAC durch einen Angreifer nicht verändert werden kann.

Erstellung von digitalen Signaturen und deren Prüfung:

Bei der Verwendung von asymmetrischen Kryptosystemen werden in der Regel Hashwerte der zu signierenden Nachrichten erstellt. Diese werden dann mit dem privaten Schlüssel des signierenden Kommunikationspartners verschlüsselt.

Durch die Entschlüsselung des Hashwerts mit dem öffentlichen Schlüssel des signierenden Partners und dem Abgleich mit dem selber gebildeten Hashwert der Nachricht kann bestätigt werden, dass die Nachricht tatsächlich von diesem Kommunikationspartner stammt, wenn die Hashwerte identisch sind.

Bekannte Hashingverfahren und Schwachstellen

Bekannte Hashingverfahren, die aktuell dem Stand der Technik entsprechen und somit in kryptografischen Verfahren genutzt werden können, sind SHA-2 und SHA-3. SHA steht für Secure Hash Algorithm. Da SHA-2 auf demselben Designprinzip wie SHA-1 basiert, und SHA-1 nicht mehr als sicher gilt, ist jedoch davon auszugehen, dass es in naher Zukunft auch möglich sein wird, das SHA-2-Verfahren erfolgreich anzugreifen. SHA-2 wird dann vermutlich in der Folge nicht mehr dem aktuellen Stand der Technik entsprechen. Bei SHA-3 besteht dieser Verdacht nicht, weil der in SHA-3 standardisierte Algorithmus Keccak auf einem grundlegend anderen Designprinzip basiert und somit nicht für dieselben Attacken anfällig ist.

Die weitverbreiteten Algorithmen MD5 und SHA-1 gelten als unsicher, weil für beide Verfahren erfolgreiche Angriffe veröffentlicht wurden. 2012 wurde für MD5 eine sog. Chosen-prefix collision attack veröffentlicht. Mit einem solchen Angriff ist es möglich, für zwei unterschiedliche Dokumente oder Nachrichten denselben Hashwert zu erzeugen, indem diese mit bestimmten vorberechneten Werten kombiniert werden. Die Kollisionsresistenz des Verfahrens ist somit nicht mehr gegeben, weil Angreifer in der Lage sind, Dokumente oder Nachrichten auszutauschen, ohne dass dies bei der Prüfung der Hashwerte (z. B. dem HMAC) auffallen würde.

Im Januar 2020 wurde eine chosen-prefix collision attack auf SHA-1 veröffentlicht, die mit einem vergleichsweise geringen Rechenaufwand durchgeführt werden kann. Mit einer Rechenleistung, die zum aktuellen Zeitpunkt mit Kosten von ca. 45.000 USD verbunden ist, lassen sich unterschiedliche Inputs mit demselben resultierenden Hashwert errechnen. Somit ist auch für SHA-1 die Kollisionsresistenz nicht mehr gegeben. Die Entwickler des Angriffs konnten die digitale Signatur für einen in GnuPG verwendeten Schlüssel fälschen und somit zeigen, dass die auf SHA-1 basierenden Signaturen nicht mehr als sicher gelten können.

SHA-1 kann auch im Standard TLS 1.2 noch in Ciphersuites genutzt werden. Diese Suites sollten unbedingt deaktiviert werden. TLS 1.3 lässt SHA-1 nicht mehr zu.

Auch das Versionskontrollsystem Git setzt zur Dateiverifikation SHA-1 ein. Die Möglichkeit der chosen-prefix collision attack bietet somit theoretisch die Möglichkeit, Schadcode unbemerkt in Git-Repositories einzuschleusen, die durch eine Prüfung der Hashwerte nicht auffällt.

ANDERE BEITRÄGE

Inhaltsverzeichnis

Wir verwenden Cookies, um Ihnen die bestmögliche Erfahrung zu bieten. Wenn Sie unsere Website weiterhin besuchen, stimmen Sie der Verwendung von Cookies zu, wie in unserer Datenschutzerklärung beschrieben.