autenticación de aplicación web segura

1

Sé que hay muchas preguntas sobre las contraseñas de hash en el lado del cliente, pero ninguna de ellas, que encontré, aborda mi caso de uso.

Mi aplicación se cifrará de extremo a extremo y no es una opción para enviar la contraseña de usuario real a mi servidor. Tengo que escribir la contraseña en el lado del cliente.

Después de horas de investigación, decidí usar PBKDF2 con SHA256, pero estoy confundido. Parece que PBKDF2 necesita una sal.

Quiero usar las implementaciones de crypto-js, porque no encontré otras implementaciones para PBKDF2.

¿Cómo debo generar la sal para PBKDF2? El hash resultante debe ser el mismo para cada ejecución, ya que será la contraseña del usuario desde la perspectiva de los servidores de la aplicación.

¿Podría además proporcionar algún código de referencia o proyecto, donde se está haciendo esto?

(El hashing no tiene la intención de evitar MITM, sino de evitar que mi aplicación sepa la contraseña en cualquier momento).

Gracias de antemano.

Contexto (como lo sugiere @Daisetsu)

Esta debe ser una aplicación donde los equipos pequeños puedan almacenar credenciales, por ejemplo, para conmutadores de red. Todos los datos deben estar cifrados de extremo a extremo, para que las empresas puedan confiar en la aplicación e incluso piratear el servidor de la aplicación no proporciona información confidencial.

Debido a que algunos usuarios pueden establecer la misma contraseña para la autenticación y el cifrado de sus claves privadas (que creo que todos los usuarios harán), mi servidor normalmente podría descifrar las claves privadas a medida que el usuario inicia sesión. Para evitar esto, El cliente debe hacer un hash.

No se puede confiar en Javascript, pero podría hacer un zip que contenga todos los archivos y podría ejecutar la aplicación angular localmente en mi API REST;)

    
pregunta Hendrik 24.04.2016 - 21:23
fuente

1 respuesta

0

Como mencioné en el comentario, no puedes confiar en javascript servido por el servidor. La idea de mantener el lado del cliente descargado en sus computadoras es interesante, aunque eso realmente no resuelve el problema. El servidor aún puede incluir javascript como parte de una respuesta a menos que sea increíblemente cuidadoso. En este caso realmente no iría con javascript. Hay demasiadas maneras en que podría salir mal.

En este caso, mi recomendación sería usar un complemento del navegador o alguna otra aplicación del lado del cliente que pueda compilarse y firmarse, ya que estás tratando con credenciales confidenciales. ¿Hay alguna razón por la que no pueda ir con un servicio como el último paso? Por qué reinventar la rueda.

EDITAR:

Cómo implementar crypto-js PBKDF2 con salt enlace

También mencionó que cree que los usuarios reutilizarán sus contraseñas tanto en el inicio de sesión del sistema como en sus claves privadas. Después de que el usuario envíe sus claves / certificados al sistema, es posible que desee revisar la auditoría de sus credenciales cargadas mediante el uso de la contraseña que proporcionaron para desbloquear las claves cert / private.

    
respondido por el Daisetsu 24.04.2016 - 21:54
fuente

Lea otras preguntas en las etiquetas