Manera segura de enviar archivos al servidor, almacenarlos y luego recuperarlos

0

Estoy buscando ideas hoy.

El problema: Los archivos confidenciales se envían a través de REST (a través de SSL, por supuesto) a un servidor de terceros. No puedo tocarlos programáticamente hasta que llegan al servidor. Esos archivos se almacenan allí hasta que los usuarios los descargan a través de SFTP y los eliminen del servidor. Cada archivo residirá durante aproximadamente una semana en este servidor.

El objetivo: Asegure los archivos en cada paso hasta que estén en las máquinas de los usuarios.

Mi plan: Como no puedo cifrar los archivos hasta que llegan al servidor de terceros, mi única esperanza de seguridad es una conexión SSL. Me gustaría asegurarme de que solo se guarden los archivos mis en el servidor, por lo que estoy pensando que debo enviar una contraseña junto con los archivos. ¿Qué es mejor que una contraseña estática? Me gustaría usar contraseñas únicas, pero no estoy seguro de por dónde empezar.

A medida que se descarga un archivo en el servidor, copiaré la secuencia en la memoria temporal y cifraré los datos con RSA. Puedo mantener la clave privada en las máquinas de los usuarios y almacenar solo la clave pública en el servidor. (Tenga en cuenta que el servidor no tiene cifrado de hardware). Cuando un usuario se conecta a través de SFTP, puede descargar el archivo cifrado y descifrarlo solo en su propia máquina una vez que esté fuera de línea. ¿Hay una mejor manera de mantener los archivos hasta que un usuario pueda acceder a ellos?

¡Cualquier otra sugerencia sería muy apreciada!

Actualizar Después de hacer pequeños retoques y reflexionar, he encontrado que esta solución es la más adecuada dado mi control limitado sobre el servidor de inicio: enlace

En resumen, envíe los archivos de A a B a través de SSL. Use el cifrado AES-256 con una clave generada aleatoriamente cuando el archivo llegue a B. Cifre esa clave aleatoria con RSA 2048 (la clave pública). Guarda todo en el servidor hasta que se pueda descargar. Una vez que los archivos están en la máquina de los usuarios, descifre la clave aleatoria con la clave privada de RSA (almacenada solo fuera de línea) y luego use esa clave para descifrar el cifrado AES en el archivo. El motivo del cifrado simétrico / asimétrico híbrido es que quiero el formato de clave pública-privada pero RSA limita el tamaño de los datos a 256 bits (para 2048; solo es de 128 bits para 1024). Así que ciframos los datos y la clave por separado y luego enviamos ambos. Sí, esto da como resultado claves 3 : una generada aleatoriamente cada vez, una clave pública y una clave privada (que nunca ve la luz de Internet).

Nihvel logró esto con más seguridad al cifrar el archivo antes de enviar y guardar la clave aleatoria cifrada en el Servidor A. Por lo tanto, los dos nunca estuvieron en el mismo servidor. ¡Gracias por toda tu ayuda!

    
pregunta Zachary Terlizzese 09.02.2018 - 08:03
fuente

2 respuestas

1

Ya estoy haciendo exactamente lo mismo, pero el concurso de mi cifrado es diferente. Te daré mi opinión.

Tienes un servidor A. El servidor host de servicios de terceros B. El usuario (n) es usuario [n].

You will create a random key, with this, you will encrypt your file X.
You will encrypt the random key with your public-key.
You will create a HASH that links the encrypted file with the random-key.
You will send only the encrypted file X from A to B using HTTPS (use a second certificate, of course).

B will store your encrypted until the user[n] will download it with the HASH file.
User[n] will reach your server A through a webgui (why not), after a login(why not..) and after he uploads the HASH file, your system can decrypt the file and let the user download it.

No one will know your private-key, of course, and no one will be given the public key file.
Even if they will, you will store in A the random key you used to encrypt the file.

Esto resume bastante bien mi idea, y el 80% se aplica en mi entorno (el 20% restante son otros controles).

Claro que hay trabajo que hacer, pero ni siquiera tanto. Construí esto en 1 día y ni siquiera soy tan bueno en eso.

EDIT : Hace poco terminé mi script para realizar copias de seguridad y cifrar una base de datos postgresql. Aquí encontrarás todo lo que necesitas, pero creando el HASH. Al menos la parte de cifrado / descifrado es lo que puede desear. enlace

    
respondido por el Nihvel 09.02.2018 - 16:45
fuente
-3

Puede utilizar un software de código abierto Veracrypt para realizar todas las operaciones relacionadas con el cifrado. Veracrypt está disponible para línea de comandos y gui. Además, en Veracrypt puede usar un archivo particular para la autenticación en lugar de usar una contraseña.

enlace

    
respondido por el Ankit Devnalkar 09.02.2018 - 08:34
fuente

Lea otras preguntas en las etiquetas