HMAC funciona con cualquier hash (HMAC-SHA256 da una etiqueta de 32 bytes) y sigue siendo seguro incluso con hashes cuya resistencia a colisiones está rota, y por eso HMAC-SHA1 todavía aparece en TOTP. Las claves más largas que el tamaño de bloque del hash (64 bytes para SHA-256) primero pasan por el hash, y las más cortas se rellenan con ceros; una clave debería tener al menos tantos bits de entropía como el nivel de seguridad buscado. El RFC 7518 §3.2 exige claves HS256 de al menos 256 bits.
Usos: HS256/HS384/HS512 de JWT, firmas de webhooks (por ejemplo, X-Hub-Signature-256 de GitHub y Stripe-Signature de Stripe), la firma de solicitudes de AWS Signature Version 4, el funcionamiento interno de HKDF y PBKDF2, los MAC de registro de TLS 1.2 y los códigos TOTP/HOTP. Compara las etiquetas con una función de tiempo constante.
Un HMAC no es una firma: todos los verificadores tienen la misma clave y podrían haber generado la etiqueta, así que no aporta no repudio y no sirve cuando los verificadores no deben poder emitir tokens. La calculadora de HMAC calcula y comprueba etiquetas localmente.