¿Dónde almacenar una clave para el cifrado / descifrado de todo el sistema?

3

Tengo una aplicación web donde (entre otras cosas) los clientes pueden cargar archivos y los administradores pueden descargarlos. Los archivos cargados se almacenan en ServerA y la aplicación web utilizada para cargar / descargar esos archivos se ejecuta en ServerB .

Me gustaría hacerlo para que mientras los archivos se almacenan en ServerA estén cifrados y que solo la aplicación web pueda cifrar / descifrar, pero mi preocupación es que puede que no haya una manera efectiva de almacenar un cifrado clave, lo que haría que el cifrado de archivos se realice principalmente para mostrar.

Encontré esta pregunta / respuesta que sugirió Algunas buenas maneras de almacenar una clave de forma segura, pero creo que las más seguras no se aplican ya que necesito diferentes personas para poder descifrar el archivo.

Por ejemplo, no puedo crear una clave basada en las credenciales de usuario, porque los clientes deben poder cifrar a todos los usuarios de la administración deben poder descifrar (¿verdad?).

Por lo que puedo decir, mi mejor opción es almacenar los archivos cifrados en un servidor y almacenar la clave de cifrado en el código de mi servidor web, pero esto no parece particularmente seguro. Parece probable que si un usuario malintencionado obtiene acceso a un servidor, probablemente obtenga acceso a ambos.

Mi pregunta: ¿vale la pena implementar "archivos cifrados en el Servidor A" y "clave de cifrado en el Servidor B", o me estaría engañando para pensar que esto es más seguro? ¿Existe una forma efectiva de cifrar archivos según las condiciones que describí anteriormente?

    
pregunta Abe Miessler 28.05.2014 - 23:11
fuente

4 respuestas

3

El método más efectivo es usar hardware seguro para almacenar la clave. Puede obtener aceleradores SSL que almacenarán y procesarán de manera segura las claves a bordo para que nunca abandonen el módulo de hardware seguro. Relativamente caro y requiere que tenga acceso físico al hardware (por lo tanto, no hay VPS o soluciones en la nube).

    
respondido por el Julian Knight 29.05.2014 - 22:19
fuente
1

Puede usar clave pública / cifrado asimétrico, por ejemplo, usando el programa gnupg. El administrador genera un par de claves públicas / privadas y almacena la clave privada en un lugar seguro (posiblemente en ServerA ni ServerB). Puede almacenar la clave pública en cualquier lugar, y en particular en el servidor web, donde se utilizará para cifrar los archivos cargados. Una vez cifrado, puede almacenar los archivos cargados (versión cifrada de) en ServerA o ServerB; De cualquier manera, sin la clave privada, no será posible leerlos. Para ver los archivos, el administrador puede copiar un archivo cargado a una computadora confiable y luego usar la clave privada para descifrar.

    
respondido por el jbms 28.05.2014 - 23:40
fuente
0

Una forma de vincular las credenciales de los usuarios a la clave es tener una clave para el archivo cifrado y cifrar esa clave varias veces con la clave según las credenciales de cada usuario. Tendrá una tonelada de archivos de clave pequeña (uno por usuario), y cada usuario que tenga acceso puede descifrar la clave que se usará para descifrar el archivo final.

    
respondido por el B T 27.07.2016 - 07:20
fuente
0

Supongamos que los usuarios A, B, C y D desean compartir archivos entre sí en una ubicación remota.

Cada usuario genera un par de claves públicas y privadas (digamos RSA1024 / 2048 bit).

Cada usuario publica su clave pública en el servidor remoto.

Ahora digamos que A quiere compartir un archivo con B y C, pero no con D.

A creará una clave de cifrado simétrica (digamos AES-256, simétrica porque es más rápida). Luego continúe cifrando el archivo con la clave simétrica que acaba de crear para ese propósito. Luego encripta la clave 3 veces por separado: una vez con su propia clave pública, una vez con la clave pública de B y una vez con la clave pública de C.

A luego carga el archivo cifrado y todos los diferentes cifrados de la clave simétrica en el servidor remoto.

El servidor remoto no sabe cómo abrir estos archivos y él no necesita hacerlo.

Cuando B solicita el archivo, recibe el archivo cifrado y la clave simétrica que se cifró con la clave pública de B. B ahora puede continuar y abrir el archivo.

Tenga en cuenta que necesitamos una clave simétrica diferente para cada archivo porque queremos controlar el uso compartido por archivo.

El único problema con este método es que ahora A, B, C y D necesitan mantener una clave privada en algún lugar. Si no quiere que ellos mismos almacenen la clave privada, debe cifrar la clave privada con un cifrado protegido por contraseña (que es diferente de su contraseña de inicio de sesión) y almacenar la clave privada protegida por contraseña en el mismo servidor (o diferente). Ahora, cada vez que un usuario inicie sesión, primero deberá descargar su clave privada protegida por contraseña y abrirla con otra solicitud de contraseña.

    
respondido por el Shloim 21.09.2016 - 20:20
fuente

Lea otras preguntas en las etiquetas