¿Es una buena idea usar ofuscación dinámica y pimientos para el hash de contraseñas?

1

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

    
pregunta hardking 08.06.2016 - 02:21
fuente

1 respuesta

1

Lo que estás describiendo es esencialmente un salt adicional cifrado con una clave derivada de una contraseña adicional que consiste en palabras del diccionario que no son seleccionadas por el usuario.

Sé que esto aparecerá como una crítica bastante vaga y general, pero veo tres inconvenientes con esto:

  • Estás rodando el tuyo. Inventar sus propios sistemas para resolver problemas con soluciones establecidas rara vez mejora la seguridad. Al final, es más probable que cometa un error en la implementación y se exponga a sí mismo de lo que está para mejorar su seguridad. (Dicho esto, especular sobre nuevos sistemas puede ser una experiencia de aprendizaje útil).
  • La complejidad es tu enemigo. Esto introduce mucha complejidad, pero no está claro qué problemas pretende resolver la complejidad adicional.
  • La usabilidad es tu amiga. ¿Quién quiere que una de sus contraseñas memorice otra contraseña que ni siquiera tiene permitido elegir usted mismo? Como usuario, quisiera tener algunos beneficios de seguridad sustanciales para aceptarlo.

Compare esto con algunas otras prácticas comunes para aumentar la seguridad de las contraseñas, y pregunte a su médico qué ofrece su sistema para compensar el costo en complejidad y facilidad de uso que estos sistemas no:

  • Encripta todos los hash de scrypt (con hash, salt y all) usando un HSM para que un atacante no pueda hacerse con la clave de encriptación.
  • Use la autenticación de dos factores (por ejemplo, con un código de inicio de sesión de SMS).
respondido por el Anders 08.06.2016 - 10:54
fuente

Lea otras preguntas en las etiquetas