Para la situación específica a la que te estás refiriendo, usar la clave simétrica y las claves RSA es el camino correcto. A saber:
- Los datos se cifran con la clave simétrica K (con AES o algún otro algoritmo que hace el trabajo).
- Cada usuario que debe tener acceso a los datos tiene un par de claves RSA. Cada usuario tiene su par de claves propio , distinto del de cualquier otro usuario. Llamemos a Pu la clave pública del usuario u (y Su la clave privada correspondiente).
-
K está encriptado asimétricamente (RSA) con la clave pública de cada usuario. Esto significa que la base de datos contiene varios valores E Pu (K) (cifrado de K con la clave pública de usuario u ).
- Cuando un usuario desea acceder a los datos, utiliza su propia clave privada Su (desde su unidad flash) para descifrar su valor: D Su ( E Pu (K)) = K . Con K , el usuario puede acceder a los datos encriptados.
- Cuando desee agregar un nuevo usuario v , genere el nuevo par de claves para ese usuario ( Pv , Sv ) con el Clave privada almacenada en una nueva unidad flash que le da al usuario. También codifica K con Pv y agrega el nuevo E Pv (K) a la lista de dichos valores en la base de datos.
Eliminar un usuario es complicado, debido a un hecho general: no puede imponer el olvido . Cualquier usuario que haya tenido acceso a los datos en algún momento podría haber tomado una copia de los datos completos (descifrados) y aún recordarlos. Lo mejor que puede hacer es asegurarse de que el usuario eliminado no tendrá acceso a los datos nuevos agregados después del desalojo de ese usuario. Por lo tanto, hay dos métodos para revocar el acceso de datos del usuario u :
-
El método rápido pero incompleto es simplemente eliminar E Pu (K) de la lista de valores almacenados. Esto será suficiente para denegar el acceso posterior del usuario u si ese usuario es honesto y no mantuvo una copia de seguridad de E Pu (K) ( o, simplemente, una copia de seguridad de K).
-
El método completo es generar una nueva clave maestra K ', descifrar todos los datos, volver a cifrarla con K' y cifrar K ' con las claves públicas de todos los usuarios excepto u . La base de datos contendrá E Pv (K ') para todos los usuarios v excepto u . Esto efectivamente bloquea al usuario u de cualquier nuevo elemento de datos.
El sistema descrito anteriormente puede alojar tarjetas inteligentes en lugar de "unidades flash". No es necesario que ninguna entidad que no sea el usuario u acceda realmente a la clave privada del usuario u .
Nota: todo lo anterior se trata de controlar leer el acceso a los datos. Controlar el acceso write , detectar alteraciones, duplicaciones o supresiones es otro asunto.