Cifrado de extremo a extremo para archivos

0

Necesito desarrollar un sistema donde un usuario pueda cargar un archivo a través del navegador que encripta el archivo y lo almacena en mi servidor. Después de cargar el archivo, otro usuario puede descargarlo con una aplicación iOS o Android y descifrarlo para verlo. El problema es que no debería poder descifrar el archivo en mi servidor, porque los archivos son potencialmente muy sensibles. Ahora, no tengo ningún conocimiento real sobre el cifrado y no sé por dónde empezar. ¿Tiene alguna pista sobre cuál es la mejor práctica para este tipo de encriptación de extremo a extremo?

Se me ha ocurrido una idea de cómo debería ser mi esquema de seguridad.

  1. El cliente CMS inicia sesión y su contraseña se usa a partir de ahora como clave de carga (más tarde se usa)
  2. En el lado del CMS, se crea un usuario posterior de la aplicación (posible receptor de archivos), con una contraseña de inicio de sesión (para la aplicación) y una clave de descarga (que luego se usa) para descifrar los archivos descargados.
  3. El cliente CMS envía a los usuarios de la aplicación su contraseña de inicio de sesión y la clave de descarga en un correo separado (sin correo electrónico)
  4. El cliente CMS carga un archivo que se encripta con una clave aleatoria (más tarde se usa) en el navegador y se almacena en el servidor 1. La clave aleatoria y la referencia al archivo se cifran con la clave de carga y se almacenan en el servidor 2 .
  5. El cliente CMS selecciona el usuario de la aplicación (uno o más) para ver los archivos cargados. En este momento, la clave aleatoria y la referencia del archivo (del paso 3.) se descifran con la clave de carga. Este paquete descifrado se duplica y se encripta con la clave de descarga del usuario de la aplicación seleccionada (este paso se realiza para cada usuario de la aplicación seleccionada, por lo tanto, tendremos múltiples paquetes para cada usuario de la aplicación)

¿Se acerca este enfoque o me dirijo en la dirección incorrecta?

    
pregunta Philipp Mainz 13.11.2016 - 17:30
fuente

2 respuestas

1
  

Necesito desarrollar un sistema donde un usuario pueda cargar un archivo a través del navegador   que encripta el archivo y lo almacena en mi servidor. Después de que el archivo es   otro usuario cargado puede descargar el archivo con una aplicación iOS o Android   Y descifrarlo para verlo. El problema es que no debería ser capaz de   descifrar el archivo en mi servidor, porque los archivos son potencialmente muy   sensible.

La gente hace esto frecuentemente con sistemas de almacenamiento en la nube como Dropbox: encripta un archivo, lo almacena en el host y luego lo desencripta en otro lugar. Puede reutilizar cualquier sistema de cifrado bien probado y común (GPG, TrueCrypt, etc.), y para el host es solo un blob cifrado.

Si proporciona esto como un producto, debería reutilizar el software de cifrado de archivos existente y reutilizar los sistemas de almacenamiento en la nube existentes (S3, por ejemplo, es bastante económico y ofrece excelentes garantías de disponibilidad y durabilidad); lo único que tienes que hacer tú mismo es la UX que está encima de ellos.

    
respondido por el Xiong Chiamiov 14.11.2016 - 23:14
fuente
0

Usted querrá cifrado autenticado. AES-GCM con una clave derivada de algo como PBKDF2 es probablemente tu mejor apuesta.

El problema aquí es que si no conoces bien la criptografía, es fácil dispararte en el pie. AES-GCM ayuda con eso un poco, pero no es a prueba de balas.

Publique su esquema de encriptación para que otros puedan revisarlo y confirmar que esté seguro.

    
respondido por el d1str0 13.11.2016 - 18:44
fuente