Firma DKIM
Una firma DKIM es una firma criptográfica añadida a las cabeceras de un correo (la cabecera DKIM-Signature) que permite a los receptores verificar que el mensaje fue autorizado por el dominio emisor y no fue alterado en tránsito. Las etiquetas clave incluyen d (dominio), s (selector), b (firma) y bh (hash del cuerpo).
Esta guía forma parte de nuestra guía completa de DKIM. Relacionado: el registro DKIM y por qué falla DKIM.
Una firma DKIM es una firma criptográfica añadida a las cabeceras de un correo —transportada en la cabecera DKIM-Signature— que permite a un servidor receptor verificar que el mensaje fue autorizado por el dominio emisor y no ha sido alterado en tránsito. La firma se genera con una clave privada que posee el remitente y se comprueba contra una clave pública coincidente publicada en el DNS.
Cómo se ve la cabecera DKIM-Signature
La firma viaja como un único campo de cabecera antepuesto al mensaje. Empaqueta todo lo que un receptor necesita —el dominio firmante, el selector, qué cabeceras se firmaron, un hash del cuerpo y la propia firma— en una serie de pares tag=value separados por punto y coma.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=example.com; s=selector1; t=1700000000;
h=from:to:subject:date;
bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
b=Cg5Xje8kY0m5xT1pW2qL4vN8rH6dF3aZ9cU7bE0iQoR2sT4uV6wX8yZ1
aB3cD5eF7gH9jK2lM4nP6qR8sT0uV2wX4yZ6aB8cD0eF2gH4jK6l=
La cabecera es insertada por el servidor de correo del remitente antes de que el mensaje salga del dominio. Los saltos de línea y la sangría son solo para el plegado — el valor es lógicamente una única cadena continua.
Las etiquetas de una firma DKIM
Cada etiqueta lleva una pieza del rompecabezas de verificación. El firmante elige estos valores; el verificador los vuelve a leer para reconstruir y comprobar la firma.
| Etiqueta | Nombre | Propósito |
|---|---|---|
v | Versión | Versión de DKIM. Siempre 1. |
a | Algoritmo | Algoritmo de hash y firma, p. ej. rsa-sha256 o ed25519-sha256. |
d | Dominio | El dominio firmante — la identidad que DKIM autentica. |
s | Selector | Indica qué clave pública obtener del DNS del dominio. |
h | Cabeceras firmadas | Lista separada por dos puntos de los campos de cabecera cubiertos por la firma. |
bh | Hash del cuerpo | Hash del cuerpo del mensaje (canonicalizado). |
b | Firma | La firma criptográfica real, codificada en base64. |
c | Canonicalización | Cómo se normalizan las cabeceras/el cuerpo antes del hash, p. ej. relaxed/relaxed. |
t / x | Marcas de tiempo | t es cuándo se firmó el mensaje; x es cuándo caduca la firma. |
Cómo funciona la firma (al enviar)
Cuando un mensaje sale del servidor emisor, DKIM hace dos cosas. Primero canonicaliza el cuerpo y lo hashea, almacenando el resultado en bh. Luego canonicaliza las cabeceras nombradas en h —junto con la propia cabecera DKIM-Signature (con un b vacío)—, hashea ese bloque y firma el hash con la clave privada del dominio. La firma resultante se convierte en el valor b. Como la clave privada nunca sale del remitente, solo el verdadero propietario del dominio puede producir una firma que vaya a validar.
Cómo funciona la verificación (al recibir)
El servidor receptor lee la cabecera DKIM-Signature para averiguar el dominio (d) y el selector. Consulta el DNS en <selector>._domainkey.<domain> para obtener la clave pública del registro DKIM. Luego repite el trabajo del remitente: canonicaliza y hashea el cuerpo, lo compara contra bh, canonicaliza y hashea las cabeceras firmadas, y usa la clave pública para comprobar b contra ese hash de cabeceras. Si tanto el hash del cuerpo coincide como la firma verifica, DKIM pasa. La comprobación de bh es lo que detecta cualquier manipulación del cuerpo del mensaje — incluso un solo carácter cambiado produce un hash distinto y falla la comprobación.
Cuándo fallan las firmas
Una firma DKIM falla siempre que el mensaje que el receptor ve ya no coincide con lo que el remitente firmó. Las causas más comunes son:
- Modificación en tránsito — las listas de correo, los reenviadores y algunas puertas de enlace reescriben asuntos, añaden pies de página o recodifican el cuerpo, lo que rompe el hash del cuerpo.
- Discrepancia del hash del cuerpo — cualquier cambio en la parte firmada del cuerpo cambia
bh, así que la verificación falla aunque la clave sea correcta. - Clave errónea o ausente — el selector apunta a un registro DNS que está ausente, caducado o contiene la clave pública equivocada.
Para un desglose más completo de las causas y soluciones, consulta por qué falla DKIM, y usa la herramienta gratuita de consulta DKIM para confirmar que la clave pública de un selector está publicada y bien formada.
Preguntas frecuentes
¿Qué es una firma DKIM?
Una firma DKIM es una firma criptográfica añadida a las cabeceras de un correo en el campo DKIM-Signature. El remitente la genera con una clave privada sobre cabeceras seleccionadas y un hash del cuerpo. Los receptores la verifican contra una clave pública en el DNS, demostrando que el mensaje provino del dominio y no fue alterado.
¿Qué significa la etiqueta b= en una firma DKIM?
La etiqueta b= contiene la firma real: un valor codificado en base64 producido al firmar un hash de las cabeceras firmadas canonicalizadas con la clave privada del dominio emisor. El receptor lo decodifica y lo verifica contra la clave pública obtenida del DNS. Si las cabeceras firmadas cambiaron en tránsito, la comprobación de b= falla.
¿Por qué falla una firma DKIM tras el reenvío?
Los reenviadores y las listas de correo a menudo modifican el mensaje — añadiendo pies de página, reescribiendo el asunto o recodificando el cuerpo. Como DKIM firma el cuerpo exacto y las cabeceras seleccionadas, cualquier cambio de ese tipo altera el hash calculado de modo que ya no coincide con el bh firmado ni con el hash de cabeceras. La firma entonces falla la verificación aunque la original fuera válida.
¿Qué es el hash del cuerpo (bh) en DKIM?
La etiqueta bh= es un hash del cuerpo del mensaje tras la canonicalización, calculado con el algoritmo nombrado en a. Al recibir, el verificador recalcula el hash del cuerpo y lo compara con bh. Una discrepancia significa que el cuerpo fue alterado en tránsito, así que la firma se rechaza antes incluso de comprobar la firma criptográfica en b=.