¿Cómo funciona FDE (Full Disk Encryption) tan rápido?

13

Tengo curiosidad acerca de cómo funciona el cifrado de disco completo de Ubuntu bajo el capó. Aquí hay un ejemplo:

Considerando la siguiente cadena como todo el contenido del disco:

hello world

Después de aplicar algún tipo de método de cifrado, se vería algo así:
(He usado el cifrado César con un cambio de +1 para este ejemplo, por ejemplo, A → B; B → C ...)

ifmmp xpsme

Según tengo entendido, cuando la computadora está apagada, el contenido de la unidad sería la cadena de arriba. Pero cuando se vuelve a encender, Ubuntu necesita que su contenido vuelva de nuevo hello worldpara arrancar con éxito.

Lo que realmente no entiendo es que en el mundo real el contenido del disco es mucho más, y el algoritmo de cifrado es mucho más complejo, y me resulta difícil para la computadora cifrarlo / descifrarlo completamente en solo unos segundos (No lleva más tiempo arrancar o apagar).

¿Cómo es esto posible?

Hewbot
fuente

Respuestas:

10

¿Cómo funciona el cifrado AES / Rijndael en general?

Esta página tiene una guía divertida de A Stick Figure para el Advanced Encryption Standard (AES) que parece fácil de entender, aunque parece tener más de 50 imágenes, por ejemplo, estas dos:

ingrese la descripción de la imagen aquí

y

ingrese la descripción de la imagen aquí

Es demasiado para duplicarlo todo aquí, pero si tiene que tener una imagen todo en uno, es esta:

ingrese la descripción de la imagen aquí


O bien, hay una explicación más compacta en http://www.password-depot.com/know-how/blowfish_and_rijndael.htm

El método de cifrado de Rijndael se basa en reemplazar, cambiar y realizar operaciones xor en bytes. El método se ve así:

  • A partir de la clave de 128 bits, Rijndael genera 10 claves de 128 bits cada una.
  • Estas claves se colocan en matrices 4x4.
  • El texto plano también se divide en matrices 4x4 (128 bits cada una).
  • Cada uno de los elementos de texto sin formato de 128 bits se procesa en 10 rondas (10 rondas para claves de 128 bits, 12 para 192, 14 para 256).
  • Después de la décima ronda se genera el código.
  • Cada byte individual se sustituye en un cuadro S y se reemplaza por el recíproco en GF (2 8).
  • Luego se aplica una matriz de módulo 2 en cuanto a bits, seguida de una operación XOR con 63.
  • Las líneas de las matrices se ordenan cíclicamente.
  • Las columnas de la multiplicación de la matriz se intercambian en GF (2 8).
  • Las subclaves de cada ronda están sujetas a una operación XOR.

El nivel de seguridad de este método de cifrado aumenta si Rijndael se realiza varias veces con diferentes subclaves.


¿Cómo funciona Ubuntu Full Disk Encryption?

Yo creo que funciona mediante el cifrado de una partición con LUKS (configuración predeterminada con AES), y luego se pone algunos volúmenes en él con LVM (como /, intercambio) y descifra y montajes ellos en el arranque después de introducir una contraseña. Y hay una partición de arranque normal (no encriptada) que arranca lo suficiente como para pedir la frase de contraseña.

the_simple_computer's Guide to Full Disk Encryption with Ubuntu (Actualizado el 28 de junio de 2015) dice que se trata de cómo funciona el cifrado del instalador predeterminado y menciona que el arranque dual no funcionaría (al menos no fuera de la caja), la unidad debe usar MBR así que " si su computadora tiene UEFI, la distribución se instalará en el modo BIOS heredado para que no pueda usar el Arranque seguro " y " también le da un tamaño de intercambio igual al de la RAM de su sistema (a menudo innecesario) y usted no tengo elección sobre qué tipo de cifrado se utiliza " .


¿Qué tan rápido es el cifrado?

Si lo ejecuta cryptsetup benchmark, ejecutará pruebas y le informará sobre qué tan rápido toma el cifrado solo, observe las líneas aes-xts predeterminadas (actualmente):

#  Algorithm | Key |  Encryption |  Decryption
     aes-xts   256b    150.0 MiB/s    145.0 MiB/s

La velocidad de lectura promedio de un disco duro podría ser de 80-160 MB / s, por lo que no durará mucho más que una lectura normal, y es posible que los sectores de solo lectura ya hayan sido descifrados mientras aún espera el disco duro para leer más.

Un SSD posiblemente podría ser más rápido, tal vez 200-550MB / s, por lo que podría notarlo. Pero, las lecturas aleatorias podrían ser más lentas, y he leído que las velocidades de SSD pueden disminuir después del uso (¿tal vez cuando la unidad se llena por completo y tiene que comenzar a "borrar" sectores?)

¿Cómo puede la computadora cifrar / descifrar completamente toda la unidad en solo unos segundos (no toma más tiempo arrancar o apagar)?

No tiene que descifrar todo primero. El cifrado (LUKS) funciona en bloques de datos , puede descifrar aleatoriamente cualquier bloque y actúa como una capa entre los datos cifrados de la unidad y lo que ve el sistema de archivos.

