¿Los mejores patrones de diseño de cifrado de datos de usuario?

6

Digamos que tengo un sitio web que permite a los usuarios cargar archivos (como Dropbox), y necesito cifrar esos archivos para que solo los usuarios que tienen acceso a ellos puedan ver los datos del archivo. Los usuarios deben poder ver los nombres / tamaños de los archivos a través de una interfaz web (pero nadie más debería poder hacerlo) y descargar la versión sin cifrar cuando lo deseen. ¿Cuál sería la configuración de cifrado más segura?

Me parece que podría cifrar una clave de descifrado con la contraseña de los usuarios (y asociar esa clave a ese usuario solo / usarla para cifrar sus datos), pero luego para acceder a la información del archivo o permitirles para descargar los datos del archivo, el servidor tendría que tener acceso a la clave de descifrado más allá del punto de inicio de sesión. Esto requeriría persistir la contraseña del usuario en cierta capacidad (o guardar la clave de descifrado) con la sesión, ambas parecen muy inseguras. También se me ha ocurrido que podríamos (de alguna manera) almacenar de forma segura una clave maestra, pero entonces los datos del usuario están en riesgo si esa clave es robada.

¿Cómo se hace esto en la práctica? Además, si alguien por ahí tiene buenos artículos / publicaciones sobre este tema, me gustaría mucho leerlos.

    
pregunta FuZion 18.12.2011 - 07:58
fuente

3 respuestas

5

Hay un espectro de formas de proporcionar este tipo de almacenamiento en línea:

  • Completamente sin cifrar: sin protección alguna

  • Cifrado en todo el sitio del lado del servidor: el usuario carga los datos en su forma no encriptada y los almacena en el servidor remoto. El servidor tiene, por ejemplo, un disco totalmente encriptado. Esto solo protege físicamente los datos.

  • Claves individuales del lado del servidor: el servidor genera claves, proporciona administración de claves y proporciona todo el cifrado / descifrado de los datos del usuario según el usuario específico. El servidor es consciente de los valores clave.

  • Encriptación del lado del cliente: los clientes manejan el material de clave sensible real, manejan todo el cifrado y descifrado, y técnicamente manejan todas las funciones de administración de claves (aunque el servidor realiza un seguimiento de todo para usted). El servidor no puede descifrar los datos en absoluto.

Parece que desea proporcionar una variante de cifrado del lado del cliente donde el servidor no tiene conocimiento de las claves, pero está atrapado en la idea de que el servidor debe proporcionar el servicio de cifrado / descifrado real. No puedes tener ambos. Tendrás que determinar lo que tu servidor realmente va a hacer. ¿Es simplemente un vehículo de almacenamiento? ¿Tiene que haber colaboración? ¿Quieres poder compartir los datos entre los usuarios? Todas estas preguntas influyen en la función que desempeñará el servidor y el caso de uso / caso de negocio real que intenta resolver.

En términos de crear realmente la clave de cifrado basada en la contraseña del usuario, querrá revisar "derivada de clave basada en contraseña". Dicha clave de cifrado podría funcionar como una clave maestra para las otras claves basadas en el cliente.

    
respondido por el logicalscope 18.12.2011 - 19:25
fuente
1

Proporcione en / descifrado del lado del cliente y proporcione la herramienta para el usuario. Como lo quiere simple, rápido, sólido, gratuito, multiplataforma (ya que no sabe lo que el usuario podría estar usando) y muy fácil de usar, le recomiendo el Asistente de cifrado de la Fuerza Aérea de EE. UU., Consulte enlace .

Una gran cosa sobre el Asistente de cifrado es el metadato de texto claro. Su sitio web puede leer & publicar estos datos (nombres, tamaños, palabras clave, autor, etc.)

    
respondido por el Kevin 19.02.2012 - 02:04
fuente
0

Como suele ser el caso en seguridad, un buen lugar para comenzar es preguntarse: "¿Cuál es mi modelo de amenaza?" ¿Contra qué estás tratando de defenderte? ¿Quién es el adversario y cuáles son sus capacidades y sus motivaciones?

Si desea protegerse contra el proveedor de la nube, entonces necesita cifrar los datos en el lado del cliente, para que el archivo almacenado en la nube esté en forma cifrada. Por ejemplo, puede echar un vistazo a Tarsnap, SpiderOak o Wuala. Si la seguridad es primordial, echaría un vistazo de cerca a Tarsnap; el autor (Colin Percival) es un respetado ingeniero de seguridad, que ha sido muy abierto con respecto a su diseño, y yo esperaría que la arquitectura de seguridad de Tarsnap esté extremadamente bien diseñada.

Si está preparado para confiar en el proveedor de la nube, entonces tiene más opciones. Puede cifrar los datos en el lado del cliente o puede subirlos a la nube y dejar que la nube se encargue de protegerlos (ya sea haciendo que el proveedor de la nube los cifre o confiando en el proveedor de la nube para implementar el control de acceso) . Por ejemplo, Dropbox cae en esta categoría.

    
respondido por el D.W. 19.02.2012 - 03:11
fuente

Lea otras preguntas en las etiquetas