4. Kürzung (Truncation)
4.1 Implementierungshinweis (Implementation Note)
HMAC ist so definiert, dass die zugrunde liegende Hash-Funktion H ohne Änderung ihres Codes verwendet werden kann. Insbesondere wird H als eine Funktion mit einem vordefinierten Anfangswert IV (einem festen Wert, den jede iterative Hash-Funktion zur Initialisierung ihrer Kompressionsfunktion vorgibt) verwendet. In gängigen Implementierungen kryptografischer Hash-Funktionen wird IV als hartcodierte Konstante gespeichert. Eine effiziente Methode zur Implementierung von HMAC besteht darin, diesen IV als internen Zustand, der mit K XOR opad und K XOR ipad initialisiert ist, vorab zu berechnen. (Diese Optimierung ist jedoch kein Teil der HMAC-Spezifikation, sondern ein Implementierungsdetail.)
4.2 Gekürzte Ausgabe (Truncated Output)
Einige Anwendungen möchten möglicherweise nur n Bytes der HMAC-Ausgabe verwenden (wobei n kleiner oder gleich der Hash-Länge L ist, d. h. n ≦ L). Es wird empfohlen, dass diese gekürzte Ausgabe aus den ersten n Bytes des HMAC besteht. Die gekürzte HMAC-Ausgabe ist für einen gegebenen Schlüssel und Text eindeutig bestimmt. Um die gekürzte Ausgabe von der HMAC-Spezifikation zu unterscheiden, wird die um n Bytes gekürzte Ausgabe eines HMAC als HMAC-H-t bezeichnet (wobei H die Hash-Funktion und t die Ausgabelänge in Bytes ist). Beispielsweise werden die ersten 8 Bytes von HMAC-MD5 als HMAC-MD5-80 bezeichnet (80 steht für die Bitlänge).
Bei Verwendung einer um n Bytes gekürzten Ausgabe wird empfohlen, dass n mindestens 10 Bytes (80 Bit) beträgt. Dies bietet eine Sicherheitsstärke von 80 Bit gegen Brute-Force-Angriffe. Eine Kürzung auf weniger als 10 Bytes wird nicht empfohlen.