Cuando el sistema de archivos quiere ver cualquier bloque de datos, LUKS descifra ese bloque primero y luego entrega los datos descifrados al sistema de archivos. Primero espera a que la unidad lea el bloque de datos (al igual que sin usar cifrado), y solo tiene un retraso adicional para el descifrado de ese bloque único (o pocos bloques) de datos , y si el descifrado es más rápido que la unidad puede leer, el descifrado podría finalizar antes de que la unidad lea el siguiente bloque de datos.

Entonces, al igual que un sistema de archivos normal no necesita leer todo el disco para leer un archivo, cuando se agrega el cifrado tampoco necesita leer todo el disco, y no hace las cosas mucho más lentas.

Los datos en el disco duro siempre están encriptados , por lo que no hay nada que hacer al apagar, excepto olvidar la clave.

Xen2050
fuente
@Hewbot He agregado información (en la parte inferior) sobre la velocidad de descifrado de archivos y bloques, ya que el título de su Q fue editado para agregar "¿tan rápido?" (¿el título sigue siendo lo que querías preguntar?)
Xen2050
3

Esto será un poco simplificado, pero intentaré pasar por el proceso de acceder a un archivo en un sistema de archivos encriptado.

Por ejemplo, digamos que al comienzo del sistema de archivos cifrados hay una tabla de archivos; Digamos que queremos leer /foo.bar. Entonces, lo primero que hacemos es leer el comienzo de la partición, descifrarla y buscar el archivo que queremos; Digamos que dice que el archivo comienza en 0x10000000 bytes. Entonces, para leer, comenzamos a leer desde el disco en esa ubicación y descifrarlo; Del mismo modo, para escribir, podemos cifrar los nuevos contenidos y escribirlos en esa nueva ubicación.

Esperemos que esto ayude a aclarar cualquier confusión en el proceso.

Nick Mertin
fuente
1
Creo que esta es la respuesta que realmente responde a la pregunta del OP: su idea errónea es que tiene que cifrar / descifrar por completo todo el disco, no solo los bits que se leen / escriben a medida que se usan.
SomeoneSomewhereSupportsMonica
2

El procesador utiliza un conjunto de instrucciones dedicado. Es posible por eso, AES-NI . Permite un cifrado y descifrado rápidos o puede decir que reduce la sobrecarga. Es rápido porque es una implementación de hardware, como se explica aquí .

Puede verificar los impactos en el rendimiento aquí y valen la pena para mayor seguridad.

shsh
fuente
1
Además, los datos en el disco solo se cifran / descifran según sea necesario; por ejemplo, en el arranque, sólo los scripts de inicio, información de usuario, DM / WE ejecutables, etc., están descifrados
Nick Mertin
Muchas CPU no tienen soporte AES, y el cifrado de Ubuntu todavía funciona en ellas ... incluso si lo hicieran, esto realmente no responde a la pregunta de cómo funciona el cifrado de Ubuntu
Xen2050
@shsh Entonces, si estuviera en una computadora realmente vieja, sería imposible usar FDE, porque no habría implementación de hardware. ¿Debo entender entonces que todo el disco está encriptado y desencriptado en el arranque y apagado?
Hewbot
@ MagikM18 Si es así, ¿cómo sabe el algoritmo dónde comenzar a descifrar en toda la "cadena"? Quiero decir, si abro un documento, ¿cómo sabe las "coordenadas" donde está?
Hewbot
@Hewbot de la misma manera que lo haría de todos modos; Básicamente, el cifrado es una capa entre el disco físico y el demonio del sistema de archivos. entonces, cuando solicita leer datos del disco, se lee y luego se descifra; así que al igual que en un fs regular, primero leerá la tabla de archivos, encontrará la posición inicial del archivo y luego leerá desde allí.
Nick Mertin
0

Las computadoras modernas pueden realizar miles de millones de operaciones por segundo, por lo que no me sorprende que el cifrado y el descifrado sean rápidos.

Así es como calificaría intuitivamente la rapidez con que las computadoras hacen las cosas:

  1. Hacer cálculos dentro de la memoria (especialmente memoria L1 y L2), extremadamente rápido
  2. Lectura desde el almacenamiento local, menos rápido (los discos de estado sólido son más rápidos que los discos duros)
  3. Lectura desde la red, incluso menos rápido.

El otro bit clave a entender es que el funcionamiento no necesita descifrar todo el disco duro para iniciar el sistema. Más bien, el sistema operativo sabe cómo descifrar solo las partes del disco duro que necesita sobre la marcha, y lo mismo ocurre con la escritura.

Intuitivamente, no me sorprende que el cifrado de disco completo no tenga un gran impacto en el rendimiento, ya que imagino que el cuello de botella es el disco.

Por supuesto, estas intuiciones no siempre coinciden con la realidad. Por ejemplo, en realidad, ha habido casos en los que el cifrado de disco completo ha causado un notable impacto en el rendimiento. Pero por lo general, estos se resuelven después de que los desarrolladores pasan por algunas rondas de optimizaciones de desarrollo.

Flimm
fuente
1
No puedo encontrar la manera de que esta respuesta sea posible. Solo copiar 1TB con USB 3.0 lleva algunos minutos, si se tiene que hacer un proceso intermedio (el descifrado), podría tomar minutos iniciar una computadora con FDE.
Hewbot
@Hewbot Edité mi respuesta para explicar que el descifrado ocurre sobre la marcha. El sistema operativo no necesita leer 1 TB de datos para comenzar a usar un disco cifrado de 1 TB.
Flimm