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

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

Investigando el cifrado del disco duro. la solución parece ser dm-crypt con LUKS usando una contraseña. Trabajo con varios discos duros independientes montados en un grupo de discos para lectura. En este caso, tengo que escribir una contraseña varias veces.

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

Respuesta1

Una de las mejores formas de hacerlo es utilizar una tarjeta inteligente con una clave criptográfica para desbloquear las claves de sus dispositivos de bloque cifrados. Sólo 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 propia tarjeta inteligente, de la cual no se puede extraer la clave privada) y algo que usted sabe (la frase de contraseña).

Formatea tu /etc/crypttabasí:

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

En Debian y derivados, initramfs-tools detectará el script de clave y copiará todas las herramientas y demonios necesarios para acceder a la tarjeta inteligente a initramfs automáticamente.

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

Puedes usar unYubikey 4oYubikey NEOentre otros para este fin.

Notas de implementación: Esta característica tiene aspectos irregulares y aparentemente no funciona de fábrica, así que YMMV. La última vez que lo logré con éxito, tuve que agregar los siguientes trucos:

  • Desactívelo systemdporque intenta desastrosamente hacerse cargo de todo el proceso de configuración de dispositivos cifrados, /etc/crypttabpero no sabe nada al respecto, keyscriptlo que conduce a un gran FALLO. Afortunadamente, en Debian aún puedes optar por no participar systemd.
  • Instale este script de reparación superior porque /etc/initramfs-tools/hooks/yubipinla función incorporada no instaló suficiente soporte para que Yubikey se pudiera utilizar desde initramfs. Es posible que necesites 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 para /etc/initramfs-tools/scripts/local-bottom/killpcscdlimpiar:

    #!/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
    

Respuesta2

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 luks normal que desbloqueo con mi contraseña al arrancar. Una unidad adicional contiene un volumen luks con una contraseña generada.

Este volumen adicional se desbloquea mediante un archivo de contraseña que se encuentra 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 clave, 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 una nueva línea o cualquier otro espacio en blanco se considerará parte de la contraseña. Tenga cuidado de generar este archivo sin una nueva línea al final. 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, su elección).

información relacionada