Protocolo de red
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), se utiliza a menudo 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 este tipo de software requiere autenticación a través de conexiones no cifradas, se prefiere CRAM-MD5 a los mecanismos que transmiten contraseñas "sin cifrar", como LOGIN
y PLAIN
. Sin embargo, no puede evitar la derivación de una contraseña a través de 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 es iniciado por el servidor:
- Desafío: El servidor envía una cadena codificada en base64 al cliente. Antes de la codificación, podría ser cualquier cadena aleatoria, pero el estándar que define actualmente 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 el nombre de dominio completo del servidor . - Respuesta: El cliente responde con una cadena creada de la siguiente manera.
- El desafío es decodificar base64.
- El desafío decodificado se codifica mediante 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.
- Luego, 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 proporcionada y la respuesta esperada coinciden, la autenticación se realizó correctamente.
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 permite la autenticación.
- Otros no pueden reproducir el hash, ya que depende del desafío impredecible. Esto se denomina de diversas formas: frescura o prevención de reproducció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 suele realizarse a través de una conexión TLS , que verifica la identidad del servidor.
- Almacenamiento de contraseñas débiles: algunas implementaciones requieren acceso a las contraseñas de texto plano de los usuarios, mientras que otras (por ejemplo, Dovecot ) utilizan el paso intermedio del proceso HMAC para almacenar el hash MD5 de la contraseña (estrictamente hablando de las variables internas de HMAC i_key_pad y o_key_pad). [1] [2] Estas implementaciones aprovechan que para calcular md5(something_with_64_bytes || something_else), solo se necesita saber md5_internal(something_with_64_bytes) y something_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 exitoso del protocolo CRAM-MD5 (por ejemplo, utilizando 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 por un factor de mil o más. Por el contrario, los resúmenes 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 mediante contraseña (PAKE), CRAM-MD5 no establece un secreto compartido entre los dos puntos finales, pero desconocido para un espía. Por lo tanto, un intermediario activo puede abrir una conexión con el servidor, recibir un desafío, ofrecer ese desafío al cliente, recibir la respuesta del cliente y reenviar esa respuesta al servidor. Ahora puede descartar los mensajes adicionales del cliente mientras se hace pasar por el cliente ante el servidor.
Normas
CRAM-MD5 está definido por el documento 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 soportados por Simple Authentication and Security Layer (SASL), definido en 2006 por RFC 4422, que reemplaza al estándar RFC 2222 de 1997.
La Autoridad de Números Asignados en Internet (IANA) mantiene un registro de mecanismos SASL, [3] incluido CRAM-MD5, para uso limitado.
CRAM-MD5 es necesario para la retransmisión de correo a pedido (ODMR), definida en RFC 2645.
Obsoleto
El 20 de noviembre de 2008 se recomendó dejar de utilizar el estándar. Como alternativa, se recomienda, por ejemplo, SCRAM o SASL Plain protegido por TLS . [4]
Véase también
Referencias
- ^ "función verificar_credenciales". Fuente de Dovecot 2.0 . Consultado el 23 de enero de 2014 .
- ^ "archivo hmac-md5.c". Fuente de Dovecot 2.0 . Consultado el 23 de enero de 2014 .
- ^ "Mecanismos de Capa de Seguridad y Autenticación Simple (SASL)". Registros de Protocolo . IANA .
- ^ Zeilenga <[email protected]>, Kurt. "CRAM-MD5 a histórico". tools.ietf.org . Consultado el 5 de diciembre de 2020 .