¿Cómo funciona técnicamente la autenticación previa al arranque con cifrado de disco?

¿Cómo funciona técnicamente la autenticación previa al arranque con cifrado de disco?

Estoy buscando una solución para cifrar completamente mi unidad SSD de arranque dual (aún es nueva y está vacía, y quiero configurar el cifrado antes de ponerle algo).

Si bien hay mucho caos en la web con respecto a esa pregunta, parece que TrueCrypt podría hacer esto, aunque es posible que necesite su cargador de arranque en un disco de arranque adicional. Por lo que estoy leyendo, algunas herramientas de Linux (incluidas algunas GRUB2 modificadas) también podrían hacer eso.

Sin embargo, tengo mis dudas, y ningún artículo que leí fue lo suficientemente profundo como para responder una pregunta básica: si todo el disco está cifrado y alguna herramienta previa al arranque le pide al usuario una clave para descifrarlo, ¿no es así? ¿Significa que esta herramienta debe ejecutarse en el sistema operativo que se va a iniciar? En otras palabras, ¿existen herramientas que dejan al sistema operativo sin darse cuenta de que los discos que ve están realmente cifrados?

Si no existe tal herramienta, ¿no significa eso que la herramienta de descifrado tiene que pasar de alguna manera información de descifrado al sistema operativo al arrancar? Me imagino que esto sería difícil de hacer en varias plataformas.

Respuesta1

Si todo el disco está cifrado y alguna herramienta previa al arranque le pide al usuario una clave para descifrarlo, ¿no significa eso que esta herramienta debe ejecutarse en el sistema operativo que se va a iniciar?

Sí, más o menos.Cifrado de disco completo basado en hardwarehace esto: el cifrado lo maneja completamente el dispositivo (disco duro/flash) o posiblemente en un controlador a lo largo de la cadena que conduce a los dispositivos físicos, y no es "visible" para el sistema operativo.
Con esto, el sistema operativo realiza E/S exactamente como lo haría si se tratara de un dispositivo simple y sin cifrar, la magia ocurre en el hardware (y/o firmware, "debajo" del sistema operativo en cualquier caso).

Si no existe tal herramienta, ¿no significa eso que la herramienta de descifrado tiene que pasar de alguna manera información de descifrado al sistema operativo al arrancar?

De hecho, tendría que haber alguna forma de transferencia de información, si el cifrado no se puede realizar "debajo" del sistema operativo (ya sea como se indicó anteriormente o posiblemente usando técnicas de virtualización, pero entonces tiene dos (o más) sistemas operativos ejecutándose). Y sí, eso significa que el sistema operativo cruzado es difícil.
También necesitará que el código boostrap (al menos el gestor de arranque) no esté cifrado si no tiene asistencia de hardware/firmware.

La Wikipediacifrado de discoEl artículo tiene más información sobre esto.

Respuesta2

Si tiene soporte de hardware (o más precisamente firmware, es decir, BIOS) para unidades cifradas, puede cifrar el disco completo con el firmware. Hacer eso tiene desventajas: no hay muchas computadoras que admitan el cifrado de disco y lo vincula a un firmware en particular (o peor aún, si su computadora tiene un TPM y la clave de cifrado está en un TPM, lo vincula a esta placa base en particular, a menos que haya hecho una copia de seguridad de la clave de cifrado de almacenamiento).

Si el sistema operativo realiza el cifrado, entonces tiene que haber un pequeño espacio en el disco que no esté cifrado, donde se almacenan las partes iniciales del sistema operativo. Una configuración común con Linux es tener una /bootpartición de texto sin formato separada y cifrar todas las demás particiones. "Cifrado de disco completo" es un nombre poco apropiado: normalmente se utiliza para referirse a "cifrado de volumen completo", donde un volumen suele ser una partición en lugar de un disco. El cifrado de disco completo se produce cuando no se cifran todos los archivos (o al menos un árbol de directorios) por separado.

En Linux, la herramienta estándar para el cifrado de disco completo esdmcrypt. Está disponible en todas las distribuciones principales y está integrado en muchos instaladores.

Respuesta3

Sí, con Grub2 la /bootpartición se puede cifrar mediante LUK:

  • /bootcomo una carpeta /en una partición cifrada LUKs
  • /booten un LUK cifrado en una partición
  • Y así sucesivamente, ya que Linux te permite usar cualquier lista de bloqueo no ordenada como dispositivo y esa puede ser la raíz (initramfs es muy complejo de configurar para dicha lista de bloqueo no ordenada, pero se puede hacer, es una forma paranoica)

También probé la forma paranoica de cifrar /boot(cuando es una partición) con más de una capa:

  1. /dev/sda5como la única partición lógica en el disco (MBR con solo dos particiones extendidas /booty /)
  2. Sobre /dev/sda5puse el nivel 1 de LUK, asignado a/dev/mapper/level_0001
  3. Sobre /dev/mapper/level_0001puse LUKs nivel 2, asignado a/dev/mapper/level_0002
  4. Sobre /dev/mapper/level_0002puse el nivel 3 de LUK, asignado a/dev/mapper/level_0003
  5. Y así sucesivamente, /dev/mapper/level_####puse el nivel de LUK ####+1, asignado a/dev/mapper/level_####+1
  6. Sobre /dev/mapper/level_3436puse el nivel 3437 de LUK, asignado a/dev/mapper/level_3436
  7. Sobre /dev/mapper/level_3437puse un Ext4, montado como/boot
  8. Luego /bootinstalo Grub2 después de ejecutarecho GRUB_CRYPTODISK_ENABLE=y >> /etc/default/grub
  9. Lo /dev/sda6puse /con un solo nivel de LUK.

En el momento del arranque me pide 3437 contraseñas diferentes, uso más de 32 caracteres en cada una.

Fue solo una prueba de concepto, el tiempo de arranque es horrible.

Pero si hago lo mismo /, la velocidad de lectura/escritura del sistema también es horrible, pero al menos Linux funciona. También probé con más de diez mil niveles; funciona parcialmente, la lectura/escritura baja a 10 KB/s (sí, realmente horrible) en mi CPU, el arranque tarda un día completo y las aplicaciones tienden a fallar mucho debido a los tiempos de espera del disco al acceder en línea (navegar, etc.) .

Por lo tanto, es aceptable poner tres o cuatro niveles de LUK, también diez, depende mucho de su CPU y para qué usa CPU versus DISCO, renderizado 3D versus enorme codificación de datos, etc.

PD: También puede usar diferentes funciones hash y algoritmos en cada nivel de LUK y también puede usarlos --iter-time=#para aumentar el tiempo de montaje (advertencia: en el prearranque de Grub2, el tiempo de montaje es tres o cuatro veces mayor, usando un valor de alrededor de diez mil causas cerca de treinta segundos en el prearranque).

información relacionada