Cifrado de contraseñas con una clave del lado del cliente y el servidor

2

Necesito una forma segura de almacenar una contraseña en una base de datos, pero también necesito una forma de recuperar la contraseña original. Por supuesto, si este no fuera el caso, simplemente lo haría. Para solucionar este problema, se me ocurrió la siguiente solución, pero me gustaría saber si es segura.

Tengo una clave secreta en el servidor y otra clave secreta que se guarda en la aplicación del lado del cliente. Este último es diferente para cada usuario y se genera una nueva clave cada vez que un usuario inicia sesión.

La única vez que el servidor tendrá ambas claves es cuando un usuario realiza una solicitud y el servidor necesita obtener la contraseña sin procesar. Esto significa que cuando se infringen las contraseñas del servidor, las contraseñas siguen siendo seguras, ya que solo tienes la mitad del total de la clave, y como estoy usando AES 256, aún necesitas crackear 128 bits.

¿Está bien o me falta algo importante?

Editar: necesito usar la contraseña del cliente en llamadas a la API a servicios externos

    
pregunta David Western 14.09.2016 - 14:44
fuente

1 respuesta

1

Un par de escenarios de ataque que pienso

  1. Primero, si el servidor está comprometido, entonces el atacante puede esperar (monitorear) en el servidor para recopilar la clave secreta del lado del usuario a medida que ingresan las solicitudes. Puede usar esta clave de cliente y la clave del servidor para recuperar contraseñas de texto simple .
  2. Segundo, si el servidor está comprometido, el atacante puede usar varios otros métodos, como las actualizaciones de software del lado del cliente y enviar malware a los clientes, que recopilará las claves secretas del cliente y las enviará al atacante. El atacante puede tener el volcado de la base de datos y use estas claves recopiladas para descifrar el volcado.

En cualquiera de los casos anteriores, si el servidor está comprometido, el atacante puede obtener acceso a contraseñas de texto sin formato.

    
respondido por el Sravan 14.09.2016 - 15:32
fuente

Lea otras preguntas en las etiquetas