Permítame comenzar diciendo que esta es realmente mi primera incursión en el cifrado.
He escrito sistemas de nombre de usuario / contraseña, y demás, y estoy familiarizado con las contraseñas de sal y hash ... pero nunca he hecho nada con el cifrado.
Tengo una idea para un sistema que quiero construir ... y tengo (lo que creo que es) una solución inteligente para almacenar los datos del usuario sin saber nada de ellos ... pero no estoy seguro si Estoy abriendo la puerta a algún tipo de falla de "prometer no mirar".
Mi idea es esta: quiero poder almacenar información encriptada sin saber nada sobre el usuario.
El diseño en mi cabeza es el siguiente: el usuario configura una cuenta (nombre de usuario y contraseña). Se crea un bloc cifrado, codificado con la contraseña, del lado del cliente (cifrado de clave secreta a través de libsodium en JavaScript). El nombre de usuario está en hash (del lado del cliente ... ¿tal vez incluido con la contraseña?). Este hash y el blob encriptado se envían al servidor, donde se vinculan entre sí en la base de datos. Cuando el usuario inicia sesión, el hash se envía al servidor y el blob encriptado se envía nuevamente al navegador, donde se utiliza la contraseña para descifrar el blob. Todo esto, obviamente, sucede a través de HTTPS.
¿Hay algún defecto aquí? ¿Estoy pasando por alto algo?
Quiero poder responder, incluso a una citación del gobierno, con "No sé. Y no puedo averiguarlo".
Por supuesto, el malware en el extremo del cliente sería un problema ... pero no he podido pensar en eso ... y ese no es el problema que estoy tratando de resolver ahora. . Solo quiero encontrar una manera de almacenar información de clientes sin saber nada, en absoluto, sobre mis clientes.