Desarrollo una aplicación para teléfonos inteligentes y tengo una pequeña pregunta:
¿Cuándo debo cifrar las contraseñas de usuario, en el dispositivo o cargarlas en texto sin formato y en el servidor antes de almacenarlas en la base de datos?
Además de la excelente respuesta dada por Thomas Pornin en la pregunta vinculada , Agregaría que, por razones de seguridad, en su caso, es probable que desee realizar algunos hash en el lado del cliente y otros en el servidor. El razonamiento es así:
Ventajas del hashing del lado del servidor:
Digamos que solo haces hashing del lado del cliente, luego tomas la cadena que obtienes del usuario (la contraseña hash) y la guardas directamente en la base de datos. La próxima vez que inicien sesión, está comparando directamente la cadena que le enviaron con la de la base de datos, esto es básicamente equivalente a almacenar la contraseña en texto plano. Si alguien roba su base de datos, ni siquiera necesitará una tabla de arco iris, solo pueden usar esos hashes directamente como contraseñas de inicio de sesión (asumiendo que escriben un cliente malicioso que solo envía una cadena en bruto). Por lo tanto, el hash fuerte del lado del servidor protege a los usuarios de los robos de bases de datos.
Ventajas del hashing del lado del cliente
Además del aumento de rendimiento que se obtiene con esto, también hay un bono de seguridad: el servidor nunca ve la contraseña de texto sin formato. Suponiendo que los usuarios usarán la misma contraseña para muchos sitios (lo que la mayoría de los usuarios hacen), incluso si su db es robada, las cuentas de los usuarios en otros sitios no se ponen en peligro.
Así que mi consejo es hacer ambas cosas; haga una pequeña cantidad de hash del lado del cliente, y luego su lado del servidor de hash completo.
Definitivamente me gustaría hash antes de la carga. Si un dispositivo de usuario está conectado a una red con alguien que está olfateando paquetes, es fácil leer una contraseña de texto sin formato que se está cargando. No es muy seguro.
Lea otras preguntas en las etiquetas password-management hash databases