DKIM

Avec le mécanisme de DKIM (DomainKeys Identified Mail), des informations supplémentaires sont ajoutées au mail lors de son émission. Pour simplifier, le serveur émetteur signe numériquement le document. Le destinataire vérifie la signature ce qui permet de garantir que l'émetteur est bien celui indiqué et que le contenu du mail n'a pas été altéré.

Si on reprend le mail du 1.1, on constate que le test DKIM est OK. La valeur de l'attribut du DKIM du mail est la suivante :

DKIM-Signature:
v=1;
a=rsa-sha256;
q=dns/txt;
c=relaxed/simple;
s=uku4taia5b5tsbglxyj6zym32efj7xqv;
d=amazonses.com;
t=1623749475;
h=Sender:Message-ID:Date:Subject:From:Reply-to:To:MIME-Version:Content-Type:Content-Transfer-Encoding:Feedback-ID;
bh=r24qcIrTZ1iHiC9T08vpu1Ef8PdMhku9MIWwS2pqAYI=;
b=F6tVhMmMRisAqBxUyI0Q7OFFUj+PdDlCIlJ0ULfz5Y/t4ABoBpVVM5KFU7eAI11E cxWCJT22Q0uKz7k35nePAQiBDDPoo74z7KQLOJdmxV1U9txuavpnyTS7C9QgM0iMGIB peHVnxaaRRMTOfjS6XQsiULy96hY+3fCQ678CbhY=

L'attribut DKIM est une concaténation de paires clé=valeur avec :

  • v pour la version ;
  • a pour l'algorithme de signature ;
  • q pour une liste de méthodes de requêtes utilisées afin de récupérer la clé publique de signature ;
  • c pour l'algorithme de représentation de l'en-tête et du corps ;
  • s pour le sélecteur.
  • d pour l'identifiant de domaine responsable de la signature (SDID) ;
  • t pour l'horodatage de la signature ;
  • h pour la liste des champs d'en-tête signés, éventuellement répétés pour ceux qui apparaissent plusieurs fois (ex keywords ci-dessus). Il est à noter que le champ d'en-tête de la signature DKIM est lui-même toujours inclus implicitement dans h, avec la valeur du champ b, traité comme s'il était vide.
  • bh pour le hachage du corps ;
  • b signatures numériques des contenus (en-têtes et corps de mail) ;

Les attributs soulignés sont ceux qui vont le plus nous intéresser ici, vous pouvez ignorer les autres pour le moment. D'autres attributs existent dans la norme mais n'apparaissent pas ici.

Le serveur du destinataire de mail va interroger le DNS du domaine "amazonses.com" (attribut d) avec le sélecteur uku4taia5b5tsbglxyj6zym32efj7xqv (attribut s sans le ";" final). La réponse obtenue contient les informations suivantes :

La réponse permet d'obtenir une clé publique (les 3 coches vertes indiquent que non seulement l'enregistrement DNS contient un DKIM mais que celui-ci est valide et contient bien une clé).

A partir de cette clé publique, le destinataire va classiquement recalculer l'empreinte (ie le hash, en utilisant l'algo défini par l'attribut a) du mail et le comparer à la valeur obtenue en déchiffrant la la valeur de (attribut b) avec la clé publique. C'est le schéma classique d'une vérification de signature :

Si les 2 empreintes sont identiques, on a la preuve que le mail a été signé par le domaine indiqué et n'a pas été altéré entre son émission et sa réception.

Comme souvent, tout n'est pas si simple car si des intermédiaires légitimes ont modifié le contenu du mail (par exemple des logiciels antivirus, ou de gestion de mailings lists) le test échouera, le contenu du message ayant été modifié.