Contraseña segura almacenada en el cliente

2

Tengo la tarea de cambiar el método de inicio de sesión actual de nuestros usuarios a uno más seguro (en el momento en que todas las contraseñas se almacenan en texto sin cifrar en la base de datos ...).

El problema es que todas las contraseñas deben estar en la red local del cliente (ya que deberían poder funcionar incluso sin conexión a Internet), pero debemos poder recuperarlas y avisarlas a los usuarios en caso de que se olviden.

Intenté presionar para obtener la solución estándar "hashing and salting + reset de contraseña si fuera necesario", pero se consideró demasiado complejo.

Estaba pensando en usar cifrado asimétrico, por lo que podemos implementar una clave pública para los clientes y cifrar todas las contraseñas con ella (verificando la contraseña cifrada en el momento del inicio de sesión, como lo hace normalmente con hashes), y mantener la clave privada para que podamos eventualmente puede descifrar la contraseña si es necesario.

¿Esto es realmente seguro (siempre que mantengamos la clave privada para nosotros mismos) o deberíamos recurrir a otro método?

    
pregunta BgrWorker 14.09.2017 - 14:54
fuente

2 respuestas

3

Primero: sin almacenamiento de contraseña.

El almacenamiento de contraseñas es incorrecto. Cifrado de texto claro o cifrado, simétrico o asimétrico, no importa. Si se puede revertir la contraseña, se revertirá.

Debe almacenar la contraseña en un formulario hash seguro. Usa bcrypt con una buena cantidad de rondas. Demasiadas rondas (100,000) usarán demasiados recursos, muy pocos (100) harán que un ataque de diccionario o fuerza bruta sea más fácil.

El restablecimiento de contraseñas y el hashing plus no es una solución compleja. Es más sencillo que implementar una clave pública en el cliente y proteger adecuadamente la clave privada.

Y no recuperas contraseñas. Generar nuevos. No es dificil. Solo asegúrese de que solo el propietario de la contraseña olvidada pueda restablecer la contraseña. Enviar un enlace al correo electrónico del usuario o un código de confirmación a sus teléfonos. Y no modifique la contraseña hasta que el usuario haga clic en el enlace o acceda al servicio de restablecimiento de contraseña con el nombre de usuario y el código de restablecimiento correctos.

    
respondido por el ThoriumBR 14.09.2017 - 15:08
fuente
0

Si está dispuesto (y puede) almacenar su propia clave privada de manera segura, y ser responsable de restablecer las contraseñas de los usuarios de todos modos, le sugiero que simplemente proporcione un mecanismo donde pueda emitir una "contraseña restablecida" con privilegios firmada. Instrucción para un usuario.

Dijiste que parte del caso de uso era que tenían que poder reiniciarse sin conexión. Esto sería similar a los mecanismos de licencia, donde el cliente se comunicaría con usted, verificará quiénes son, usaría su clave privada para emitir una cadena de token / licencia / reinicio que podrían ingresar al software que habilitaría un restablecimiento de contraseña por única vez para usuario específico.

No hay almacenamiento de contraseñas, funciona localmente.

    
respondido por el JesseM 14.09.2017 - 19:12
fuente

Lea otras preguntas en las etiquetas