Consejo de distribución de claves

1

¡Hace días que pienso en ese problema! La aplicación se basa en un sistema de gestión de alumnos. Estoy implementando el cifrado de base de datos en un nivel de columna y el cifrado se produce en el nivel de la aplicación.

El administrador establece las columnas que se cifrarán en una aplicación de Windows que voy a crear. El cifrado Aes se utiliza para cifrar las columnas. En la aplicación Win, uso la clave pública RSA para cifrar la clave aes y almacenar la clave cifrada en la base de datos. Luego guardo la clave privada en una unidad flash. El usuario autorizado utilizará el archivo de clave privada para descifrar la clave aes y, por lo tanto, descifrar las columnas.

Mi problema es este:

  1. Supongamos que tengo más de un usuario que necesita acceso a estas columnas confidenciales, entonces mi plan no parece ser muy productivo porque, ¿cómo puedo almacenar la clave privada en muchas unidades flash al mismo tiempo? ??

  2. Además, si decido agregar un usuario para acceder a las columnas, ¿cómo darle la clave privada? O si elimino un usuario, debería cambiar la clave privada del resto de usuarios ...

¡Por favor ayuda! ¡Lo he estado pensando durante días!

    
pregunta orange 24.02.2013 - 16:19
fuente

1 respuesta

1

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.

    
respondido por el Tom Leek 24.02.2013 - 16:51
fuente

Lea otras preguntas en las etiquetas