+49 (0) 8171/405-0 info@proSoft.de

HMAC

HMAC ist ein Nachrichten-Authentifizierungscode, der durch Ausführen einer kryptographischen Hash-Funktion (wie MD5, SHA1 und SHA256) über die zu authentifizierenden Daten und einen gemeinsamen Geheimschlüssel erhalten wird.

HMAC steht für Hash oder Hash-basierter Message Authentication Code. Es ist das Ergebnis der Arbeit an der Entwicklung eines MAC, der von kryptographischen Hash-Funktionen abgeleitet ist.

HMAC ist sehr resistent gegen Kryptoanalyse-Angriffe, da es das Hashing-Konzept doppelt anwendet.

HMAC besteht aus zwei Vorteilen: dem Hashing und MAC. Es ist damit sicherer als alle anderen Authentifizierungscodes.

HMAC ist wie die Hash-Funktion auch darauf ausgerichtet, eine One-Way Lösung zu sein, d.h. einfach zu generierende Ausgabe aus der Eingabe, aber umgekehrt komplex.

HMAC zielt darauf ab, weniger von Kollisionen betroffen zu sein als die Hash-Funktionen.

HMAC versucht, die Schlüssel einfacher zu bedienen.

HMACs sind den digitalen Signaturen fast ähnlich. Beide setzen Integrität und Authentizität durch. Beide verwenden kryptographische Schlüssel. Und beide nutzen Hash-Funktionen. Der Hauptunterschied besteht darin, dass digitale Signaturen asymmetrische Schlüssel verwenden, während HMACs symmetrische Schlüssel verwenden.

HMAC ist in RFC 2104 spezifiziert.


HMAC Funktionsweise

Um zu verstehen, wie HMAC funktioniert, lassen Sie uns zunächst untersuchen, wie eine Hash-Funktion (als solche) für die Durchführung einer Datenintegritätsprüfung bei einem Dateitransfer verwendet werden kann.

Angenommen, eine Client-Anwendung lädt eine Datei von einem Remote-Server herunter. Es wird davon ausgegangen, dass sich Client und Server bereits auf eine gemeinsame Hash-Funktion geeinigt haben, z.B. SHA2.

Bevor der Server die Datei versendet, erhält er zunächst einen Hash dieser Datei mit der SHA2-Hash-Funktion. Anschließend wird dieser Hash (alias message digest) zusammen mit der Datei selbst gesendet. Nach Erhalt der beiden Elemente (d.h. der heruntergeladenen Datei und des Hash) erhält der Client den SHA2-Hash der heruntergeladenen Datei und vergleicht ihn dann mit dem heruntergeladenen Hash. Wenn die beiden übereinstimmen, dann würde das bedeuten, dass die Datei unterwegs nicht manipuliert wurde.

Wenn es einem Angreifer gelingt, die heruntergeladene Datei abzufangen, den Inhalt der Datei zu ändern und die manipulierte Datei dann an den Empfänger weiterzuleiten, wird dieser Manipulation nicht unbemerkt bleiben. Das liegt daran, dass, sobald der Client die manipulierte Datei durch den vereinbarten Hash-Algorithmus führt, der resultierende Hash nicht mehr mit dem heruntergeladenen Hash übereinstimmt. Dadurch kann der Empfänger erkennen, dass die Datei auf diesem Weg manipuliert wurde.

Eine Hash-Funktion alleine ist jedoch nicht genug. Während eine Hash-Funktion die Datenintegrität herstellen kann, d.h. dass die Datei oder Nachricht unterwegs nicht verändert wurde, kann sie die Authentizität nicht feststellen. Woher weiß der Kunde, dass die empfangene Nachricht von der legitimen Quelle stammt?

Deshalb verwenden sichere Dateiübertragungsprotokolle wie FTPS, SFTP und HTTPS HMACs anstelle von Hash-Funktionen, wenn zwei Parteien Nachrichten über diese sicheren Dateiübertragungsprotokolle austauschen, werden diese Nachrichten von HMACs anstelle von einfachen Hashes begleitet. Ein HMAC verwendet sowohl eine Hash-Funktion als auch einen gemeinsamen Geheimschlüssel.

Ein gemeinsamer Geheimschlüssel bietet den Austauschpartnern die Möglichkeit, die Authentizität der Nachricht zu überprüfen. Das heißt, es bietet den beiden Parteien eine Möglichkeit zu überprüfen, ob sowohl die Nachricht als auch der MAC (genauer gesagt, ein HMAC), die sie erhalten, wirklich von der Partei stammen, mit der sie Geschäfte tätigen sollen.

Der geheime Schlüssel ermöglicht diese Fähigkeit, da er während des Schlüsselaustauschs generiert wird – einem vorgelagertem Prozess, der die Beteiligung beider Parteien erfordert. Nur die beiden Parteien, die am Schlüsselaustausch teilgenommen haben, wissen, was der gemeinsame geheime Schlüssel ist. Im Gegenzug wären sie die Einzigen, die zum gleichen Ergebnis kommen könnten, wenn sie den entsprechenden MAC der Nachricht mit dem gemeinsamen Geheimschlüssel berechnen würden.


Die richtige Auswahl eines HMACs
Da die Eigenschaften eines HMACs (insbesondere seine kryptographische Stärke) stark von seiner zugrunde liegenden Hash-Funktion abhängig sind, wird ein bestimmter HMAC in der Regel anhand dieser Hash-Funktion identifiziert. Wir haben also HMAC-Algorithmen, die den Namen HMAC-MD5, HMAC-SHA1 oder HMAC-SHA256 tragen.

Sie haben wahrscheinlich schon von den kollisionsbedingten Schwachstellen von MD5 gehört. Es ist anzumerken, dass HMAC-MD5 trotz seiner zugrunde liegenden MD5-Hash-Funktion nicht so stark von diesen Schwachstellen betroffen ist. Unabhängig davon ist SHA-1 immer noch kryptographisch stärker als MD5 und SHA-2 (und seine verschiedenen Formen, z.B. SHA-224, SHA-256, SHA-512) ist ebenfalls kryptographisch stärker als SHA1, so dass Sie das berücksichtigen sollten.

Welches HMAC sollten Sie also verwenden? Normalerweise würden Sie ein HMAC basierend auf seiner zugrunde liegenden Hash-Funktion wählen. So sollten Sie beispielsweise HMAC-MD5 verwenden, wenn die Leistung für Sie wichtiger ist als die Sicherheit. Andererseits, wenn die Sicherheit kritischer ist, dann sollten Sie stattdessen HMAC-SHA256 verwenden.

Verwandte Begriffe:
  • Hash Message Authentication Code
  • Hash based Message Authentication Code
  • Keyed-Hash Message Authentication Code
  • HMAC Algorithmus