En criptografía , CRAM-MD5 es un mecanismo de autenticación de desafío-respuesta (CRAM) basado en el algoritmo HMAC-MD5 . Como uno de los mecanismos admitidos por la capa de seguridad y autenticación simple (SASL), a menudo se usa en software de correo electrónico como parte de la autenticación SMTP y para la autenticación de usuarios POP e IMAP , así como en aplicaciones que implementan LDAP , XMPP , BEEP. y otros protocolos.
Cuando dicho software requiere autenticación sobre conexiones no cifradas, se prefiere CRAM-MD5 a los mecanismos que transmiten contraseñas "en claro", como LOGIN
y PLAIN
. Sin embargo, no puede evitar la derivación de una contraseña mediante un ataque de fuerza bruta , por lo que es menos eficaz que los mecanismos alternativos que evitan las contraseñas o que utilizan conexiones cifradas con Transport Layer Security (TLS).
Protocolo
El protocolo CRAM-MD5 implica un único ciclo de desafío y respuesta, y lo inicia el servidor:
- Desafío: el servidor envía una cadena codificada en base64 al cliente. Antes de codificar, podría ser cualquier cadena aleatoria, pero el estándar que actualmente define CRAM-MD5 dice que tiene el formato de un
Message-ID
valor de encabezado de correo electrónico (incluidos los corchetes angulares ) e incluye una cadena arbitraria de dígitos aleatorios, una marca de tiempo y la nombre de dominio completo del servidor . - Respuesta: El cliente responde con una cadena creada de la siguiente manera.
- El desafío está decodificado en base64.
- El desafío decodificado se codifica utilizando HMAC-MD5 , con un secreto compartido (normalmente, la contraseña del usuario o un hash de la misma) como clave secreta.
- El desafío hash se convierte en una cadena de dígitos hexadecimales en minúscula.
- El nombre de usuario y un carácter de espacio se anteponen a los dígitos hexadecimales.
- La concatenación se codifica en base64 y se envía al servidor.
- Comparación: el servidor utiliza el mismo método para calcular la respuesta esperada. Si la respuesta dada y la respuesta esperada coinciden, la autenticación fue exitosa.
Fortalezas
El hash unidireccional y el nuevo desafío aleatorio proporcionan tres tipos de seguridad:
- Otros no pueden duplicar el hash sin conocer la contraseña. Esto proporciona autenticación.
- Otros no pueden reproducir el hash, depende del desafío impredecible. A esto se le llama de forma diversa frescura o prevención de repetición .
- Los observadores no aprenden la contraseña; esto se llama secreto.
Debilidades
- Sin autenticación mutua : el cliente no verifica el servidor. Sin embargo, la autenticación SASL generalmente se realiza a través de una conexión TLS , que verifica la identidad del servidor.
- Almacenamiento de contraseña débil: algunas implementaciones requieren acceso a las contraseñas de texto sin formato de los usuarios, mientras que otras (por ejemplo, Dovecot ) utilizan el paso intermedio del proceso HMAC para almacenar el MD5 -hash de la contraseña (estrictamente hablando de las variables internas de HMAC i_key_pad y o_key_pad) . [1] [2] Tales implementaciones aprovechan que para calcular md5 (algo_con_64_bytes || algo_más), solo se necesita saber md5_internal (algo_con_64_bytes) y algo_else (debido al uso de Merkle-Damgård en MD5; md5_internal es md5 sin el bloque final). Como i_key_pad y o_key_pad están al comienzo del hash interno y externo de HMAC, y tienen una longitud de 64 bytes, se puede utilizar este hecho.
- Amenaza de reversibilidad: un ataque de diccionario fuera de línea para recuperar la contraseña es factible después de capturar un intercambio de protocolo CRAM-MD5 exitoso (por ejemplo, usando Cain & Abel ). Esta amenaza es inevitable en cualquier esquema de hash de contraseñas, pero los algoritmos más modernos utilizan el estiramiento de claves para aumentar el costo de un ataque en un factor de mil o más. Por el contrario, los resúmenes de CRAM-MD5 se pueden calcular utilizando muy pocos recursos computacionales en hardware dedicado, o incluso solo CPU estándar .
- Capacidad de proxy: a diferencia de un esquema de acuerdo de clave autenticado por contraseña (PAKE), CRAM-MD5 no establece un secreto compartido entre los dos puntos finales pero desconocido para un fisgón. Por lo tanto, un hombre activo en el medio puede abrir una conexión con el servidor, obtener un desafío, ofrecer ese desafío al cliente, recibir la respuesta del cliente y reenviar esa respuesta al servidor. Ahora puede dejar caer los mensajes adicionales del cliente mientras se hace pasar por el cliente en el servidor.
Estándares
CRAM-MD5 está definido por el documento de seguimiento de estándares IETF RFC 2195, que reemplaza al RFC 2095, de principios de 1997. Estos estándares de facto definen CRAM-MD5 como un método de autenticación para los protocolos de administración de buzones de correo electrónico POP e IMAP .
CRAM-MD5 es uno de los métodos de autenticación admitidos por la Capa de seguridad y autenticación simple (SASL), definida en 2006 por RFC 4422, que reemplaza al estándar RFC 2222 de 1997.
La Autoridad de Números Asignados de Internet (IANA) mantiene un registro de los mecanismos SASL, [3] incluido CRAM-MD5, para uso limitado.
Se requiere CRAM-MD5 para la retransmisión de correo bajo demanda (ODMR), definida en RFC 2645.
Obsoleto
Se recomendó dejar de utilizar el estándar el 20 de noviembre de 2008. Como alternativa, recomienda, por ejemplo, SCRAM o SASL Plain protegido por TLS . [4]
Ver también
Referencias
- ^ "función verify_credentials" . Fuente Dovecot 2.0 . Consultado el 23 de enero de 2014 .
- ^ "archivo hmac-md5.c" . Fuente Dovecot 2.0 . Consultado el 23 de enero de 2014 .
- ^ "Mecanismos simples de autenticación y capa de seguridad (SASL)" . Registros de protocolo . IANA .
- ^ Zeilenga
, Kurt. @isode.com>"CRAM-MD5 a Histórico" . tools.ietf.org . Consultado el 5 de diciembre de 2020 .