Estoy escribiendo una aplicación web para la gestión de información personal que se ejecuta en la nube. Para eso, estoy considerando el cifrado del lado del cliente utilizando AES256 con window.crypto y SJCL como respaldo para los navegadores más antiguos. El cifrado se basaría entonces en la contraseña de inicio de sesión del usuario. Además, también estoy pensando en hacer el hashing de contraseñas en el lado del cliente.
¿Eso está aumentando la privacidad del usuario? ¿O me estoy perdiendo algo? Sé que la forma estándar es simplemente almacenar datos "texto sin formato" y hacer hashing del lado del servidor.
EDIT Para agregar un alcance más claro, la intención es: en caso de que la base de datos sea robada, los datos del usuario deberían ser difíciles de leer. (Al menos no serán datos simples en ese caso). Al mismo tiempo, cuando el usuario [email protected] usa 123456 para su cuenta de correo y para su cuenta PIM de aplicación web, un atacante aún tiene que revertir el hash de contraseña en Para acceder a Gmail.com de Foo.
En particular, imagine el siguiente escenario: un atacante puede obtener la base de datos y verifica los registros de la base de datos del usuario [email protected]. Obtiene el hash, y algunos datos de usuario encriptados. Con el hash, puede iniciar sesión en la API de PIM de la aplicación web. Sin embargo, no puede leer los datos del usuario.
Con el hash filtrado, el atacante podría comprometer fácilmente los datos a través de la API, pero eso no importa mucho para este escenario. El objetivo principal es aumentar la privacidad de los datos del usuario en caso de una pérdida de la base de datos.
(Además, me gustaría permitir que el usuario desconfíe, al menos ligeramente, del host de aplicación web que lee datos privados. Estoy seguro de que esta solución no se acerca a eso, pero al menos podría ser un primer paso).
Respecto al rendimiento: la API de Web Crypto puede hacer PBKDF2, que me parece bien para el hashing. ( Ejemplo de Github ) SJCL puede ser demasiado lenta como alternativa, por lo que podría tener sentido transpilar C ++ a (asm. ) js.