¿Es posible cifrar un disco duro con un archivo de clave en lugar de una contraseña?

14

Buscando en el cifrado del disco duro. La solución go to parece ser dm-crypt con LUKS usando una contraseña. Trabajo con múltiples discos duros independientes montados en un conjunto de discos para leer. En este caso, tengo que escribir una contraseña varias veces.

¿Hay alguna manera de encriptar los discos duros con un archivo de clave, tal vez ponerlo en una unidad USB y simplemente enchufarlo cuando sea necesario?

Nithin
fuente

Respuestas:

11

Una de las mejores maneras de hacer esto es usar una tarjeta inteligente con una clave criptográfica para desbloquear las claves de sus dispositivos de bloque encriptados. Solo necesitará ingresar la frase de contraseña (llamada "PIN" por las herramientas, pero en realidad es una frase de contraseña) una vez, después de lo cual se almacenará en caché. Esto tiene la ventaja adicional de proteger los datos cifrados con algo que usted tiene (la tarjeta inteligente en sí, de la cual no se puede extraer la clave privada) y algo que usted sabe (la frase de contraseña).

Formatea tu /etc/crypttabcomo este:

mapper-name /dev/disk/raw-device /var/lib/filename-containing-encrypted-key \
    luks,keyscript=/lib/cryptsetup/scripts/decrypt_opensc

En Debian y sus derivados, las herramientas initramfs notarán el script y copiarán todas las herramientas y demonios necesarios para acceder a la tarjeta inteligente a initramfs automáticamente.

Encontrará información sobre cómo configurar la tarjeta inteligente y crear (y cifrar) las claves /usr/share/doc/cryptsetup/README.opensc.gz.

Puede usar un Yubikey 4 o Yubikey NEO entre otros para este propósito.

Notas de implementación : esta característica tiene bordes ásperos y aparentemente no funciona de manera inmediata, por lo que YMMV. La última vez que lo logré con éxito, tuve que agregar los siguientes hacks:

  • Deshabilítelo systemdporque trata desastrosamente de hacerse cargo de todo el proceso de configuración de dispositivos encriptados, /etc/crypttabpero no sabe nada sobre lo keyscriptque conduce a un gran FALLO. Afortunadamente, en Debian, todavía puede optar por no participar systemd.
  • Instale este script superior de reparador /etc/initramfs-tools/hooks/yubipinporque la función incorporada no instaló suficiente soporte para que Yubikey pueda utilizarse desde initramfs. Es posible que deba ajustar esto.

    #!/bin/sh
    
    PREREQ=cryptroot
    
    prereqs()
    {
        echo "$PREREQ"
    }
    
    case $1 in
    prereqs)
        prereqs
        exit 0
        ;;
    esac
    
    # /scripts/local-top/cryptopensc calls pcscd with the wrong path
    ln -s ../usr/sbin/pcscd ${DESTDIR}/sbin/pcscd
    mkdir -p "${DESTDIR}/usr/lib/x86_64-linux-gnu"
    # opensc-tool wants this dynamically, copy_exec doesn't know that
    cp -pL /usr/lib/x86_64-linux-gnu/libpcsclite.so.1 "${DESTDIR}/usr/lib/x86_64-linux-gnu/libpcsclite.so.1"
    mkdir -p "${DESTDIR}/lib/x86_64-linux-gnu"
    # without this, pcscd aborts with a pthread_cancel error
    cp -pL /lib/x86_64-linux-gnu/libgcc_s.so.1 "${DESTDIR}/lib/x86_64-linux-gnu/libgcc_s.so.1"
    # this gets copied as a dangling symlink, fix it
    rm "${DESTDIR}/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist"
    cp -pL /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist "${DESTDIR}/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist"
    # pcscd needs this to open the reader once it has found it
    cp -pL /lib/x86_64-linux-gnu/libusb-1.0.so.0 "${DESTDIR}/lib/x86_64-linux-gnu/libusb-1.0.so.0"
    
  • Instale otro script /etc/initramfs-tools/scripts/local-bottom/killpcscdpara limpiar:

    #!/bin/sh
    
    set -e
    
    PREREQ=cryptopensc
    
    prereqs()
    {
        echo "$PREREQ"
    }
    
    case $1 in
        prereqs)
            prereqs
            exit 0
            ;;
    esac
    
    # because cryptopensc does not do it properly
    killall pcscd
    
Celada
fuente
1
Muy buen incentivo para usar tarjetas inteligentes y felicitaciones para lograr eso, pero diría que un método específico de distribución que implica cambiar el sistema de inicio y los scripts de pirateo de terceros introducidos en directorios del sistema con rutas ilegibles no puede considerarse como una respuesta a cómo para usar la pregunta de los archivos de contraseña. Destaca el desorden increíble que es este software, aunque.
dbanet
@dbanet, estoy totalmente de acuerdo y espero que alguien más venga y agregue una respuesta que describa cómo hacer esto de otra manera más simple. Entonces el OP puede elegir su favorito.
Celada
dbanet y @Celada, exactamente mis pensamientos. Esto es demasiado complicado e incluso si logro hacerlo, es propietario, lo que significa que otro proveedor tendría otro método. :(
Nithin
3

Es posible simplemente almacenar la contraseña de luks en un archivo.

Lo uso en la computadora de mi casa; El sistema de archivos raíz vive en un volumen de luks regular que desbloqueo con mi frase de contraseña en el arranque. Una unidad adicional contiene un volumen de luks con una contraseña generada.

Este volumen adicional se desbloquea mediante un archivo de contraseña que vive en el sistema de archivos raíz cifrado. Se desbloquea automáticamente durante el arranque si el sistema de archivos raíz está desbloqueado.

Mi /etc/crypttabaspecto es este:

crypt-root UUID=c5a2cf25-0aae-457e-874f-fca7ea3d5742 none luks
crypt-data UUID=96d79323-246d-49e0-9149-ec3a4cfc1c1e /etc/crypt-data.key luks

El tercer campo es el archivo de claves, nonepara el sistema de archivos raíz, pero /etc/crypt-data.keypara el sistema de archivos de datos. /etc/crypt-data.keycontiene la contraseña de luks:

Tm90IHJlYWxseSBteSBwYXNzd29yZC4K

Tenga en cuenta que se tomará una nueva línea o cualquier otro espacio en blanco como parte de la contraseña. Tenga cuidado de generar este archivo sin seguir la nueva línea. Además, asegúrese de que tenga permisos estrictos:

-rw------- 1 root root 59 Sep 14 23:57 /etc/crypt-data.key

Debería poder duplicar este enfoque para múltiples volúmenes (ya sea con contraseñas distintas o una contraseña compartida, a su elección).

marcelm
fuente
¿también puede mencionar cómo configurar LUKS para usar el archivo de claves en lugar de la contraseña?
Nithin
@Nithin El archivo de claves es el tercer campo en mi ejemplo /etc/crypttab. Agregué un poco de texto extra para aclararlo.
marcelm