No estoy seguro de si esta es la SE correcta para hacer esta pregunta, pero parece ser que tengo una base de datos de archivos que necesita cifrarse, de manera que varias personas con diferentes contraseñas / conexiones a este sistema remoto puedan acceder al mismos archivos sin ingresar un segundo conjunto de credenciales.
Específicamente, necesito poder admitir:
- múltiples usuarios que acceden a la versión de 'texto sin formato' de un solo archivo que se ha cifrado una vez
- revocación de los derechos de un solo usuario (si son despedidos, etc.)
- permitir que un usuario que haya olvidado su contraseña obtenga una nueva contraseña (es decir, restablecimiento de contraseña)
- idealmente, permita la búsqueda / clasificación remota de dichos archivos encriptados y minimice la capacidad de un atacante para interceptar credenciales.
Mi conocimiento de la seguridad es, en el mejor de los casos, teórico; He hecho algunas codificaciones dongle (muy consciente de que los crackers destruirán la seguridad si se nos da suficiente tiempo), pero este tipo de sistema distribuido está un poco más allá de mí.
Mi idea actual es:
- tiene un archivo de certificado que sirve para decodificar los archivos cifrados remotamente. Este certificado está cifrado por el nombre de usuario / contraseña del usuario.
- los usuarios inician sesión de manera remota antes de intentar descifrar el certificado, por lo que si no pueden iniciar sesión (es decir, ya no están trabajando allí, lo que sea), entonces no pueden obtener el certificado. Esto es extremadamente débil, ya que deberían poder descifrar el certificado de todos modos si son expertos.
- para la búsqueda / clasificación remota de estos archivos, haga una pre-selección en el intervalo de fechas de los archivos. Esta técnica solo es valiosa porque no esperamos más de 5-10 adiciones a la base de datos por usuario por día (e incluso eso es ridículamente prolífico), por lo que obtener entradas de los últimos tres días, tres semanas, etc. caso de uso Luego, el descifrado / búsqueda / clasificación de estos archivos se puede hacer localmente.
- para las reasignaciones de contraseña, necesitan obtener otro certificado cifrado con el nuevo nombre de usuario / contraseña. Eso significa que alguien más en el sitio (el administrador o quien sea) debe tener acceso a una versión de texto simple del certificado para proporcionar al usuario un nuevo certificado, lo que significa que un administrador debe asignar las nuevas contraseñas. Con lo que estoy bien.
Este enfoque es malo por varias razones:
- los usuarios expertos pueden descifrar su certificado anterior usando sus credenciales y el conocimiento de la rutina de cifrado / descifrado. Esto no es un gran problema, porque de todos modos no pueden acceder a datos remotos, ya que sus inicios de sesión fallarán.
- la búsqueda / clasificación remota será dolorosa.
- si todos en el sitio pierden su contraseña, pierden todos sus datos. Tiendo a pensar que si los clientes desean este nivel de seguridad, también quieren este tipo de consecuencia.
Entonces le pregunto a esta comunidad: ¿este enfoque es viable? ¿Hay un paquete o grupo de utilidades que debería considerar para este enfoque (o algún otro, más mejorado)?
Para que quede claro, este sistema almacenará los datos cifrados de forma remota y el usuario accederá a esos datos. Puedo hacer que el cliente usuario esté en cualquier sistema, pero la idea es que será un programa que le demos al usuario para acceder a los datos remotos. El servidor nunca debe tener datos de texto simple.
Entonces, si el usuario está en Windows, entonces tendrá un cliente, un certificado y credenciales de inicio de sesión. El certificado se cifraría con esas credenciales, de modo que se pueda descifrar y utilizar para leer datos de este sistema remoto. No puedo cambiar el sistema operativo que tendrá el usuario.