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

14

Analisando a criptografia do disco rígido. O ir para 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 eu criptografar os discos rígidos com um arquivo de chave, talvez colocá-lo em um drive USB e apenas conectá-lo quando necessário?

    
por Nithin 25.09.2016 / 12:08

2 respostas

11

Uma das melhores maneiras de fazer isso é usar um cartão inteligente com uma chave criptografada para desbloquear as chaves dos seus dispositivos de bloco criptografados. Você só precisará digitar a senha (chamada de "PIN" pelas ferramentas, mas é realmente uma frase secreta) 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 cartão inteligente em si, do qual a chave privada não pode ser extraída) e algo que você conhece (a frase secreta).

Formate seu /etc/crypttab assim:

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 irá notar o keycript e copiar todas as ferramentas e daemons necessários para acessar o smart card no initramfs automaticamente.

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 um Yubikey 4 ou Yubikey NEO entre outros para este propósito.

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

  • Desative systemd porque ele desastrosamente tenta assumir todo o processo de configuração de dispositivos criptografados a partir de /etc/crypttab , mas não sabe nada sobre keyscript , o que leva a uma grande FALHA. Felizmente, no Debian, você ainda pode optar por sair do systemd .
  • Instale este script de fixador superior como /etc/initramfs-tools/hooks/yubipin porque o recurso interno não instalou suporte suficiente para obter o Yubikey a ser utilizável do initramfs. Você pode precisar 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 como /etc/initramfs-tools/scripts/local-bottom/killpcscd para limpar:

    #!/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
    
por 25.09.2016 / 13:59
3

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

Eu uso isso no meu computador de casa; O sistema de arquivos raiz vive em um volume luks regular que eu desbloqueio com a minha senha no boot. Uma unidade adicional contém um volume luks com uma senha gerada.

Esse 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/crypttab é 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 de chave, none para o sistema de arquivos raiz, mas /etc/crypt-data.key para o sistema de arquivos de dados. /etc/crypt-data.key contém a senha do luks:

Tm90IHJlYWxseSBteSBwYXNzd29yZC4K

Note que uma nova linha ou qualquer outro espaço em branco será usado como parte da senha! Tome cuidado para gerar este arquivo sem arrastar a nova linha. Além disso, garanta que ele tenha permissões restritas:

-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).

    
por 25.09.2016 / 22:46