Cifrado de archivos con AES-256-CBC vs Cifrado Chunk

0

Básicamente, estoy diseñando un protocolo que requiere una transmisión de archivos síncrona y ordenada desde un servidor (implementado en Node.js) a un dispositivo, a través de TCP . La transmisión del archivo no es una opción, por lo que cada fragmento de archivo se encapsula en un mensaje que tiene otros campos no cifrados, que están fuera del alcance de esta pregunta.

Uno de los requisitos es que el contenido del archivo no se puede enviar en texto sin formato, por lo que se tuvo que elegir un esquema de cifrado, en este caso opté por el AES-256-CBC , supongo a los efectos de esta pregunta, el algoritmo no se puede cambiar.

Debido a las restricciones del dispositivo (RAM ~ 10KB), se requiere dividir el archivo ( < 5 MB ) en trozos, que luego se enviarán al dispositivo de acuerdo con el protocolo mencionado, siguiendo un esquema enviar / [ack | repetir] . En la recepción, el dispositivo puede almacenar el fragmento en el disco.

Así que mi pregunta principal aquí es que en el backend tengo que elegir entre:

  • Encripta el archivo completo y luego divídelo en partes

    - > El dispositivo de recepción anexaría cada fragmento en un archivo y luego lo descifraría cuando se recibieran todos los fragmentos.

vs

  • Dividiendo el archivo en trozos y luego cifre cada uno de ellos.

    - > Requiere el envío del Vector de inicialización (IV) utilizado en cada cifrado de fragmentos para descifrarlo.

    - > En la recepción de fragmentos, el dispositivo tendría que descifrar el fragmento o almacenar cada uno de ellos con el IV respectivo y luego descifrarlos después de recibir el último fragmento.

El objetivo aquí es comprender qué problemas de seguridad surgen de cada enfoque y también una comparación general entre ellos.

PS: También tengo un esquema de validación de integridad, pero está fuera del ámbito de la pregunta.

    
pregunta SerDom 24.05.2018 - 13:34
fuente

1 respuesta

1

En cuanto a la seguridad, no veo que haya ninguna diferencia.

Dado que se asume que la integridad y la disponibilidad se manejan correctamente, la única preocupación es la confidencialidad. La Solución 1 usa solo un IV, asumiendo que puedes generar buenos IV (aleatorios y lo suficientemente largos), entonces eso está bien. La Solución 2 usa múltiples IV pero no agrega más a la seguridad (los IV son todos públicos). De hecho, los IV se utilizan para aleatorizar el texto cifrado para que el ataque de texto simple elegido no sea posible. Un IV para todo el archivo es suficiente para este propósito. En la solución 1, todos los datos están encriptados bajo una clave. Esto es lo mismo en la solución 2. Luego, la confidencialidad se reduce a la seguridad de esta clave. No hay diferencia en ambas soluciones.

Puede haber alguna diferencia cuando se trata de rendimiento. La solución 2 permite que el cifrado y el descifrado se realicen en paralelo. Este no es el caso en la solución 1. Por otro lado, la solución 2 requiere un poco más de espacio / computación / ancho de banda debido a los IV adicionales.

    
respondido por el Changyu Dong 24.05.2018 - 18:25
fuente

Lea otras preguntas en las etiquetas