← RFC Reference

DKIM — DomainKeys Correo Identificado

Internet Standard Email Authentication Published March 2026
ELI5: Piensa en DKIM como un sello de cera de prueba de manipulación en una carta. Antes de enviar, el servidor de correo sella el mensaje con un sello único (una firma criptográfica). Cuando llega, el destinatario puede verificar el sello contra una clave pública publicada en DNS. Si el sello está intacto, el mensaje no ha sido alterado en tránsito y realmente proviene de alguien con acceso a la clave privada de ese dominio.

Por qué existe este RFC

SPF verifica que un mensaje proviene de una dirección IP autorizada, pero no dice nada sobre el contenido del mensaje. Un mensaje podría pasar SPF y luego ser modificado por un relé comprometido. SPF también se rompe cuando el correo se reenvía, porque la IP de envío cambia.

DKIM resuelve ambos problemas. Al adjuntar una firma criptográfica al mensaje mismo, proporciona una aserción de identidad a nivel de dominio que sobrevive al reenvío (la firma viaja con el mensaje) y garantiza la integridad del contenido (cualquier modificación invalida la firma).

RFC 6376, publicado en 2011, es la especificación DKIM actual. Obsoletó RFC 4871 e introdujo mejoras en canonicalización, gestión de claves y semántica de firmas. Sigue siendo el fundamento de la autenticación de correo moderno junto con SPF y DMARC.

Cómo funciona

Firma (lado del remitente)

  1. El servidor de correo de envío (o un agente de firma en la parte anterior) selecciona qué encabezados y cuerpo se firmarán.
  2. Canonicaliza el contenido seleccionado usando algoritmos simple o relaxed para normalizar espacios en blanco y mayúsculas.
  3. Calcula un hash del cuerpo canonicalizado, luego un hash de los encabezados seleccionados más el hash del cuerpo.
  4. Firma el hash del encabezado usando la clave privada del dominio (RSA o Ed25519).
  5. Añade un encabezado DKIM-Signature al mensaje que contiene la firma, el dominio de firma (d=), el selector (s=) y metadatos sobre qué se firmó.

Verificación (lado del receptor)

  1. El receptor extrae los valores d= (dominio) y s= (selector) del encabezado DKIM-Signature.
  2. Consulta DNS por la clave pública en <selector>._domainkey.<domain>.
  3. Re-canonicaliza los encabezados y cuerpo firmados usando el mismo algoritmo especificado en la firma.
  4. Verifica la firma contra la clave pública. Si es válida, el resultado es pass.

Ejemplo de encabezado DKIM-Signature

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

Registro de clave pública DNS

mtg20240101._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEB...truncated..."

Detalles técnicos clave

Canonicalización

El correo puede ser modificado sutilmente en tránsito (espacios en blanco finales eliminados, encabezados re-plegados). La canonicalización normaliza el contenido antes del hash para que los cambios benignos no rompan la firma. Hay dos algoritmos disponibles, especificados por separado para encabezados y cuerpo:

Algoritmo Encabezados Cuerpo
simple Sin cambios excepto espacios en blanco finales en el valor del encabezado Sin cambios excepto líneas vacías finales
relaxed Convierte a minúsculas nombres de encabezados, desdobla líneas, comprime espacios en blanco Comprime espacios en blanco, elimina espacios en blanco finales por línea

La configuración más común es c=relaxed/relaxed, que tolera las modificaciones más comunes en tránsito.

Tipos de clave

RFC 6376 definió firmas RSA. RFC 8463 añadió posteriormente soporte para Ed25519. Las claves RSA deben tener al menos 2048 bits; las claves de 1024 bits se consideran débiles y algunos receptores las rechazan. Las claves Ed25519 son mucho más pequeñas (44 caracteres en DNS) y más rápidas de verificar.

Selectores

El selector (s= tag) permite a un dominio publicar múltiples claves DKIM simultáneamente. Esto es esencial para la rotación de claves: publica una clave nueva bajo un selector nuevo, comienza a firmar con ella, luego elimina el registro DNS del selector anterior después de un período de transición.

La etiqueta l= (límite de longitud del cuerpo)

La etiqueta opcional l= limita cuántos bytes del cuerpo se firman. Fue concebida para permitir que las listas de correo añadan pies de página sin romper firmas. En la práctica, crea una vulnerabilidad de seguridad: un atacante puede añadir contenido malicioso después de la porción firmada. La mayoría de implementaciones conscientes de seguridad evitan usar l=.

Firma de encabezados

La etiqueta h= lista qué encabezados se incluyen en la firma. La mejor práctica es firmar al menos: From, To, Subject, Date, Message-ID, MIME-Version y Content-Type. El encabezado From es requerido por especificación. Firmar un encabezado que no existe previene que sea añadido después de la firma (una medida anti-replay importante).

Errores comunes

Impacto en la entregabilidad

Related RFCs