HMAC (Hash-based Message Authentication Code)

Definição

HMAC (Hash-based Message Authentication Code) é um mecanismo que combina funções de hash com uma chave secreta para produzir um código de autenticação de mensagem.
O objetivo do HMAC é garantir tanto a integridade quanto a autenticidade de uma mensagem.

Em vez de simplesmente calcular o hash da mensagem, o HMAC:

  • Combina a chave secreta e a mensagem de forma segura;
  • Aplica a função de hash sobre essa combinação;
  • Gera um código que valida tanto a integridade quanto a autenticidade da mensagem.

HMAC é usado em diversos protocolos de segurança, como SSL/TLS, IPsec e autenticação de APIs.

Objetivos do HMAC

  • Garantir integridade de dados: detectar alterações não autorizadas em mensagens.
  • Assegurar autenticidade: confirmar que a mensagem foi gerada por quem possui a chave secreta.
  • Resistir a ataques de força bruta: proteger contra tentativas de forjar o código de autenticação.
  • Base para autenticação de APIs e comunicação segura: usado para proteger dados transmitidos por redes inseguras.

Exemplo prático (Python) — Criando um HMAC com SHA-256

import hmac
import hashlib

# Chave secreta (compartilhada entre as partes)
chave_secreta = b'segredo_super_secreto'

# Mensagem original
mensagem = b'Programício é incrível!'

# Gerar o HMAC
hmac_gerado = hmac.new(chave_secreta, mensagem, hashlib.sha256)

print("Mensagem:", mensagem.decode())
print("HMAC (hex):", hmac_gerado.hexdigest())

Saída

Mensagem: Programício é incrível!
HMAC (hex): 9c78c178d0c011f1aa7b3a11e832a9d8bdc75e2e6ab11c6f36eb2d7401d0c0ed

(O HMAC depende tanto da mensagem quanto da chave secreta. Qualquer alteração em um deles altera o HMAC.)

O ciclo do HMAC

[Mensagem + Chave Secreta] --> (Aplicação de Função de Hash Segura) --> [Código HMAC]
  • Se a mensagem ou a chave mudar, o HMAC muda completamente.

  • Serve como prova de que a mensagem veio de quem detinha a chave.

Relacionados

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com