Para autorizar al usuario, estoy enviando hash salado por el aire. Mi pregunta es más segura obtener sal generada aleatoriamente (pero enviar sin cifrar) o tener una sal en el cliente (aplicación de escritorio) y el servidor.
Por seguridad, ninguno es seguro. El envío de un hash desde el cliente al servidor de autenticación no hace nada para protegerse contra el rastreo de la contraseña porque el hash actúa como la contraseña. Lo único que hace un hash es mitigar los ataques de reutilización de contraseñas (por ejemplo, evitar que un atacante use la misma contraseña en el sitio A para el sitio B).
También ten en cuenta que eliminar una contraseña mitiga los ataques a la tabla del arco iris y nada más. La sal no se considera información privada, por lo que cifrar la sal es una operación inútil que no hace nada para aumentar la seguridad del proceso de autenticación.
Sin usar el cifrado, o tener una línea dedicada, no puede enviar tokens de autenticación en la seguridad clara y de mantenimiento. Active SSL para crear un entorno infinitamente más seguro.
Este no es un buen método para autenticar al usuario. Si desea usar contraseñas para autenticar al usuario, primero debe establecer una conexión segura entre el cliente y el servidor, utilizando SSL o TLS. (Asegúrese de que el cliente esté verificando la identidad del servidor, usando el certificado del servidor). Por ejemplo, puede usar HTTPS . Luego, transmita la contraseña del cliente al servidor a través de este canal seguro. El servidor puede verificar si la contraseña es válida.
Para almacenar la contraseña, el servidor debe usar bcrypt, scrypt o PBKDF2 para hash la contraseña antes de almacenarla . Incluir una sal al azar. Elija el número de iteraciones para que la operación de hashing de contraseñas tome un tiempo fijo: por ejemplo, 10 ms o 100 ms. Esto garantiza que la búsqueda de contraseña de prueba y error llevará más tiempo.
Cuando el usuario selecciona inicialmente su contraseña, puede considerar la posibilidad de incluir un medidor de seguridad de contraseña, para alentarlo a elegir una contraseña segura. También puede proporcionar un pequeño widget que genere automáticamente una contraseña segura y aleatoria para ellos y sugiera que lo usen. Incluya un botón (tal vez etiquetado como "¡Úselo!") Para copiarlo en el campo de la contraseña, para facilitar al usuario la adopción de la contraseña sugerida que generó para ellos.
Además, podría considerar incluir algún límite de velocidad para hacer que sea más difícil encontrar las contraseñas de las personas al probarlas. Consulte aquí y aquí y aquí para la discusión de este tema.
Lea otras preguntas en las etiquetas authentication hash