Para cada registro de datos (o conjunto de registros, si los mismos usuarios siempre pueden acceder a todos los registros de un conjunto), cree una clave de cifrado aleatoria. Luego encripte una copia de esta clave con la clave de cada usuario que tenga acceso a los datos.
(Las claves de usuario pueden derivarse directamente de la contraseña del usuario utilizando una función de derivación de clave adecuada, como PBKDF2 , o puede generar una clave aleatoria por usuario de cada usuario y cifrarla con la clave derivada de la contraseña. La última opción es un poco más complicada, pero tiene la ventaja de que solo necesita volver a cifrar una clave cuando un usuario cambia su contraseña. contraseña.)
Para obtener más información, consulte, por ejemplo, esta pregunta relacionada sobre crypto.SE .
Editar: Acabo de notar la mención de LDAP en tu pregunta. Realmente no estoy muy familiarizado con LDAP, pero por lo que puedo decir, si su aplicación está actuando como un cliente LDAP, de modo que el usuario ingrese su contraseña en su aplicación, que luego consulta al servidor LDAP para validarla, luego puede en su mayoría hacerlo como se describe anteriormente.
Lo único con lo que va a tener problemas son los cambios de contraseña, a menos que pueda hacer que el servidor LDAP le notifique sobre ellos e incluya las contraseñas antigua y nueva en la notificación. Una opción sería que su aplicación también verifique la contraseña ingresada en su propia base de datos, por ejemplo. almacenando un hash de la clave de cifrado del usuario (derivada de la contraseña con PBKDF2) en la base de datos. Si la contraseña pasa la validación de LDAP pero no pasa esta verificación, significa que el usuario ha cambiado su contraseña, en cuyo caso debe pedirle que también ingrese su contraseña antigua para que pueda volver a cifrar la contraseña. datos.
Sin embargo, la solución ideal sería almacenar los datos cifrados (o al menos las claves por usuario) en el servidor LDAP, si el servidor puede configurarse para hacerlo de forma segura. Basado en Google, al menos algunos de ellos pueden ser.