← RFC Reference

RFC 8463 : Ed25519 pour les signatures DKIM

Voie de normalisation Authentification par e-mail Published March 2026
ELI5: DKIM utilisait à l'origine des clés RSA — le même type de clés qui protègent la plupart du web. Mais les clés RSA sont volumineuses : une clé publique de 2048 bits occupe plus de 400 caractères dans un enregistrement DNS TXT. Ed25519 est un verrou plus récent et plus élégant qui est tout aussi fort avec une clé qui tient en 44 caractères. Clé plus petite, vérification plus rapide, même confiance — c'est ce que la RFC 8463 apporte à DKIM.

Pourquoi cela existe

DKIM (RFC 6376) spécifiait à l'origine uniquement RSA pour les signatures. RSA a bien servi, mais il a ses coûts :

Ed25519 (Edwards-curve Digital Signature Algorithm utilisant Curve25519) résout les trois problèmes. Ses clés 256 bits offrent une sécurité équivalente à environ 3072 bits RSA, la clé publique est seulement 32 octets (44 caractères Base64), et la vérification est significativement plus rapide.

Comment cela fonctionne

Signature avec Ed25519

Le processus de signature est identique au DKIM standard, avec deux changements : la balise a= utilise ed25519-sha256 au lieu de rsa-sha256, et la clé privée est une clé Ed25519 au lieu de RSA.

  1. Canonicalisez les en-têtes et le corps selon les règles RFC 6376.
  2. Calculez le hash SHA-256 du corps canonicalisé (balise bh=).
  3. Calculez le hash SHA-256 des en-têtes signés plus le hash du corps.
  4. Signez le hash d'en-tête en utilisant la clé privée Ed25519.
  5. Émettez l'en-tête DKIM-Signature avec a=ed25519-sha256.

Exemple : En-tête DKIM-Signature Ed25519

DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=example.com; s=ed202601; h=from:to:subject:date:message-id:mime-version:content-type; bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=; b=Tg2ByC4LSy9F1F6xAQchD8JFh6kYH7aKQjO6Sn7XIkfJVOzv8RBVOzv8QjO6S n7XIkfJV==

Enregistrement de clé publique DNS

L'enregistrement de clé utilise k=ed25519 et la clé publique est dramatiquement plus petite que RSA :

; Clé DKIM Ed25519 — notez comme la valeur p= est compacte ed202601._domainkey.example.com. IN TXT "v=DKIM1; k=ed25519; p=11qYAYKxCrfVS/7TyWQHOg7hcvPapiMlrwIaaPcHURo=" ; Comparez avec clé RSA 2048 bits — beaucoup plus grande rsa202601._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2UMfREvlgajdSp3jv1oI...truncated (392 characters)..."

Double signature : l'approche recommandée

Pas tous les destinataires supportent encore Ed25519. RFC 8463 recommande la double signature : appliquez à la fois une signature RSA et une signature Ed25519 à chaque message. Les destinataires qui comprennent Ed25519 peuvent vérifier la signature plus forte ; ceux qui ne la comprennent pas reviendront à la signature RSA.

; Un message avec deux en-têtes DKIM-Signature : DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=example.com; s=ed202601; h=from:to:subject:date:message-id; bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=; b=Tg2ByC4LSy9F1F6xAQchD8JFh6kYH7aK... DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=rsa202601; h=from:to:subject:date:message-id; bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=; b=LjIEJLNOTAREALh8gAiGVQOr3K7qO6Sn7XIkfJV...

Les deux signatures partagent le même bh= (hash du corps) et h= (en-têtes signés) mais utilisent différents sélecteurs pointant vers différents types de clés dans DNS.

Détails techniques clés

Comparaison de taille de clé

Propriété RSA-2048 Ed25519
Niveau de sécurité (bits) ~112 ~128
Taille clé publique (Base64) ~392 caractères 44 caractères
Taille signature (Base64) ~344 caractères 88 caractères
Vitesse signature Modérée Rapide
Vitesse vérification Rapide Très rapide
Taille enregistrement TXT DNS Très serré, peut nécessiter un découpage S'adapte facilement dans une seule chaîne

Génération de clé

# Générez une paire de clés Ed25519 en utilisant OpenSSL 1.1.1+ openssl genpkey -algorithm Ed25519 -out ed25519_private.pem # Extrayez la clé publique openssl pkey -in ed25519_private.pem -pubout -out ed25519_public.pem # Obtenez la clé publique brute Base64 pour DNS (supprimez les en-têtes PEM) openssl pkey -in ed25519_private.pem -pubout -outform DER | tail -c 32 | base64 11qYAYKxCrfVS/7TyWQHOg7hcvPapiMlrwIaaPcHURo= # Publiez dans DNS en tant que : # ed202601._domainkey.example.com. IN TXT "v=DKIM1; k=ed25519; p=11qYAYKxCrfVS/7TyWQHOg7hcvPapiMlrwIaaPcHURo="

Format d'enregistrement DNS

Le seul changement par rapport à un enregistrement de clé DKIM standard est k=ed25519. Toutes les autres balises (v=, p=, t=, etc.) fonctionnent de la même manière que pour les enregistrements de clé RSA :

; Balises requises v=DKIM1 ; version (toujours DKIM1) k=ed25519 ; type de clé (était "rsa" par défaut) p=<base64> ; clé publique de 44 caractères ; Balises optionnelles (identiques à RSA) t=s ; mode strict : d= doit correspondre exactement au domaine From t=y ; mode test : les destinataires ne doivent pas traiter les défaillances comme définitives

Comportement du destinataire

Quand un destinataire rencontre a=ed25519-sha256 dans un en-tête DKIM-Signature :

  1. Recherchez l'enregistrement de clé DNS pour le sélecteur.
  2. Confirmez k=ed25519 dans l'enregistrement de clé.
  3. Décodez la clé publique de 32 octets à partir de la balise p=.
  4. Vérifiez la signature Ed25519 par rapport au hash SHA-256 des en-têtes canonicalisés.

Si le destinataire ne supporte pas Ed25519, il traite la signature comme non vérifiable (pas une défaillance définitive) et continue avec les autres en-têtes DKIM-Signature du message.

Erreurs courantes

Impact sur la livrabilité

Related RFCs