HMAC

sigla

criptografia

Significa: Hash-based Message Authentication Code

Uma forma de provar que uma mensagem é autêntica e inalterada, usando um hash e um segredo compartilhado.

O Hash-based Message Authentication Code (RFC 2104) combina uma chave secreta com a mensagem, de modo que só quem tem a chave produz ou verifica a etiqueta. Diferente de um hash puro, protege contra adulteração por quem não consegue forjar a chave.

O HMAC é a forma padrão de construir um código de autenticação de mensagem a partir de uma função de hash, e existe porque as abordagens óbvias são quebradas. Simplesmente prefixar uma chave à mensagem e aplicar o hash cai para ataques de extensão de comprimento contra construções Merkle-Damgard como o SHA-256, em que um atacante que tenha uma etiqueta válida consegue calcular uma etiqueta válida para uma mensagem mais longa sem conhecer a chave.

A construção derrota isso aplicando o hash duas vezes com duas chaves derivadas, numa passagem interna e outra externa. O aninhamento faz com que o atacante nunca tenha acesso ao estado interno de que a extensão de comprimento depende. Os detalhes importam menos que o princípio: este é um caso em que a composição segura não é óbvia, que é exatamente por que existe um padrão e por que ninguém deve inventar o seu.

Duas notas práticas. A comparação de etiquetas precisa ser feita em tempo constante, porque uma comparação comum retorna assim que encontra o primeiro byte diferente e vaza quanto de uma etiqueta forjada estava correto, o que basta para reconstruí-la byte a byte. E o HMAC sustenta muito mais do que lhe é creditado: códigos TOTP, assinaturas JWT da família HS, assinatura de requisições da AWS e verificação de webhooks são todos HMAC com nomes diferentes.

Também conhecido como: hmac

Fontes

Todos os verbetes do glossário