Como o DKIM encontra a chave
Uma assinatura DKIM numa mensagem indica um domínio (d=) e um seletor (s=). O destinatário combina-os no formato selector._domainkey.domain, lê o registo TXT nesse endereço e utiliza a chave pública da etiqueta p= para verificar a assinatura. Um domínio pode publicar qualquer número de seletores, pelo que cada serviço de envio pode ter a sua própria chave e as chaves podem ser substituídas sem interrupção do serviço.
O verificador precisa do seletor porque o DNS não permite listar os seletores de um domínio. Não há nada que possa ser pesquisado. O seletor vem da assinatura de uma mensagem real.
O que torna uma chave fraca ou inválida
O RFC 8301 indica que as chaves RSA devem ter pelo menos 1024 bits e recomenda 2048 bits. Um verificador pode ignorar uma chave mais curta, e o nosso ignora-a, pelo que uma chave de 512 bits equivale à ausência total de assinatura. As chaves Ed25519 (RFC 8463) são curtas por definição e seguras, mas nem todos os destinatários ainda as verificam. Por isso, normalmente são publicadas juntamente com uma chave RSA, e não em vez dela.
O verificador descodifica a chave por completo, porque um registo mal dividido entre cadeias TXT, ou base64 que não possa ser descodificado, resulta numa chave que nenhum destinatário consegue usar. Um p= vazio significa que a chave foi revogada intencionalmente. t=y identifica um domínio que ainda está em testes, e o RFC 6376 §3.6.1 indica aos verificadores que tratem o respetivo email exatamente como email não assinado.
Perguntas
Como encontro o seletor DKIM e confirmo se o DKIM está ativo?
Envie uma mensagem para si próprio e abra os cabeçalhos da cópia recebida. Um cabeçalho DKIM-Signature significa que a mensagem foi assinada: o seletor é o valor s= e o domínio é d=. Se esse cabeçalho não existir, o serviço usado para o envio não assina as mensagens. Cada serviço de envio assina com o seu próprio seletor, por isso uma newsletter e uma mensagem da sua caixa de correio podem ter seletores diferentes.
A chave está correta, mas o DKIM falha com "body hash did not verify". Porquê?
Normalmente, a mensagem foi alterada depois de ser assinada, por exemplo, porque uma lista de distribuição adicionou um rodapé ou um gateway de segurança reescreveu uma ligação. A chave só pode confirmar aquilo 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 todo o lado e é permitida pelo RFC 8301. Continua a ser o mínimo, por isso passe para 2048 bits na próxima rotação de chaves.
Um domínio pode ter mais do que um registo DKIM?
Sim, um por seletor. Muitos domínios têm vários: um para o fornecedor da caixa de correio e um para cada serviço de newsletters ou faturação. Verifique-os um de cada vez. Uma chave eliminada do DNS faz falhar todas as mensagens que continuem assinadas com ela.
Com que frequência devo rodar as chaves DKIM?
A M3AAWG recomenda a rotação pelo menos de seis em seis meses e imediatamente se existir a possibilidade de fuga de uma chave privada. Publique a nova chave com um novo seletor, passe a assinar com ela e elimine o registo antigo apenas depois de deixarem de chegar mensagens assinadas com a chave antiga. Os remetentes repetem as tentativas durante quatro a cinco dias, por isso aguarde cerca de uma semana.