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;)