Zum Hauptinhalt springen

2. Definition von HMAC (Definition of HMAC)

Die Definition von HMAC erfordert eine kryptografische Hash-Funktion (bezeichnet durch H) und einen geheimen Schlüssel K. Wir nehmen an, dass H eine kryptografische Hash-Funktion ist, die Daten hasht, indem sie eine grundlegende Kompressionsfunktion iterativ über Datenblöcke anwendet. Wir bezeichnen mit B die Byte-Länge solcher Blöcke (für alle obigen Beispiele von Hash-Funktionen gilt B=64) und mit L die Byte-Länge der Hash-Ausgabe (L=16 für MD5, L=20 für SHA-1). Der Authentifizierungsschlüssel K kann eine beliebige Länge bis zu B (der Blocklänge der Hash-Funktion) aufweisen. Anwendungen, die einen Schlüssel von mehr als B Bytes verwenden, hashen den Schlüssel zunächst mit H und verwenden dann die resultierende L-Byte-Zeichenkette als den tatsächlichen Schlüssel für HMAC. In allen Fällen beträgt die minimal empfohlene Länge für K L Bytes (die Ausgabelänge des Hash). Weitere Informationen zu Schlüsseln finden sich in Abschnitt 3.

Wir definieren zwei feste und unterschiedliche Zeichenketten ipad und opad wie folgt ('i' und 'o' sind Merkhilfen für inner und outer):

ipad = the byte 0x36 repeated B times
opad = the byte 0x5C repeated B times

Um den HMAC über die Daten text zu berechnen, führen wir Folgendes aus:

H(K XOR opad, H(K XOR ipad, text))

das heißt:

  1. Hänge Nullen an das Ende von K an, um eine B-Byte-Zeichenkette zu erzeugen (z. B. wenn die Länge von K 20 Byte beträgt und B=64, dann werden 44 Null-Bytes 0x00 an K angehängt)
  2. Bilde das XOR (bitweises exklusives Oder) der in Schritt (1) berechneten B-Byte-Zeichenkette mit ipad
  3. Hänge den Datenstrom 'text' an die in Schritt (2) resultierende B-Byte-Zeichenkette an
  4. Wende H auf den in Schritt (3) erzeugten Strom an
  5. Bilde das XOR (bitweises exklusives Oder) der in Schritt (1) berechneten B-Byte-Zeichenkette mit opad
  6. Hänge das H-Ergebnis aus Schritt (4) an die in Schritt (5) resultierende B-Byte-Zeichenkette an
  7. Wende H auf den in Schritt (6) erzeugten Strom an und gib das Ergebnis aus

Zur Veranschaulichung wird im Anhang ein auf MD5 basierendes Beispielcode bereitgestellt.