O que é DKIM?
DKIM (DomainKeys Identified Mail) é um método de autenticação de email que permite que o servidor remetente assine digitalmente mensagens de saída. O servidor receptor pode então verificar essa assinatura usando uma chave pública publicada em DNS, confirmando que o email não foi modificado em trânsito e realmente originou do domínio reclamado.
Como DKIM Funciona
1. Geração de Chave: Proprietário de domínio gera um par de chaves pública/privada
2. Publicação de DNS: Chave pública é publicada como um registro TXT
3. Assinatura de Mensagem: Emails de saída são assinados com a chave privada
4. Verificação de Assinatura: Servidor receptor recupera chave pública e verifica assinatura
O Processo de Assinatura
Quando um email é enviado:
1. Servidor de email calcula um hash dos headers da mensagem e corpo
2. Hash é criptografado com a chave privada (criando a assinatura)
3. Assinatura é adicionada como um header DKIM-Signature
4. Email é transmitido
O Processo de Verificação
Quando um email é recebido:
1. Servidor extrai o header DKIM-Signature
2. Encontra seletor e domínio (s=seletor; d=domínio.com)
3. Consulta DNS para registro TXT selector._domainkey.domínio.com
4. Usa chave pública para descriptografar a assinatura
5. Calcula seu próprio hash da mensagem
6. Compara: correspondência = pass, não corresponde = fail
Formato de Registro DKIM
Registros DKIM são registros TXT em um subdomínio específico:
seletor._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0..."
Componentes de Registro
| Tag | Descrição | Exemplo |
|---|---|---|
| v | Versão | v=DKIM1 |
| k | Tipo de chave | k=rsa |
| p | Chave pública (base64) | p=MIGfMA0GCSqG... |
| t | Flags (opcional) | t=y (modo testing) |
| h | Algoritmos hash | h=sha256 |
Seletores
Seletores permitem múltiplas chaves DKIM por domínio:
google._domainkey.example.com # Google Workspace
s1._domainkey.example.com # Sendgrid
mailchimp._domainkey.example.com # Mailchimp
Cada serviço de email fornece seu próprio seletor e chave.
Header de Assinatura DKIM
Uma assinatura DKIM parece:
DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=google;
c=relaxed/relaxed; q=dns/txt;
h=from:to:subject:date:message-id;
bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
b=AuUoFEfDxTDkHlLXSZEpZj79...
Campos principais:
- d=: Domínio de assinatura
- s=: Seletor (usado para encontrar registro DNS)
- h=: Headers incluídos na assinatura
- b=: A assinatura real
- bh=: Hash de corpo
Configurando DKIM
Para Google Workspace
1. Vá para Admin Console → Apps → Gmail → Authenticate email
2. Gere chave DKIM (2048-bit recomendado)
3. Adicione registro TXT fornecido pelo Google
4. Ative assinatura DKIM
Para Serviços de Terceiros
A maioria dos serviços de email (SendGrid, Mailchimp, etc.) fornece:
1. Um registro CNAME para adicionar (para sua chave gerenciada)
2. Ou um registro TXT com a chave pública
Exemplo (SendGrid):
s1._domainkey.example.com CNAME s1.domainkey.sendgrid.net
Verificando DKIM
Envie um email de teste para um serviço que mostra headers (Gmail mostra resultados de autenticação). Usando linha de comando:dig google._domainkey.example.com TXT
Usando DomScan:
curl "https://domscan.net/v1/health?domain=example.com"
# Relata status DKIM baseado em seletores comuns
Melhores Práticas de DKIM
Use Chaves de 2048-bits
Chaves mais antigas de 1024-bits são cada vez mais vulneráveis. A maioria dos provedores agora padrão para 2048-bits.
Rotacione Chaves Periodicamente
Rotacione chaves DKIM anualmente ou após incidentes de segurança. Publique nova chave com novo seletor antes de mudar.
Assine Headers Importantes
Garanta que From, To, Subject, Date e Message-ID estejam inclusos em assinaturas.
Não Modifique Mensagens Assinadas
Serviços de mailing list ou encaminhamento que modificam conteúdo quebram DKIM. Use ARC (Authenticated Received Chain) para emails encaminhados.
Limitações de DKIM
DKIM sozinho não previne spoofing—apenas prova que uma mensagem não foi alterada. Um domínio pode ter DKIM válido enquanto atacantes enviam email falsificado não assinado. DMARC resolve isto especificando o que fazer com mensagens não assinadas.