Como o DKIM encontra a chave
Uma assinatura DKIM em uma mensagem informa um domínio (d=) e um selector (s=). O destinatário os combina no formato selector._domainkey.domain, consulta o registro TXT nesse endereço e usa a chave pública da tag p= para verificar a assinatura. Um domínio pode publicar qualquer quantidade de selectors, permitindo que cada serviço de envio tenha sua própria chave e que as chaves sejam substituídas sem interrupção.
A verificação precisa do selector porque o DNS não oferece uma forma de listar os selectors de um domínio. Não há nada para verificar automaticamente, pois o selector vem da assinatura de uma mensagem real.
O que torna uma chave fraca ou inválida
A RFC 8301 determina que chaves RSA devem ter pelo menos 1024 bits e recomenda 2048 bits. Um verificador pode ignorar uma chave mais curta, e o nosso faz isso. Portanto, uma chave de 512 bits conta como se não houvesse assinatura. As chaves Ed25519 (RFC 8463) são curtas por definição e seguras, mas nem todos os destinatários ainda conseguem verificá-las. Por isso, geralmente são publicadas junto com uma chave RSA, e não no lugar dela.
O verificador decodifica a chave por completo, porque um registro dividido incorretamente entre strings TXT ou um base64 que não pode ser decodificado resulta em uma chave que nenhum destinatário consegue usar. Um p= vazio significa que a chave foi revogada intencionalmente. t=y indica um domínio que ainda está em teste, e a RFC 6376 §3.6.1 orienta os verificadores a tratar suas mensagens exatamente como mensagens sem assinatura.
Perguntas
Como encontro meu seletor DKIM e sei se o DKIM está ativado?
Envie uma mensagem para você mesmo e abra os cabeçalhos da cópia recebida. Um cabeçalho DKIM-Signature significa que a mensagem foi assinada: o seletor é o valor de s= e o domínio é d=. A ausência desse cabeçalho significa que o serviço usado para o envio não assina. Cada serviço de envio assina com seu próprio seletor, portanto uma newsletter e uma mensagem da sua caixa de e-mail podem usar seletores diferentes.
A chave está correta, mas o DKIM falha com "body hash did not verify". Por quê?
Normalmente, a mensagem foi alterada depois de ser assinada, por exemplo, por um rodapé adicionado por uma lista de e-mails ou por um link reescrito por um gateway de segurança. A chave só pode confirmar o que foi assinado. O teste completo mostra o resultado real da verificação da sua mensagem.
Guia completo: DKIM fail
Tamanho da chave DKIM: 1024 ou 2048 bits?
Uma chave de 1024 bits é validada em todos os lugares, e a RFC 8301 permite esse tamanho. Ainda é o mínimo, portanto passe para 2048 bits na próxima rotação de chaves.
Um domínio pode ter mais de um registro DKIM?
Sim, um por seletor, e muitos domínios têm vários: um para o provedor da caixa de e-mail e um para cada serviço de newsletter ou cobrança. Verifique um de cada vez. Uma chave excluída do DNS causa falha em todas as mensagens que ainda são assinadas com ela.
Com que frequência devo fazer a rotação das chaves DKIM?
A M3AAWG recomenda fazer a rotação pelo menos a cada seis meses e imediatamente se houver possibilidade de vazamento de uma chave privada. Publique a nova chave com um novo seletor, passe a assinar com ela e exclua o registro antigo somente depois que as mensagens assinadas com a chave antiga pararem de chegar. Os remetentes repetem as tentativas por quatro a cinco dias, portanto aguarde cerca de uma semana.