Kryptografische Hashfunktionen sind Hashfunktionen die kryptografischen Anforderungen genügen und in Verschlüsselungs-, Signatur- oder Authentifizierungsverfahren genutzt werden können.
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.
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.
Es muss schwierig sein, für einen konkreten Input und dessen entsprechenden Output der Hashfunktion einen weiteren Input zu finden, der denselben Output liefert.
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.
ProSec =
ProSek =
58e769d6dede714bcfa1e3953b31d 8e575420fd10e9e187e77166dfd4 72173a2
6e085d38614a1b999dece462a1767 80b675dffd07de2f6381ec8400c5b 66e344
=
ac8192b8f83f38b89762f747c9171849 eaaaaeb24c4fcfc532db6cfcf5403e06
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.
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.
Verwendung der key derivation function PBKDF2 mit dem Passwort „hunter22“ und dem Salt „salt“ bei 10000 Iterationen:
hunter22 =
787a933636cf2ffcb383b99365245ee 639db5a5a833e757c05fe36ac7b9a 1ff7
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.
MD5-Hashwert für hunter22 = cb95015a436fe976eb38e45455372032
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.
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, 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.
Wir verwenden Cookies, und Google reCAPTCHA, das Google Fonts lädt und mit Google-Servern kommuniziert. Durch die weitere Nutzung unserer Website stimmen Sie der Verwendung von Cookies und unserer Datenschutzerklärung zu.