Cómo manejar el cifrado de extremo a extremo [cerrado]

1

Estoy trabajando en una aplicación en la que el objetivo es cargar los datos del usuario, almacenarlos, hacer un procesamiento de esos datos y presentarlos al usuario cuando se le solicite. Queremos seguir el modelo de encriptación de extremo a extremo en el que el sistema no tiene forma de descifrar los datos que un usuario subió. No he tratado la seguridad de esta manera antes y en la arquitectura presentada tengo algunas preguntas / inquietudes que quiero compartir con todos ustedes.

Métodos:

  1. Cuando un usuario se registra, generamos una clave privada pública para él, la clave privada se denomina clave maestra aquí.

  2. Cuando un usuario agrega información, la ciframos usando la clave de sesión. Solo la unidad de procesamiento de datos (DPU) de nuestro sistema debe poder descifrar estos datos. Dado que el tamaño de los datos puede ser mayor que RSA-3072, los datos se encriptan primero con AES-256 y luego se encriptan con la clave de sesión RSA.

  3. Los datos cargados van a DPU, los descifran, procesan y encriptan nuevamente.

  4. Cuando el usuario desea acceder a esta información, ciframos la clave maestra con la clave de sesión y la enviamos a DPU para descifrar esos datos.

  5. La DPU posterior al descifrado recopila todos los datos solicitados, genera una nueva clave de datos, cifra la respuesta usando esta clave de datos, cifra la clave de datos con la clave pública de la sesión del cliente y ensambla tanto la clave como la respuesta cifradas y la devuelve.

  6. La aplicación del cliente descifra la clave con la clave privada de la sesión del cliente y la respuesta se descifra con la clave de datos.

Preocupaciones:

  1. Este modelo es teórico a partir de ahora, ¿es esto posible?

  2. ¿Quién genera estas claves (claves de sesión, claves de datos), los desarrolladores (Java y Python) generan estas claves y dónde las almacenamos?

  3. ¿Hay alguna biblioteca que podamos usar para hacernos la vida más fácil? Nuevamente, no queremos que nuestro sistema pueda acceder a los datos del usuario sin la clave maestra del usuario que se encuentra en su dispositivo. Planeamos utilizar AWS Cognito para la autenticación y la autorización y, por lo que sé, no proporciona ninguna clave de sesión. ¿Cómo podemos lograr lo que se menciona?

  4. Enviar una clave privada por cable para descifrar los datos, ¿es una buena idea?

Sé que es mucha información, por favor, avíseme si tiene más preguntas, esperando sugerencias / comentarios.

    
pregunta APZ 20.09.2018 - 14:47
fuente

2 respuestas

2

El cifrado de extremo a extremo es cuando 2 sistemas se comunican a través de un tercero, y este tercero no puede descifrar el contenido. Como la aplicación de chat Signal, o Whatsapp, o cuando cifra su correo electrónico con la clave pública del destinatario antes de enviarlo. En estos casos, el mensaje deja su sistema cifrado y nadie más que el destinatario puede descifrarlo y leerlo.

Su caso se puede resolver utilizando TLS y certificados del lado del cliente. Cuando el usuario se registre, deje que cree sus propios certificados (en su aplicación) o le envíe uno creado en el servidor, y use este certificado en cada comunicación. Cree un certificado para la DPU y cifre los datos del lado del cliente usándolo. De esta manera solo la DPU y el cliente pueden acceder a los datos.

    
respondido por el ThoriumBR 20.09.2018 - 16:50
fuente
0

Lo que está describiendo no es un cifrado de extremo a extremo (e2ee). De hecho, e2ee en general no es posible cuando los datos se están procesando, ya que sus servidores no tendrían acceso a los datos.

Lo que describe es difícil de seguir y parece inútil. Si el atacante compromete alguno de los servidores, puede obtener acceso a los datos. Si le preocupa el tránsito entre los servidores, puede usar TLS estándar. Si está preocupado por los datos en reposo, puede usar FDE o algún esquema de cifrado de trinquete (si solo desea que el cliente pueda desencriptarlos después de que se realice el procesamiento).

De cualquier manera, no tiene sentido hacer el cifrado como lo describe antes de procesar los datos.

    
respondido por el Peter Harmann 20.09.2018 - 16:38
fuente

Lea otras preguntas en las etiquetas