Voy a crear una aplicación cliente-servidor que almacene la información financiera confidencial de un usuario en el servidor. Me gustaría cifrar estos datos para que, incluso si un pirata informático obtiene acceso al servidor, no pueda leer la información financiera del usuario. Los datos serían descifrados por el cliente con la contraseña del usuario.
Para dificultades adicionales, a un usuario se le puede otorgar acceso a los datos de otro usuario.
¿Es esto factible? Si es así, ¿hay una guía en línea que proporcione un ejemplo de los tipos de criptografía a utilizar?
Por ejemplo, estoy pensando que cada usuario debe tener una clave privada derivada de su contraseña y una clave pública correspondiente que se utiliza para cifrar sus datos en el servidor. Esta clave pública también se almacena en el servidor, de modo que si Alice quisiera darle acceso a Bob a sus datos, desencriptaría sus datos usando su clave privada, luego los cifraría nuevamente utilizando tanto la clave pública como la de Bob. Un problema con este enfoque es que si un pirata informático obtiene acceso a los datos cifrados, podría usar la "fuerza bruta" al intentar cada combinación de, por ejemplo, 8 caracteres como contraseñas para ver si esa combinación desencripta los datos. Por lo tanto, quiero hacer que el proceso de desencriptación sea tan lento que no sea práctico usar la fuerza bruta. ¿Existe tal algoritmo de clave pública-privada?
Editar: está bien, después de un poco de investigación se ha encontrado que hay muchos algoritmos hash (como PBKDF2) diseñados para ser lentos porque toman un parámetro de iteración que puede ser tan grande como quieras.