✉ Email deliverability

DKIM: selettori, lunghezza delle chiavi e rotazione senza fermi

Come funzionano i selettori DKIM, quale lunghezza di chiave scegliere, come pubblicare il record DNS e come ruotare le chiavi senza perdere messaggi.

DKIM è il meccanismo che permette a un dominio di firmare crittograficamente i messaggi che invia. Chi riceve recupera la chiave pubblica dal DNS e verifica che intestazioni e corpo non siano stati alterati in transito. È anche il pilastro più robusto di DMARC, perché a differenza di SPF sopravvive quasi sempre agli inoltri. Configurarlo una volta non basta: va gestito nel tempo, e il concetto che rende possibile questa gestione è il selettore.

Che cos'è un selettore

Ogni firma DKIM contiene nell'intestazione DKIM-Signature due campi decisivi: d=, il dominio che firma, e s=, il selettore. Il destinatario combina i due valori e interroga il DNS a questo indirizzo:

selettore._domainkey.example.com

Il selettore è quindi un'etichetta libera che consente di avere più chiavi attive contemporaneamente sullo stesso dominio. Ogni servizio che invia per conto tuo può avere il proprio selettore: uno per il server di posta aziendale, uno per la piattaforma newsletter, uno per l'applicazione che spedisce le ricevute.

Un esempio di intestazione semplificata:

DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=mail2026a;
  c=relaxed/relaxed; h=from:to:subject:date:message-id;
  bh=...; b=...

E il record DNS corrispondente:

mail2026a._domainkey.example.com.  TXT  "v=DKIM1; k=rsa; p=MIIBIjANBgkqh..."

Scegliere il nome del selettore

Il nome non ha significato tecnico, ma un buon schema semplifica la vita. Alcuni criteri pratici:

  • includere il servizio o la funzione (crm, news, app);
  • includere un riferimento temporale o un progressivo (2026a, s2), utile per la rotazione;
  • evitare nomi che rivelano dettagli interni non necessari.

Molti fornitori impongono il proprio selettore e chiedono di pubblicare un record CNAME che punta al loro DNS. È una buona soluzione: la rotazione la gestiscono loro e il tuo record non va toccato.

Quale lunghezza di chiave

Per RSA, 2048 bit è oggi la scelta di riferimento. Le chiavi da 1024 bit sono ancora accettate da molti destinatari, ma sono considerate deboli e vanno sostituite. Chiavi più lunghe di 2048 bit offrono un margine aggiuntivo, ma producono record più ingombranti e non tutti i pannelli DNS li gestiscono bene.

Un record a 2048 bit supera i 255 caratteri di una singola stringa TXT. Il DNS lo consente dividendo il valore in più stringhe tra virgolette, che vengono concatenate in lettura:

s1._domainkey.example.com. TXT ( "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA"
                                 "u7Jx...resto-della-chiave...IDAQAB" )

Esiste anche l'algoritmo Ed25519 per DKIM, con chiavi molto più corte. Il supporto tra i destinatari però non è universale, quindi chi lo adotta di solito firma due volte: una con RSA e una con Ed25519.

I parametri della firma che contano

Canonicalizzazione

Il campo c= indica quanto la verifica deve essere tollerante verso piccole modifiche. Con relaxed/relaxed spazi aggiuntivi e maiuscole nei nomi delle intestazioni non invalidano la firma; con simple qualunque modifica la rompe. Per la posta reale relaxed/relaxed è quasi sempre la scelta giusta.

Intestazioni firmate

Il campo h= elenca le intestazioni coperte dalla firma. From è obbligatoria; è buona pratica includere anche Subject, Date, To, Message-ID e, per le newsletter, List-Unsubscribe e List-Unsubscribe-Post. Una tecnica utile è elencare From due volte: così un'eventuale seconda intestazione From aggiunta da un intermediario invalida la firma invece di passare inosservata.

Il campo l=

Il tag l= limita la firma a una parte del corpo. Va evitato: permette a terzi di aggiungere contenuto in coda al messaggio mantenendo valida la firma.

Ruotare le chiavi senza perdere messaggi

Una chiave privata usata per anni ha più probabilità di essere esposta, magari in un backup dimenticato o in una configurazione copiata. La rotazione periodica, per esempio ogni sei o dodici mesi, limita il danno. Grazie ai selettori si può fare senza interruzioni:

  1. Generare la nuova coppia di chiavi e pubblicare il record con un nuovo selettore, per esempio mail2026b.
  2. Attendere che il record sia visibile ovunque, tenendo conto del TTL.
  3. Configurare il server perché firmi con il nuovo selettore.
  4. Lasciare pubblicato il vecchio record per alcuni giorni: i messaggi già in coda o in transito devono ancora essere verificabili.
  5. Rimuovere il vecchio record, oppure pubblicarlo con p= vuoto, che segnala esplicitamente una chiave revocata.

Verificare che tutto funzioni

Il controllo più affidabile è inviare un messaggio a una casella che controlli e leggere l'intestazione Authentication-Results aggiunta dal destinatario. Deve comparire dkim=pass con header.d= uguale al tuo dominio, o a un suo sottodominio, se vuoi che la firma conti per DMARC. Una firma valida ma con d= del fornitore passa DKIM, ma non è allineata.

In sintesi

  • Il selettore consente di avere più chiavi DKIM attive sullo stesso dominio, una per servizio.
  • Le chiavi RSA da 2048 bit sono lo standard attuale; quelle da 1024 vanno sostituite.
  • Conviene firmare From, Subject, Date, Message-ID e le intestazioni di disiscrizione, ed evitare il tag l=.
  • La rotazione si fa pubblicando un nuovo selettore e ritirando il vecchio solo dopo qualche giorno.
  • Per DMARC conta che d= sia allineato al dominio del From, non solo che la firma sia valida.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica, unisce il rigore dell'analisi tecnica all'attenzione per le persone che usano la tecnologia.

Leggi anche