Pular para o conteúdo
ecdsa.com

HMAC

O código de autenticação de mensagem baseado em hash com chave da RFC 2104 e do FIPS 198-1, calculado como H((K ⊕ opad) ‖ H((K ⊕ ipad) ‖ m)), que comprova a integridade e a origem para quem compartilha a chave secreta.
Também escrito comoHMAC-SHA256keyed-hash message authentication codeHMAC-SHA1

O HMAC funciona com qualquer hash (o HMAC-SHA256 gera uma tag de 32 bytes) e continua seguro mesmo com hashes cuja resistência a colisões foi quebrada, e é por isso que o HMAC-SHA1 ainda aparece no TOTP. Chaves maiores que o tamanho de bloco do hash (64 bytes no SHA-256) passam antes por um hash, e as menores são completadas com zeros; é recomendável que a chave tenha pelo menos tantos bits de entropia quanto o nível de segurança desejado. A RFC 7518 §3.2 exige chaves HS256 de pelo menos 256 bits.

Usos: JWT HS256/HS384/HS512, assinaturas de webhook (por exemplo, o X-Hub-Signature-256 do GitHub e o Stripe-Signature do Stripe), assinatura de requisições com o AWS Signature Version 4, o funcionamento interno do HKDF e do PBKDF2, os MACs de registro do TLS 1.2 e os códigos TOTP/HOTP. Compare as tags com uma função de tempo constante.

Um HMAC não é uma assinatura: todo verificador tem a mesma chave e poderia ter produzido a tag, então ele não oferece não repúdio e não serve quando os verificadores não devem poder emitir tokens. A calculadora de HMAC calcula e verifica tags localmente.

Padrões e referências

Todos os termos