Cifrado de datos por partes vs cifrado de los datos completos

12

Supongamos que tengo un archivo con registros y tengo dos opciones para cifrarlo:

  • cifrar el archivo en su conjunto
  • cifre cada registro por separado y almacénelos juntos.

¿Cuál es el camino generalmente preferible y por qué?

Por ejemplo, creo que el segundo enfoque es peor porque, al implementarse de manera ingenua, revelaría información sobre el número y el tamaño de los registros. Pero, ¿qué sucede si agrego algunos datos aleatorios al final de cada registro?

    
pregunta Andrew T 15.07.2011 - 16:51
fuente

4 respuestas

11

Antes de cifrar, primero debes definir qué tipo de propiedad quieres lograr y cuáles son las rutas que puede utilizar un supuesto atacante.

El cifrado es una herramienta para obtener confidencialidad. La mayoría de los modelos de seguridad también necesitan algún tipo de comprobación de integridad controlada (los atacantes "solo pasivos" son muy raros). Hay modos de cifrado que combinan el cifrado (por confidencialidad) y la integridad verificada, consulte EAX y GCM . El cifrado por registro implica lo siguiente:

  • El número y tamaño de las fugas de registros.
  • La integridad estructural del archivo completo ya no está garantizada: un atacante activo podría eliminar algunos registros o cambiar su orden sin ser detectado.
  • Hay una sobrecarga de tamaño. Cada cifrado individual tiene una sobrecarga de tamaño fijo, que depende del modo de cifrado (esto es necesario para la comprobación de integridad y para un parámetro esencial llamado Vector de inicialización ). Tener esa sobrecarga para cada registro requiere más espacio que una sola sobrecarga para todo el archivo.
  • Es posible verificar la integridad de un solo registro sin procesar todo el archivo.
  • Es complejo.

Esta última consecuencia debe verse como una razón convincente para no utilizar el cifrado por registro: la complejidad es el peor enemigo del ingeniero de seguridad. Entonces, a menos que tenga una necesidad real de procesar el archivo en partes parciales (es decir, es demasiado grande para ser descifrado y registrado en la RAM en general), debe abstenerse de intentar implementar el cifrado por registro.

    
respondido por el Thomas Pornin 15.07.2011 - 18:07
fuente
8

Mucho dependerá de lo que quiera hacer con los datos y de sus requisitos en cuanto al ancho de banda, etc.

Como usted dice, la fuga de datos se producirá alrededor del número y tamaño de los archivos con su segunda opción, sin embargo, esto puede no ser un problema y el acceso a los archivos puede ser más rápido.

Al decir que, sin embargo, la mayoría de las soluciones de cifrado de volumen cifran todo el volumen y en situaciones donde el acceso al disco no es el cuello de botella, esta podría ser una solución adecuada para usted.

Mi preferencia en entornos donde el nivel de seguridad requiere que los archivos estén encriptados es encriptar todo el volumen, ya que esto ayuda a eliminar la posibilidad de guardar los archivos de forma accidental, así como a reducir la fuga de datos.

    
respondido por el Rory Alsop 15.07.2011 - 17:03
fuente
2

El segundo método no es ingenuo debido a la razón que mencionaste como cifrado dará un texto cifrado del mismo tamaño siempre que el tamaño del bloque no sea violado. Básicamente, si la entrada es de 2 bytes o 16 bytes, la salida será de 128 bits en AES-128, asumiendo que usted estará rellenando su entrada para llevarla al tamaño de bloque. Pero este método puede revelar fácilmente el número de registros.

La razón por la que el segundo método es ingenuo es porque implica más operaciones de E / S. Pero si tienes los recursos, no hay problema. Además, cuando el cifrado es muy fuerte como AES, el enfoque no es una preocupación. La única preocupación es el tiempo que se tomará para cifrar individualmente 1000 campos cuando se pueden acomodar en 50 líneas en un solo archivo y cifrar / descifrar mucho más rápido.

Se te da la opción. Ambos son fuertes y el segundo es un poco débil al revelar el número de registros. De lo contrario, solo los parámetros externos como el tiempo disponible para cifrar / descifrar cuentan en este caso.

    
respondido por el Andrew Anderson 15.07.2011 - 18:09
fuente
1

Las funciones de cifrado (cifrados de bloque) no pueden admitirse en una entrada de longitud arbitraria. Por lo tanto, incluso si cifra el archivo completo, la función de cifrado en sí misma lo dividirá en bloques y cifrará los bloques individualmente. Esto es similar al cifrado de registros individuales, excepto que el modo de operación dictará si / cómo estos bloques se mezclan entre sí.

Al cifrar cada registro individualmente, está haciendo algo similar al modo de operación del BCE. La diferencia es que usted mismo particionó los datos. Esto preserva la información sobre la estructura y cualquier ataque contra el BCE también se aplicará al enfoque de cifrado de registros individualmente (sin relleno aleatorio). Por ejemplo, si dos registros son iguales, podrá ver eso en el texto cifrado.

También al cifrar cada registro individualmente, no está llenando los bloques completamente, lo que será menos eficiente en términos de velocidad y almacenamiento.

Entonces, la respuesta corta es: es mucho mejor cifrar todo el archivo y usar un buen modo de operación para hacerlo (por ejemplo, CBC o XTS).

La única razón por la que consideraría no cifrar todo el archivo es si necesita descifrar los registros de manera selectiva de manera eficiente o reemplazar los registros. Cifrar todo el archivo significa recuperar un registro, debe descifrar todo el archivo hasta el registro en el que está interesado. Y cambiar cualquier parte de un registro individual significa volver a cifrar el resto de los datos. Si esto es una preocupación, hay formas estándar de hacer el cifrado sector por sector.

    
respondido por el PulpSpy 15.07.2011 - 18:04
fuente

Lea otras preguntas en las etiquetas