¿Cómo uso dm-crypt (LUKS) con GnuPG para usar dos factores para FDE?

9

Cuando se usa el cifrado de disco completo con Ubuntu (en oposición al cifrado homedir), se usa dm-crypt con LUKS para cifrar el volumen. En el instalador (al menos en 12.04 alternativo) puede elegir entre configurarlo utilizando una frase de contraseña o un archivo de claves. Me gustaría usar una combinación de los dos; tampoco, pero requieren ambos.

¿Por qué? Porque esto mejora la seguridad (dos factores); necesitarás tener algo y necesitas saber algo para desbloquearlo. Luego, quiero colocar el archivo de claves en un pequeño dispositivo de almacenamiento extraíble (unidad flash USB) y solo enchufarlo durante el tiempo de arranque. El resultado debería ser que es necesario colocar la unidad flash correcta y proporcionar la frase de contraseña correcta para desbloquear la partición raíz.

En otras palabras, quiero que me pregunten durante el arranque la frase de contraseña a la que se cifra el archivo de clave en una unidad externa.

Veo un /usr/share/initramfs-tools/hooks/cryptgnupgscript de ayuda que puede ayudar a lograrlo, pero no tengo idea de cómo usarlo.

Sólo para evitar confusiones: estoy no pidiendo una manera de agregar un adicional clave para el volumen para desbloquearlo.

gertvdijk
fuente
He encontrado una parte de la respuesta yo mismo ... leyendo los documentos . Lea sobre cómo usar esto en /usr/share/doc/cryptsetup/README.gnupg. Trataré de encontrar algo de tiempo para cambiarlo para que use un archivo de claves de medios externos.
gertvdijk

Respuestas:

5

Hago lo mismo, sin embargo, me temo que mi respuesta no será satisfactoria, ya que por varias razones elegí un Initramfs completamente personalizado .

En lugar de GnuPG, que es un binario adicional que debe incluirse en Initramfs (y en el caso de GnuPG-2uno bastante complejo), simplemente utilicé lo que ya está allí. Y eso es obviamente dm-crypt/LUKS.

Supongamos que tienes un keyfile. Preferiblemente uno con datos aleatorios.

# dd if=/dev/urandom of=keyfile count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000189802 s, 2.7 MB/s

Agregue cifrado con LUKS (no dude en agregar la configuración de cifrado que prefiera).

# truncate -s 2M keyfile.luks
# cryptsetup luksFormat keyfile --header keyfile.luks

WARNING!
========
This will overwrite data on keyfile.luks irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase: bananas
Verify passphrase: bananas

Ahora tiene un archivo de claves (512 bytes) y un archivo de claves. Dado que Initramfs se comprimirá de todos modos, eso no es tan malo (aún más pequeño que GnuPG).

Ahora puede descifrar el archivo de claves:

# cryptsetup luksOpen keyfile --header keyfile.luks lukskey
Enter passphrase for keyfile: bananas

Y tiene 512 bytes de datos aleatorios en /dev/mapper/lukskey. (Puede escribirle si desea cambiarlo, por lo que podríamos haber inicializado el archivo con ceros antes).

# blockdev --getsize64 /dev/mapper/lukskey
512

En Initramfs init , puede abrir el volumen real de LUKS con él (suponiendo que haya agregado la clave primero).

cryptsetup --key-file=/dev/mapper/lukskey luksOpen /dev/yourdisk luksyourdisk
cryptsetup luksClose lukskey # clean up

Este enfoque hace que GnuPG sea completamente superfluo, además de que obtienes todas las ventajas de LUKS, como múltiples frases de contraseña para la clave, el cifrado de tu elección, etc. Sin mencionar un buen aviso de contraseña (en su mayoría regular) con múltiples intentos.

Frostschutz
fuente
2
Solución genial, pero ¿cómo integro esto exactamente en mi initramfs? Usted declara que usa un initramfs completamente personalizado, pero ¿no sería esto posible simplemente usando un gancho?
gertvdijk
Ciertamente. Tal vez incluso sin un gancho si puede pensar en una forma de obligar a crypttab a encontrar y abrir la clave de alguna manera primero. Por ejemplo, no tiene que ser un archivo, puede hacer una partición separada para él en la memoria USB. Sin embargo, como no estoy haciendo eso, no puedo dar una respuesta concreta ... lo siento: - /
frostschutz
1
No hay ningún problema: eludir GnuPG y reutilizar LUKS es sin duda una opción superior. En caso de que necesite reescribir ganchos para el enfoque GnuPG, será mejor reescribirlo sin usarlo de todos modos. Y sí, soy consciente de que esto no tiene que ser un archivo.
gertvdijk
@gertvdijk si usted pone esto en marcha, me interesaría su respuesta para referencia futura
frostschutz