Da RFC 2104 § 6 che descrive i requisiti di sicurezza per un HMAC:
The security of the message authentication mechanism presented here depends on cryptographic properties of the hash function H: the resistance to collision finding (limited to the case where the initial value is secret and random, and where the output of the function is not explicitly available to the attacker), and the message authentication property of the compression function of H when applied to single blocks (in HMAC these blocks are partially unknown to an attacker as they contain the result of the inner H computation and, in particular, cannot be fully chosen by the attacker).
Quindi non è che le collisioni non siano importanti per un HMAC. È che un attacco di collisione contro una funzione hash non influisce sulla funzione hash quando viene utilizzato in una costruzione HMAC. In particolare, un HMAC richiede garanzie di sicurezza molto più deboli dalla funzione hash rispetto a molte altre applicazioni che potrebbe avere. Richiede solo una resistenza di collisione debole dall'hash sottostante.
HMAC è definito come HMAC K (m) = H ((K ⊕ opad) || H ((K ⊕ ipad) || m)) dove < em> opad e ipad sono costanti e H è un hash almeno leggermente resistente alla collisione. Il tasto K non è noto a un utente malintenzionato. Per attivare una collisione con un HMAC, un utente malintenzionato dovrebbe eseguire una delle seguenti operazioni:
-
Trova una collisione valida per un numero di chiavi.
-
Esegui un attacco per il recupero delle chiavi riuscito.
È estremamente improbabile che entrambi siano possibili anche per il peggiore degli hash crittografici.