Assinatura DKIM
Uma assinatura DKIM é uma assinatura criptográfica adicionada aos cabeçalhos de um e-mail (o cabeçalho DKIM-Signature) que permite aos receptores verificar que a mensagem foi autorizada pelo domínio de envio e não foi alterada em trânsito. As tags principais incluem d (domínio), s (seletor), b (assinatura) e bh (hash do corpo).
Este guia faz parte do nosso guia completo sobre DKIM. Relacionado: o registro DKIM e por que o DKIM falha.
Uma assinatura DKIM é uma assinatura criptográfica adicionada aos cabeçalhos de um e-mail — transportada no cabeçalho DKIM-Signature — que permite a um servidor receptor verificar que a mensagem foi autorizada pelo domínio de envio e não foi alterada em trânsito. A assinatura é gerada com uma chave privada mantida pelo remetente e verificada contra uma chave pública correspondente publicada no DNS.
Como é o cabeçalho DKIM-Signature
A assinatura viaja como um único campo de cabeçalho anexado à frente da mensagem. Ela reúne tudo o que um receptor precisa — o domínio de assinatura, o seletor, quais cabeçalhos foram assinados, um hash do corpo e a própria assinatura — em uma série de pares tag=value separados por ponto e vírgula.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=example.com; s=selector1; t=1700000000;
h=from:to:subject:date;
bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
b=Cg5Xje8kY0m5xT1pW2qL4vN8rH6dF3aZ9cU7bE0iQoR2sT4uV6wX8yZ1
aB3cD5eF7gH9jK2lM4nP6qR8sT0uV2wX4yZ6aB8cD0eF2gH4jK6l=
O cabeçalho é inserido pelo servidor de e-mail do remetente antes de a mensagem sair do domínio. As quebras de linha e a indentação servem apenas para dobramento — o valor é logicamente uma única string contínua.
As tags em uma assinatura DKIM
Cada tag carrega uma peça do quebra-cabeça de verificação. O signatário escolhe esses valores; o verificador os lê de volta para reconstruir e checar a assinatura.
| Tag | Nome | Propósito |
|---|---|---|
v | Versão | Versão do DKIM. Sempre 1. |
a | Algoritmo | Algoritmo de hash e de assinatura, por exemplo rsa-sha256 ou ed25519-sha256. |
d | Domínio | O domínio de assinatura — a identidade que o DKIM autentica. |
s | Seletor | Nomeia qual chave pública buscar no DNS do domínio. |
h | Cabeçalhos assinados | Lista separada por dois-pontos dos campos de cabeçalho cobertos pela assinatura. |
bh | Hash do corpo | Hash do corpo (canonicalizado) da mensagem. |
b | Assinatura | A assinatura criptográfica em si, codificada em base64. |
c | Canonicalização | Como cabeçalhos/corpo são normalizados antes do hash, por exemplo relaxed/relaxed. |
t / x | Timestamps | t é quando a mensagem foi assinada; x é quando a assinatura expira. |
Como funciona a assinatura (ao enviar)
Quando uma mensagem sai do servidor de envio, o DKIM faz duas coisas. Primeiro, ele canonicaliza o corpo e faz o seu hash, armazenando o resultado em bh. Depois, ele canonicaliza os cabeçalhos nomeados em h — junto com o próprio cabeçalho DKIM-Signature (com um b vazio) — faz o hash desse bloco e assina o hash com a chave privada do domínio. A assinatura resultante torna-se o valor b. Como a chave privada nunca sai do remetente, apenas o verdadeiro proprietário do domínio pode produzir uma assinatura que será validada.
Como funciona a verificação (ao receber)
O servidor receptor lê o cabeçalho DKIM-Signature para descobrir o domínio (d) e o seletor. Ele consulta o DNS em <selector>._domainkey.<domain> para buscar a chave pública no registro DKIM. Em seguida, ele repete o trabalho do remetente: canonicaliza e faz o hash do corpo, compara-o com bh, canonicaliza e faz o hash dos cabeçalhos assinados, e usa a chave pública para checar b contra esse hash de cabeçalho. Se tanto o hash do corpo corresponder quanto a assinatura verificar, o DKIM passa. A verificação de bh é o que detecta qualquer adulteração no corpo da mensagem — até mesmo um único caractere alterado produz um hash diferente e falha na verificação.
Quando as assinaturas falham
Uma assinatura DKIM falha sempre que a mensagem que o receptor vê não corresponde mais ao que o remetente assinou. As causas mais comuns são:
- Modificação em trânsito — listas de discussão, encaminhadores e alguns gateways reescrevem assuntos, anexam rodapés ou recodificam o corpo, o que quebra o hash do corpo.
- Incompatibilidade de hash do corpo — qualquer alteração na parte assinada do corpo muda
bh, então a verificação falha mesmo que a chave esteja correta. - Chave errada ou ausente — o seletor aponta para um registro DNS que está ausente, expirado ou contém a chave pública errada.
Para uma explicação mais completa das causas e correções, consulte por que o DKIM falha, e use a ferramenta gratuita de consulta DKIM para confirmar que a chave pública de um seletor está publicada e bem formada.
Perguntas Frequentes
O que é uma assinatura DKIM?
Uma assinatura DKIM é uma assinatura criptográfica adicionada aos cabeçalhos de um e-mail no campo DKIM-Signature. O remetente a gera com uma chave privada sobre cabeçalhos selecionados e um hash do corpo. Os receptores a verificam contra uma chave pública no DNS, provando que a mensagem veio do domínio e não foi alterada.
O que significa a tag b= em uma assinatura DKIM?
A tag b= contém a assinatura em si: um valor codificado em base64 produzido ao assinar um hash dos cabeçalhos assinados canonicalizados com a chave privada do domínio de envio. O receptor a decodifica e a verifica contra a chave pública buscada no DNS. Se os cabeçalhos assinados foram alterados em trânsito, a verificação de b= falha.
Por que uma assinatura DKIM falha após o encaminhamento?
Encaminhadores e listas de discussão frequentemente modificam a mensagem — anexando rodapés, reescrevendo o assunto ou recodificando o corpo. Como o DKIM assina o corpo exato e os cabeçalhos selecionados, qualquer alteração desse tipo modifica o hash calculado de modo que ele não corresponde mais ao bh assinado ou ao hash do cabeçalho. A assinatura então falha na verificação, mesmo que a original fosse válida.
O que é o hash do corpo (bh) no DKIM?
A tag bh= é um hash do corpo da mensagem após a canonicalização, calculado com o algoritmo nomeado em a. Ao receber, o verificador recalcula o hash do corpo e o compara com bh. Uma incompatibilidade significa que o corpo foi alterado em trânsito, então a assinatura é rejeitada antes mesmo de a assinatura criptográfica em b= ser checada.