Date de publication du RFC : Septembre 2011
Auteur(s) du RFC : D. Crocker (Brandenburg InternetWorking), T. Hansen (AT&T Laboratories), M. Kucherawy (Cloudmark)
Chemin des normes
Réalisé dans le cadre du groupe de travail IETF dkim
Première rédaction de cet article le 22 septembre 2011
Le courrier électronique, on le sait,
n'offre, en natif, aucun mécanisme
d'authentification des utilisateurs. Il est
donc assez facile d'envoyer un courrier prétendant venir de
Bill.Gates@microsoft.com
. DKIM, spécifié dans
notre RFC, est la dernière tentative de combler ce manque. (La
première version de DKIM était normalisée dans le RFC 4871. Cette nouvelle version n'apporte pas de changements cruciaux.)
Notons d'abord que, si le courrier électronique, tel que décrit dans les RFC 5321 ou RFC 5322, ou bien leurs prédécesseurs, n'offre pas d'authentification des utilisateurs, ce n'est pas parce que leurs concepteurs étaient imprévoyants ou trop confiants dans la nature humaine. C'est tout simplement parce que le problème est très complexe, ne serait-ce que parce qu'il n'existe pas de fournisseur d'identité unique sur Internet, qui pourrait jouer le rôle que joue l'État avec les papiers d'identité.
Mais l'absence d'authentification devient de plus en plus regrettable, d'autant plus qu'elle est activement exploitée par les spammeurs et les phisheurs pour leurs entreprises malhonnêtes. Non seulement il est difficile de retrouver le véritable envoyeur d'un message, mais une personne tout à fait innocente peut voir son identité usurpée. Ces problèmes de sécurité sont documentés dans le RFC 4686.
De nombreuses tentatives ont eu lieu pour tenter de traiter ce problème. Certaines ont connu un déploiement non négligeable comme PGP (normalisé dans le RFC 4880), surtout connu pour ses services de chiffrement mais qui peut aussi servir à l'authentification.
PGP est surtout utilisé dans des environnements à forte composante technique, au sein de groupes d'experts qui se connaissent. D'autres protocoles ont tenté de traiter le problème de l'authentification de la masse d'utilisateurs de Hotmail ou de Wanadoo.
DKIM aborde
le problème différemment. Comme SPF, il vise surtout à authentifier le
domaine dans l'adresse électronique, en d'autres
termes à garantir que le courrier vient bien de
microsoft.com
, laissant à
Microsoft le soin de dire si la partie gauche
(Bill.Gates
) est authentique ou pas. En deux
mots, DKIM permet à un domaine de proclamer qu'il a une part
de responsabilité dans un message, et donc que ce domaine
peut répondre dudit message. On trouve une introduction générale à
DKIM dans le RFC 5585 et une réfutation de
beaucoup d'erreurs à propos de DKIM en « The truth about:
Trust and DKIM ».
Mais, contrairement à SPF, DKIM ne procède pas par énumération des adresses IP des MTA autorisés à émettre du courrier pour le compte d'un domaine mais par signature cryptographique.
Le principe de DKIM est le suivant (les exemples sont tirés de l'excellente annexe A du RFC). Un message émis ressemble à :
From: Joe SixPack <joe@football.example.com> To: Suzie Q <suzie@shopping.example.net> Subject: Is dinner ready? Date: Fri, 11 Jul 2003 21:00:37 -0700 (PDT) Message-ID: <20030712040037.46341.5F8J@football.example.com> Hi. We lost the game. Are you hungry yet? Joe.
DKIM (qui peut être installé dans le MUA mais sera en général plutôt dans le MTA, cf. section 2.1 et annexe B) le signe et ajoute un en-tête DKIM-Signature (section 3.5 pour sa syntaxe) :
DKIM-Signature: v=1; a=rsa-sha256; s=brisbane; d=example.com; c=simple/simple; q=dns/txt; i=joe@football.example.com; h=Received : From : To : Subject : Date : Message-ID; bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=; b=AuUoFEfDxTDkHlLXSZEpZj79LICEps6eda7W3deTVFOk4yAUoqOB 4nujc7YopdG5dWLSdNg6xNAZpOPr+kHxt1IrE+NahM6L/LbvaHut KVdkLLkpVaVVQPzeRDI009SO2Il5Lu7rDNH6mZckBdrIx0orEtZV 4bmp/YzhwvcubU4=; Received: from client1.football.example.com [192.0.2.1] by submitserver.example.com with SUBMISSION; Fri, 11 Jul 2003 21:01:54 -0700 (PDT) From: Joe SixPack <joe@football.example.com> To: Suzie Q <suzie@shopping.example.net> Subject: Is dinner ready? Date: Fri, 11 Jul 2003 21:00:37 -0700 (PDT) Message-ID: <20030712040037.46341.5F8J@football.example.com> Hi. We lost the game. Are you hungry yet? Joe.
L'en-tête en question spécifie l'algorithme de chiffrement utilisé
(ici SHA-256 et RSA), le domaine signant (ici
example.com
), un sélecteur
(ici brisbane
) qui servira à sélectionner la
bonne clé (section 3.1), les en-têtes effectivement signés (ici Received :
From : To : Subject : Date : Message-ID
, cf. la section 5.4
sur le choix des en-têtes à signer), la signature elle-même et
l'identité de l'émetteur (ici
joe@football.example.com
). (La différence entre
le domaine, identifié par d=
et l'« identité »
indiquée par i=
est subtile.)
L'identité est indiquée dans la signature pour éviter les longs
débats sur l'identité la plus pertinente parmi toutes celles présentes
dans un message (cf. le RFC 4407 pour un des
exemples d'algorithme qui croit naïvement qu'il existe une et une
seule bonne identité). Le signeur n'est donc pas forcément
l'émetteur (section 1.2). Notre RFC note que le
MUA doit en tenir compte et doit afficher
l'adresse qui est authentifiée, pas seulement celle qui se trouve dans
le champ From:
et qui peut être différente.
Le programme qui veut vérifier la signature (en général un
MTA mais cela peut être le
MUA) va devoir récupérer la clé de
signature. DKIM ne souhaitant pas dépendre des lourdes et chères
autorités de certification, la clé est récupérée via le
DNS (section 3.6.2 ; d'autres
méthodes que le DNS sont en cours de normalisation mais ça n'avance pas). Pour le message ci-dessus, la requête DNS
sera brisbane._domainkey.example.com
et un
enregistrement DNS de type TXT contiendra la clé. Pour voir une clé
réelle, vous pouvez taper dig TXT
beta._domainkey.gmail.com.
ou dig TXT
ietf1._domainkey.ietf.org
. DKIM n'impose pas d'utiliser
DNSSEC et la sécurité de la clé ainsi ramassée
peut être faible (cf. section 8.5 : DKIM ne prétend pas être aussi
fort que PGP).
Un des problèmes difficiles en cryptographie est que les messages
sont souvent modifiés en cours de route. Par exemple, un logiciel
imposé par le direction de l'entreprise va ajouter automatiquement un
stupide message pseudo-légal comme « Ce message e-mail et les pièces
jointes sont transmis à l'intention exclusive de ses destinataires et
sont confidentiels et/ou soumis au secret professionnel. Si vous
recevez ce message par erreur, merci de le détruire et d'en avertir
immédiatement l'expéditeur par téléphone ou par mail. Toute
utilisation de ce message non conforme à sa destination, toute
diffusion ou toute publication, totale ou partielle, est interdite,
sauf autorisation. L'intégrité de ce message n'étant pas assurée sur
Internet, nous ne pouvons être tenu responsables de son contenu. »
(notons que le dernier point devient faux avec DKIM). Ou
bien une liste de diffusion va mettre des
instructions de désabonnement (pour ces listes, voir aussi le RFC 6377). DKIM traite ces problèmes avec deux
méthodes : une canonicalisation (section 3.4 du RFC) du message (plusieurs algorithmes sont
disponibles, plus ou moins violents) pour limiter les risques qu'une modification triviale ne
fausse le calcul de la signature et l'option l=
qui permet d'indiquer sur quelle distance le message est signé. Si on
indique l=1000, seuls les mille premiers octets seront signés et une
liste pourra ajouter un message automatiquement à la fin, cela
n'invalidera pas la signature. (Cette technique est déconseillée, voir
la section 8.2.)
Malheureusement, DKIM encourage également (section 5.3) à remplacer les caractères codés sur 8 bits (comme l'UTF-8 ou le Latin-1) par des horreurs comme le Quoted-Printable, pour limiter les risques qu'une conversion automatique en Quoted-Printable, comme le font certains MTA, n'invalide la signature. Des années d'efforts pour faire passer les caractères 8-bits dans le courrier sont ainsi négligées.
DKIM a nécessité la création de plusieurs registres à l'IANA (section 7) comme le registre des méthodes pour récupérer la clé (aujourd'hui, seulement le DNS).
Parmi les limites de DKIM (qui sont celles de beaucoup de solutions de sécurité, un domaine complexe où il faut faire beaucoup de compromis), il faut aussi se rappeler qu'un attaquant actif peut tout simplement retirer complètement une signature. Tant que les domaines ne publient pas leur politique de sécurité (en suivant le RFC 5617) et donc annoncent « Nous signons toujours », cette attaque passera inaperçue.
Quels sont les changements depuis la première version de DKIM,
normalisée dans le RFC 4871 ? L'annexe E les
résume. Premier point, les changements sont mineurs : comme le note
l'annexe C.2, les anciennes et nouvelles implémentations de DKIM
peuvent communiquer sans problèmes. Mais la sortie de ce nouveau RFC
ne s'est pas faite sans mal. Il y avait des désaccords sérieux sur
l'avis à donner en terme de quels en-têtes devraient être signés, sur
le lien entre le domaine signant et les autres domaines de l'en-tête
(typiquement celui dans le from:
), la façon de
traiter les attaques par ajout d'en-têtes (non couverts par la
signature originale), etc. Beaucoup d'erreurs ont été
détectées dans le RFC 4871 et corrigées ici, la
plus grosse étant celle qui avait fait l'objet d'une mise à jour
d'urgence dans le RFC 5672, désormais
inutile. D'autre part, le nouveau RFC comporte davantage de texte
d'introduction et d'architecture. Enfin, l'option de signature
g=
(qui contrôlait la granularité de la clé) a été abandonnée.
Il y a aussi une différence
complète entre les deux RFC, en ligne.
Aujourd'hui, tous les messages sortant de Gmail sont signés avec DKIM et des implémentations de DKIM existent pour plusieurs logiciels (comme le DKIM milter de sendmail). Le rapport d'implémentation du RFC 4871 en donne une bonne liste. Mais peu de domaines signent et encore moins de domaines vérifient les signatures aujourd'hui (le RFC 5863 discute les questions de déploiement).
Enfin, notons que
DKIM est une technologie d'authentification,
pas d'autorisation. Cette distinction est cruciale. DKIM peut prouver
que le message vient bien de
Nicolas.Sarkozy@elysee.fr
(plus exactement, DKIM
peut dire que le message a bien été approuvé par elysee.fr
), il ne peut pas dire si
la personne en question est digne de confiance ou si elle va
réellement se préoccuper de « la France qui se lève tôt ».
Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)
Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)