He leído todo el día sobre el hashing de contraseñas y la autenticación segura y, aunque leo muy a menudo que casi todos los algoritmos propios hacen que los métodos de hashing probados sean menos seguros, solo tengo una idea sobre el hashing de contraseñas, por ejemplo con scrypt, saltando la contraseña y usando un pimiento:
-
Mutar la contraseña original antes el hashing podría mejorar la seguridad si se usa una cadena aleatoria cada vez y usarla para ofuscar la contraseña. El ofuscar con un esquema específico por sí solo no mejoraría la seguridad, pero usar todo el tiempo una nueva cadena aleatoria (que debe ser lo más aleatoria posible) haría imposible que un pirata informático obtuviera la contraseña todo el tiempo ya que él no tiene esa cadena aleatoria.
-
Como necesitaría esa cadena aleatoria para verificar la contraseña que necesita almacenar y leer de alguna manera, lo que, por supuesto, la vuelve vulnerable a los ataques de piratas informáticos. Guardaría estas cadenas aleatorias con el uuid del usuario como clave y cifraría el contenido real con una contraseña utilizando openssl_encrypt (una función php) en un servidor diferente.
-
Ahora el problema sería la contraseña con la que se cifran las contraseñas de ofuscación. Así que se me ocurrió la idea de mostrar al usuario inicialmente después del registro una secuencia aleatoria de palabras del diccionario que no están almacenadas en absoluto y se le pedirá al usuario que las escriba. Como protección adicional, también usaría aquí un pimiento para reforzar la frase de contraseña insegura del diccionario. Ahora el usuario debe responder a cada inicio de sesión con una respuesta de seguridad, que luego se utiliza para descifrar la cadena aleatoria del otro servidor que es necesaria para verificar la contraseña normal. Si pierde esta contraseña de respuesta de seguridad, puede restablecer su contraseña usando su correo electrónico.
-
Al registrarse, solo se pueden ingresar contraseñas seguras y cada contraseña se almacena con hash scrypt, una sal y un pimiento (que se encuentra en un tercer servidor). Antes de picarlo, se confunde. Ahora no usaría un pimiento estático que es vulnerable de nuevo, pero como de todos modos hay un tercer servidor, generaría dinámicamente ese pimiento.
¿Qué crees que agregaría este método más seguridad o incluso sería menos seguro? No se trata absolutamente de utilizarlo en un entorno de producción, sino más bien de mi interés en ese tema en sí y de comprenderlo mejor.