É possível criptografar um disco rígido com um arquivo de chave em vez de uma senha?

É possível criptografar um disco rígido com um arquivo de chave em vez de uma senha?

Olhando para a criptografia do disco rígido. a solução parece ser dm-crypt com LUKS usando uma senha. Eu trabalho com vários discos rígidos independentes montados em um pool de discos para leitura. Nesse caso, tenho que digitar uma senha várias vezes.

Existe uma maneira de criptografar os discos rígidos com um arquivo de chave, talvez colocá-lo em uma unidade USB e conectá-lo quando necessário?

Responder1

Uma das melhores maneiras de fazer isso é usar um cartão inteligente com uma chave criptográfica para desbloquear as chaves dos seus dispositivos de bloco criptografados. Você só precisará inserir a senha (chamada de "PIN" pelas ferramentas, mas na verdade é uma senha) uma vez, após a qual ela será armazenada em cache. Isso tem a vantagem adicional de proteger os dados criptografados com algo que você tem (o próprio cartão inteligente, do qual a chave privada não pode ser extraída) e algo que você sabe (a senha).

Formate seu /etc/crypttabassim:

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

No Debian e derivados, o initramfs-tools notará o keyscript e copiará automaticamente todas as ferramentas e daemons necessários para acessar o cartão inteligente para o initramfs.

Informações sobre como configurar o cartão inteligente e criar (e criptografar) as chaves são encontradas em /usr/share/doc/cryptsetup/README.opensc.gz.

Você pode usar umYubikey 4ouYubikey NEOentre outros para esse fim.

Notas de implementação: Este recurso tem arestas e aparentemente não funciona imediatamente, então YMMV. A última vez que consegui isso, tive que adicionar os seguintes hacks:

  • Desative systemdporque ele tenta desastrosamente assumir todo o processo de configuração de dispositivos criptografados, /etc/crypttabmas não sabe nada sobre keyscripto que leva a uma grande FALHA. Felizmente, no Debian, você ainda pode cancelar o systemd.
  • Instale este script fixer-upper porque /etc/initramfs-tools/hooks/yubipino recurso integrado não instalou suporte suficiente para fazer com que o Yubikey pudesse ser usado no initramfs. Talvez seja necessário ajustar isso.

    #!/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 outro script para /etc/initramfs-tools/scripts/local-bottom/killpcscdlimpar:

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

Responder2

É possível simplesmente armazenar a senha do luks em um arquivo.

Eu uso isso no meu computador doméstico; O sistema de arquivos raiz reside em um volume luks regular que eu desbloqueio com minha senha na inicialização. Uma unidade adicional contém um volume luks com uma senha gerada.

Este volume adicional é desbloqueado por um arquivo de senha que reside no sistema de arquivos raiz criptografado. Ele é desbloqueado automaticamente durante a inicialização se o sistema de arquivos raiz estiver desbloqueado.

Meu /etc/crypttabfica assim:

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

O terceiro campo é o arquivo-chave, nonepara o sistema de arquivos raiz, mas /etc/crypt-data.keypara o sistema de arquivos de dados. /etc/crypt-data.keycontém a senha do luks:

Tm90IHJlYWxseSBteSBwYXNzd29yZC4K

Observe que uma nova linha ou qualquer outro espaço em branco será usado como parte da senha! Tome cuidado para gerar este arquivo sem uma nova linha final. Além disso, certifique-se de ter permissões estritas:

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

Você deve conseguir duplicar essa abordagem para vários volumes (com senhas distintas ou uma senha compartilhada, à sua escolha).

informação relacionada