Un article que me topé aquí en enlaces proporcionados SO a other articles que a su vez proporciona enlaces a evenmorearticles etc.¿Cómo almacenar contraseñas * correctamente *?
Y al final me quedé completamente perplejo - ¿y qué es la mejor manera de almacenar contraseñas en la base de datos? De lo que puedo juntar, debe:
- Use una sal larga (al menos 128 bits completamente aleatorios), que se almacena en texto plano junto a la contraseña;
- Usa varias iteraciones de SHA-256 (o incluso un nivel SHA mayor) en la contraseña salada.
Pero ... mientras más leo acerca de la criptografía, más entiendo que realmente no entiendo nada, y que las cosas que había pensado que eran ciertas por años, en realidad están completamente equivocadas. ¿Hay algún experto sobre el tema aquí?
Agregado: Parece que a algunas personas les falta el punto. Repito el último enlace dado arriba. Eso debería aclarar mis preocupaciones.
https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2007/july/enough-with-the-rainbow-tables-what-you-need-to-know-about-secure-password-schemes/
Lo tienes exactamente correcto. No almacene contraseñas: almacene hashes de contraseñas. ¿Cuál es tu verdadera pregunta? ¿Qué parte de la salazón y el hash es confusa? ¿O simplemente no estás contento porque esto es nuevo para ti? ¿Qué consejo contradictorio encontraste? –
es esto para la validación del usuario en su propio programa, o ¿está buscando crear un administrador de contraseñas donde debe devolver la contraseña? – Audioillity
No hay una respuesta "correcta". El nivel de seguridad depende mucho del contexto de la aplicación. Una máquina aislada (no conectada físicamente a una red) puede tener menos hash de contraseñas que una base de datos orientada a la web. Por otra parte, su base de datos nunca debe ser directamente accesible para la red, siempre debe haber una capa de acceso entre el usuario y la base de datos. Y el hash/salazón de contraseñas es inútil si la contraseña se envía a la base de datos/capa de acceso en formato de texto plano. – Skizz