CRAM-MD5 requiere que el servidor conozca la contraseña real, no solo una imagen de la contraseña mediante una función hash. Entonces, si el servidor tiene que soportar HMAC-MD5, tiene que almacenar la contraseña en texto sin formato. (El servidor puede cifrar la contraseña, pero como también tiene que conocer la clave de cifrado, eso no ayuda).
CRAM-MD5 fue diseñado para evitar que la contraseña pase a texto claro. Da cierta cantidad de protección contra un atacante pasivo. Si el atacante puede escuchar la comunicación pero no inyectar mensajes, todo lo que recibe es un desafío C y el valor HMAC-MD5 (P, C) donde P es la contraseña. No hay un método mejor para encontrar la contraseña de esta información por fuerza bruta. Sin embargo, la fuerza bruta es una preocupación con las contraseñas: al menos una función lenta , y la exposición del hash se debe evitar de todos modos y se debe tratar como un compromiso.
En lugar de una contraseña memorable elegida por el hombre, la "contraseña" (más precisamente un secreto compartido) almacenada en el servidor podría ser un hash lento de la contraseña humana, como anotado por Adnan . Esto evitaría los ataques de fuerza bruta del hash MD5, por lo que proporcionaría una mejor seguridad contra los atacantes pasivos. (Sin embargo, cualquiera que haga esto está usando herramientas no estándar, y es presumiblemente lo suficientemente serio acerca de la seguridad para usar SSL).
CRAM-MD5 solo autentica el paso de autenticación y no el resto de la sesión. Por lo tanto, un atacante activo que puede suplantar al cliente puede permitir que se realice la autenticación, luego cortar el cliente (o enviarle datos modificados) y enviar sus propios comandos en la sesión. Específicamente, el atacante debe poder recibir paquetes TCP destinados al cliente. Alternativamente, el atacante tiene que poder recibir paquetes TCP destinados al servidor, o enviar respuestas DNS falsas que hagan que el cliente hable con el atacante en lugar del servidor; un atacante de este tipo actúa como un relé entre el cliente y el servidor durante la fase de autenticación, y luego puede seguir hablando con el servidor. Ninguno de estos ataques implica un compromiso de la contraseña, por cierto, excepto a través de la fuerza bruta como se indica arriba.
El uso de CRAM-MD5 sobre SSL resolvería este problema de autenticación. SSL proporciona una sesión segura (es decir, los participantes no pueden cambiar durante la sesión) y autentica el servidor para el cliente (asumiendo que el usuario no aceptará ciegamente un certificado no válido). CRAM-MD5 trae la tercera parte del problema de autenticación: autenticar el cliente con el servidor.
CRAM-MD5 sobre SSL está bien si la contraseña es una cadena suficientemente larga generada aleatoriamente, lo suficientemente larga para resistir la fuerza bruta. Si la contraseña es generada aleatoriamente, no hay razón para no almacenarla en texto plano en el servidor, es solo una clave. CRAM-MD5 es malo si la contraseña es una que un humano puede recordar, porque la mayoría de las contraseñas humanas se pueden descifrar mediante fuerza bruta y son valiosas más allá de ese servidor, ya que a menudo se reutilizan.
Si usa SSL, hay poco valor en usar CRAM-MD5 en lugar de que el cliente envíe la contraseña a través de la conexión SSL. Hay una pequeña ventaja en que si el cliente envía la contraseña a un imitador del servidor inadvertidamente, la contraseña en sí no se compromete de inmediato (solo si está descifrada), aunque tenga en cuenta que un imitador del servidor puede enviar un desafío constante y, por lo tanto, construir una tabla (arco iris o otro) de valores HMAC-MD5 sobre contraseñas plausibles). Cuando la contraseña es una cadena aleatoria, esto puede ser una ventaja (el atacante no puede usar el valor enviado por el cliente para hacerse pasar por él a menos que el servidor envíe el mismo desafío que el atacante, lo que no debería ocurrir). Donde la contraseña es humana, no hay tal ventaja (ya que la contraseña puede ser descifrada de todos modos) y tener que almacenar la contraseña en texto plano es una desventaja definitiva.