Primero, perdóneme si publico esta pregunta en la comunidad incorrecta. Siéntase libre de migrar esta publicación a la comunidad correcta si me equivoqué.
Soy bastante nuevo en el cifrado de todo el disco (pero no con el cifrado), especialmente con dm-crypt. Actualmente estoy ejecutando Arch Linux y he leído la documentación dedicada a esa distribución de GNU / Linux. Corríjame si me equivoco al suponer que hago en el siguiente resumen: Quiero comenzar mi conocimiento sobre bases sólidas. ;-)
Allí , los escritores / mantenedores de wiki nos aconsejan que preparemos el disco primero. es decir: eliminar / borrar todo el contenido anterior. Esto es necesario por 2 razones:
- (obviamente) evita que los datos antiguos que residen en el disco se recuperen;
- lo que es más importante, evita que el disco revele el patrón de uso.
Entendí el segundo punto, ya que: como el cifrado solo cifra los nuevos bloques de datos que escribimos, debemos borrar de forma segura los datos anteriores para evitar mostrarle a un posible atacante los límites del contenedor cifrado. Si hubiésemos escrito ceros en su lugar, los atacantes podrían darse cuenta y pensar así: "¡hey, miren! Aquí vemos basura, y allí, todo está lleno de ceros, sé dónde debo concentrarme en tratar de descifrar los datos".
También la misma documentación de Arch Linux explica el modo de cifrado CBC (Cipher Block Chaining). Según lo que entendí, este método usa sectores físicos y los divide por el tamaño del bloque que usa el algoritmo. Por ejemplo, si tomamos AES que usa un bloque de tamaño de cifrado de 128 bits y tenemos un sector físico de tamaño de 512 octetos (aparte del Formato avanzado), el cálculo para determinar el número de bloques sería 512 * 8 bits = 4096/128 = 32 bloques. Donde se utiliza un bloque del sector para el IV (vector de inicialización). Si se usa CBC con dmcrypt, esto significa que el mismo contenido sin cifrar aparecerá cifrado de manera diferente en dos ubicaciones diferentes en el disco. De esa manera, cuando preparamos el disco para el cifrado, podemos borrar el contenido del disco creando primero un contenedor cifrado y llenándolo con ceros. Si se usa CBC, los ceros aparecerán de manera diferente en el disco en cada ubicación. Si no se usa CBC, necesitamos usar urandom.
Después de algunas preguntas sobre IRC, parece que este es XTS que se usa de forma predeterminada con dm-crypt. De acuerdo con lo que entendí, XTS es solo una variante de CBC que permite dividir un tamaño de sector físico por el tamaño del bloque del algoritmo utilizado independientemente de su tamaño (por ejemplo: si un bloque de 512 sectores no era divisible por el 128 bits del algoritmo AES, XTS permitiría eso).
EDIT : xts no es realmente el valor predeterminado, esto depende de cómo se haya compilado dmcrypt en la distribución GNu / Linux. Para ver qué algoritmos y tamaños de clave se están utilizando, simplemente escriba
$ cryptsetup --help
[...]
Default compiled-in device cipher parameters:
loop-AES: aes, Key 256 bits
plain: aes-cbc-essiv:sha256, Key: 256 bits, Password hashing: ripemd160
LUKS1: aes-xts-plain64, Key: 256 bits, LUKS header hashing: sha256, RNG: /dev/urandom
Por lo tanto, antes de corregir la wiki de Arch Linux, quiero asegurarme de lo que realmente se usa detrás de dm-crypt: CBC o el método de encriptación anther. Debido a que se recomienda aquí nunca usar ceros con dm-crypt, pero esa razón es incorrecta ya que los datos no cifrados aparecen cifrados de manera diferente en dos ubicaciones de disco diferentes. Si no se usa CBC o una variante, tendré que corregir el supuesto descrito en la página wiki "Limpiar el disco de forma segura".
Además, Arno Wagner, el mantenedor oficial de preguntas frecuentes de dmcrypt, describe en el punto 2.19 , que usa ceros directamente en el disco puede tardar mucho tiempo y ese "uso de cryptsetup y un dispositivo dm-crypt simple con una clave aleatoria, es mucho más rápido y le brinda el mismo nivel de seguridad".
Luego agrega el siguiente comando para escribir: cryptsetup open --type plain -d /dev/urandom /dev/<block-device> to_be_wiped
, pero aún usa urandom y no ceros. No puedo entender por qué no usa ceros en su lugar y por qué usar urandom en un contenedor sería mucho más rápido que fuera del contenedor, directamente en el disco.
EDIT : Ok, Argo agregó una precisión en sus preguntas frecuentes. -d /dev/urandom
solo se usa como una contraseña aleatoria para el cifrado.
También, ya que necesito instalar el cifrado en 3 máquinas diferentes utilizando 3 tipos de dispositivos: un SSD nuevo, un SSD ya usado y un HDD estándar. Como los SSD usan flash, no sé cómo preparar el disco. La pregunta sigue presente con el nuevo SSD, ¿tengo que borrarlo primero con valores aleatorios? ¿Qué pasa con TRIM? ¿Es Linux lo suficientemente inteligente como para darse cuenta de que no tiene que usar TRIM ya que esto está debilitando el cifrado?
La ayuda es muy apreciada.