Le champ d'entête de la signature DKIM est un entête spécial placé dans chaque email, qui contient des informations concernant l'expéditeur, le message et l'emplacement de la clé publique nécessaires à la vérification. Ce champ d'entête est exigé par tous les opérateurs de messagerie qui utilisent la méthode DKIM pour vérifier votre identité, notamment AOL, Gmail, Outlook.com et Yahoo!.
Voici un exemple d'entête d'une signature DKIM :
DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=news;
c=relaxed/relaxed; q=dns/txt; t=1126524832; x=1149015927;
h=from:to:subject:date:keywords:keywords;
bh=MHIzKDU2Nzf3MDEyNzR1Njc5OTAyMjM0MUY3ODlqBLP=;
b=hyjCnOfAKDdLZdKIc9G1q7LoDWlEniSbzc+yuU2zGrtruF00ldcF
VoG4WTHNiYwG
L'entête de la signature DKIM est constitué de différents éléments d'information représentés par l'utilisation de paires tag=value. La balise (tag) est généralement une simple lettre suivie du symbole égal (=). La valeur (value) de chaque balise indique un élément d'information spécifique concernant l'expéditeur, le message et l'emplacement de la clé publique.
L'expéditeur a de nombreuses balises à sa disposition ; certaines sont obligatoires, d'autres facultatives. S'il manque une balise obligatoire dans la signature DKIM, une erreur de vérification se produit au niveau de l'opérateur de messagerie, tandis qu'une balise facultative manquante ne cause pas d'erreur.
Il est important de noter que les balises qui sont incluses dans la signature DKIM et qui n'ont pas de valeur associée sont traitées comme ayant une valeur vide. Toutefois, les balises qui ne sont pas incluses dans la signature DKIM sont traitées comme ayant une valeur par défaut.
Balises obligatoires
Vous trouverez ci-dessous les balises obligatoires d'un entête de signature DKIM. Les signatures DKIM auxquelles il manque ces balises rencontreront une erreur lors du processus de vérification.
- v= indique la version du protocole de la signature. Il est conseillé de toujours fixer la valeur sur 1.
- a= indique l'algorithme utilisé pour générer la signature. La valeur doit être rsa-sha256. Les expéditeurs ayant des capacités de CPU réduites peuvent utiliser rsa-sha1, mais nous déconseillons cette valeur en raison des risques potentiels liés à la sécurité.
- s= indique le nom d'enregistrement du sélecteur utilisé avec le domaine pour localiser la clé publique dans le DNS. La valeur est un nombre ou un chiffre créé par l'expéditeur.
- Voici un exemple d'enregistrement de sélecteur DNS. Les balises affichées dans cet exemple apparaissent uniquement dans cet enregistrement au sein du DNS et non dans l'entête de l'email en lui-même : <selector(s=)._domainkey.domain(d=)>. TXT v=DKIM1; k=rsa; p=<public key>
- b= représente les données de hachage des entêtes répertoriés dans la balise h= ; ce hachage est également appelé la signature DKIM et est encodé en Base64.
- bh= est le hachage calculé du corps du message. La valeur est une chaîne de caractères représentant le hachage déterminé par l'algorithme de hachage.
- d= indique le domaine utilisé avec l'enregistrement du sélecteur (s=) pour localiser la clé publique. La valeur est un nom de domaine appartenant à l'expéditeur.
- h= est une liste d'entêtes qui sera utilisée dans l'algorithme de signature pour créer le hachage trouvé dans la balise b=. L'ordre des entêtes dans la balise h= correspond à l'ordre de leur présentation lors du processus de signature DKIM, c'est donc également l'ordre dans lequel ils devraient être présentés lors de la vérification. La valeur est une liste de champs d'entêtes qui ne sera ni modifiée ni supprimée.
Balises facultatives et recommandées
Vous trouverez ci-dessous les balises facultatives que nous vous recommandons d'inclure dans un entête de signature DKIM. Les signatures DKIM auxquelles il manque ces balises ne rencontreront pas d'erreur lors de la vérification, mais elles sont recommandées car elles sont un moyen d'identification du courrier indésirable.
Les spammeurs ne définissent généralement pas de valeurs temporelles. Les valeurs temporelles vides ou incorrectes, telles qu'une heure d'expiration datée avant l'horodatage de l'email, entraîneront le rejet du message par certains opérateurs de messagerie.
- t= est l'horodatage de la signature DKIM. Cette balise est censée indiquer le moment d'envoi du message. Le format est le nombre de secondes à partir de 00:00:00 le 1er janvier 1970 dans le fuseau horaire UTC.
- x= est le moment d'expiration de la signature DKIM dans le même format que ci-dessus. La valeur de cette balise doit être plus élevée que celle de la balise d'horodatage si les deux sont utilisées dans la signature DKIM. Les signatures DKIM peuvent être considérées comme non valides si le moment auquel la vérification est effectuée dépasse la date d'expiration, alors veillez à ne pas définir la date d'expiration trop tôt.
Réalisez un test pour veiller à ce que ces balises fonctionnent correctement et que le délai d'expiration ne soit pas défini trop tôt après le déploiement.
Balises facultatives
Vous trouverez ci-dessous les balises facultatives dans la signature DKIM.
- c= représente l'algorithme de canonisation qui informe l'opérateur de messagerie du niveau de modifications pouvant être présent lorsque le message est en transit vers l'opérateur de messagerie. Les modifications peuvent inclure une espace ou un retour à la ligne. Certains serveurs de messagerie effectuent des modifications mineures dans le message lors du transit qui peuvent rendre la signature non valide.
- Voici la valeur qui définit le niveau de tolérance que le serveur de destination devrait avoir lorsqu'un message contient ces modifications mineures : value1/value2.
Value1 représente l'entête du message et value2, le corps du message. Value1 et value2 peuvent être libellés comme « simple », qui tolère peu de modifications, voire aucune, ou « relaxed » qui tolère des modifications courantes.
- i= indique l'identité de l'utilisateur ou de l'agent. La valeur est une adresse email contenant le domaine ou le sous-domaine tel que défini dans la balise d=.
Balises facultatives et non recommandées
- l= est le nombre de caractères dans le corps du message qui a été utilisé pour calculer le hachage du corps (bh=). Si cette valeur n'est pas présente, on suppose que tout le corps du message a été utilisé. Nous ne recommandons pas l'utilisation de cette balise, car elle peut s'avérer difficile à contrôler et peut causer des erreurs de vérification.
- z= est une liste des entêtes originaux du message et peut être différente des entêtes répertoriés dans la balise h=. Cette balise peut être utilisée par certains opérateurs de messagerie dans le processus visant à diagnostiquer une erreur de vérification. Sa valeur n'est pas bien définie.
Balises non reconnues
Les balises non spécifiés dans le RFC 6376 ne font pas partie du protocole DKIM et doivent être ignorées pendant le processus de vérification. Tous les opérateurs de messagerie n'ignorent pas les balises non reconnues, il est donc possible que vous voyiez une erreur lors du processus de vérification.
Vous pouvez trouver toutes les informations concernant la signature DKIM sur le site Web DKIM ou sur la RFC 6376.