Definição
O HMAC (Hash-based Message Authentication Code) é um mecanismo de segurança que permite verificar a integridade e autenticidade de uma mensagem, garantindo que ela não foi alterada e que foi gerada por quem possui uma chave secreta. Ele é muito usado em autenticação de APIs, tokens e assinaturas digitais.
Analogia
Imagine que você envia uma carta dentro de um envelope lacrado com um selo exclusivo que só você e o destinatário conhecem a forma de produzir. Se alguém abrir a carta e alterar qualquer palavra, o selo não vai mais bater com o original. O HMAC funciona exatamente assim: ele “lacra” os dados com uma assinatura impossível de reproduzir sem a chave secreta.
Exemplo sem HMAC (inseguro)
$payload = [
'user' => 'joao',
'exp' => time() + 300
];
// token simples sem proteção
$token = base64_encode(json_encode($payload));
Problema
Qualquer pessoa pode:
- decodificar o token
- alterar exp
- reencodar
- e enganar o sistema
Exemplo com HMAC (seguro)
$payload = [
'user' => 'joao',
'exp' => time() + 300
];
$secret = 'chave_super_secreta';
$signature = hash_hmac(
'sha256',
json_encode($payload['user']) . '|' . $payload['exp'],
$secret
);
$payload['sig'] = $signature;
$token = base64_encode(json_encode($payload));
Validação do lado do servidor
$payload = json_decode(base64_decode($_GET['token']), true);
$check = hash_hmac(
'sha256',
json_encode($payload['user']) . '|' . $payload['exp'],
$secret
);
if (!hash_equals($check, $payload['sig'])) {
die("Token inválido");
}
Top comments (0)