No salado es bastante menor. El problema se convierte en reutilización de credenciales, es decir, alguien que usa la misma contraseña en varias cuentas. Esto se convierte en un problema aún mayor cuando los administradores reutilizan la misma contraseña en una cuenta de administrador de la máquina local en su cuenta de dominio.
Pasar el Hash es un problema común a todos los algoritmos de Respuesta de desafío que requieren un secreto compartido disponible en la misma forma en ambos extremos (en este caso, el hash). Ambos extremos requieren el secreto para responder / verificar desafíos. Windows eligió este enfoque porque permite que la comunicación se produzca en texto plano a través del cable. Hay dos alternativas que conozco:
- autenticación de contraseña tradicional. Es decir. la contraseña se envía al servidor y se verifica con el hash almacenado allí. Sin embargo, necesita una conexión cifrada o arriesgue los ataques de Man in the Middle.
- Verificación de clave pública / privada. El servidor almacena la clave pública de los usuarios y el cliente se prueba con la clave privada. El principal inconveniente aquí es que recordar una clave privada es sustancialmente más difícil para el cliente que recordar una contraseña. Esto se puede evitar derivando la clave privada de una contraseña (usando la contraseña + sal como una semilla para un generador de números aleatorios que se usa para generar la clave privada).