Skip to content

Wie funktioniert ein HMAC und warum sollte man ihn statt eines einfachen Hashs verwenden?

Kurzantwort

Ein HMAC ist ein schlüsselbasierter Nachrichtenauthentifizierungscode: Er hasht die Nachricht zusammen mit einem geheimen Schlüssel über eine verschachtelte Konstruktion (innerer und äußerer Hash mit schlüsselabgeleiteten Pads). Er beweist sowohl Integrität (die Nachricht wurde nicht verändert) als auch Authentizität (sie stammt von jemandem mit dem Schlüssel). Ein einfacher Hash beweist keines von beiden, da ihn jeder neu berechnen kann; HMAC widersteht zudem Length-Extension-Angriffen.

Diese Frage prüft, ob du den Unterschied zwischen Integrität (Daten wurden nicht verändert) und Authentizität (Daten stammen von einer bestimmten Partei) verstehst und warum ein bloßer Hash dir in einem feindlichen Umfeld keines von beiden bietet.

Warum ein einfacher Hash nicht ausreicht

Wenn du eine Nachricht zusammen mit SHA-256(message) sendest, kann ein Angreifer, der die Nachricht verändert, den Hash einfach neu berechnen. Es ist kein Geheimnis beteiligt, also beweist der Digest nichts darüber, wer ihn erzeugt hat. Man könnte meinen, SHA-256(secret || message) behebe das, doch es ist anfällig für einen Length-Extension-Angriff: Bei Hashes wie SHA-256 und SHA-1 erlaubt die Kenntnis des Digests von secret || message einem Angreifer, einen gültigen Digest für secret || message || extra zu berechnen, ohne das Geheimnis zu kennen. Das bricht die gewünschte Sicherheit.

Wie HMAC aufgebaut ist

HMAC löst dies mit einer bestimmten verschachtelten Konstruktion. Es leitet zwei gepaddete Schlüssel aus dem Geheimnis ab (ein inneres und ein äußeres Pad) und berechnet:

HMAC = H( (Schlüssel ⊕ opad) || H( (Schlüssel ⊕ ipad) || Nachricht ) )

Die Nachricht wird unter dem Schlüssel gehasht, und dieses Ergebnis wird erneut unter dem Schlüssel gehasht. Diese doppelte Umhüllung wehrt Length Extension ab und bindet den Digest an das Geheimnis. Wer den Schlüssel besitzt, kann das Tag verifizieren; wer ihn nicht hat, kann keines fälschen.

Was es dir bietet

Ein gültiger HMAC teilt dem Empfänger zwei Dinge zugleich mit: Die Nachricht wurde nicht verändert und sie wurde von jemandem erzeugt, der den gemeinsamen Schlüssel kennt. Er bietet keine Vertraulichkeit – die Nachricht selbst bleibt lesbar, sofern sie nicht separat verschlüsselt wird, weshalb es Modi der authentifizierten Verschlüsselung gibt.

Eine Implementierungsfalle

Der Vergleich des empfangenen Tags mit dem berechneten muss in konstanter Zeit erfolgen. Ein naiver Byte-für-Byte-Vergleich, der früh abbricht, gibt eine Zeitinformation preis, die ein Angreifer zum Fälschen eines Tags nutzen kann.

Worauf Interviewer achten

Erwähne den geheimen Schlüssel, die Garantie aus Integrität und Authentizität, die Length-Extension-Resistenz als Grund für das verschachtelte Design und das Detail des Vergleichs in konstanter Zeit für Bonuspunkte.

Wahrscheinliche Anschlussfragen

  • Warum funktioniert das Anhängen eines Geheimnisses an eine Nachricht (hash(secret || message)) nicht sicher?
  • Was ist ein Length-Extension-Angriff und welche Hashes sind anfällig?
  • Warum muss die HMAC-Verifikation einen Vergleich in konstanter Zeit verwenden?

Quellen

Zertifizierungen

Erhalte 100 Cybersecurity-Interviewfragen + Antworten

Gib deine E-Mail-Adresse ein und wir senden dir das kostenlose PDF-Paket und das Flashcard-Deck.

Kein Spam. Jederzeit abbestellbar.