É possível criptografar um disco rígido com um arquivo de chave em vez de uma senha?
14
Examinando a criptografia do disco rígido. a solução go to 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?
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á digitar a senha (denominada "PIN" pelas ferramentas, mas é realmente uma senha) uma vez, após o que 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).
No Debian e derivativos, o initramfs-tools notará o código-chave e copiará todas as ferramentas e daemons necessários para acessar o cartão inteligente no initramfs automaticamente.
Informações sobre como configurar o cartão inteligente e criar (e criptografar) as chaves /usr/share/doc/cryptsetup/README.opensc.gz.
Notas de implementação : Esse recurso tem arestas e, aparentemente, não funciona imediatamente, portanto, o YMMV. A última vez que consegui, tive que adicionar os seguintes hacks:
Desative systemdporque tenta desastrosamente assumir todo o processo de configuração de dispositivos criptografados, /etc/crypttabmas não sabe nada sobre o keyscriptque leva a uma grande FALHA. Felizmente, no Debian, você ainda pode optar por não participar systemd.
Instale esse script fixer-upper /etc/initramfs-tools/hooks/yubipinporque o recurso interno não instalou suporte suficiente para permitir que o Yubikey possa ser usado no initramfs. Pode ser 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 /etc/initramfs-tools/scripts/local-bottom/killpcscdpara 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
Um incentivo muito bom para usar cartões inteligentes e elogios para conseguir isso, mas eu diria que um método específico de distribuição que envolve a alteração do sistema init e scripts de hackers de terceiros inseridos nos diretórios do sistema com caminhos ilegíveis não pode ser considerado uma resposta para como usar a pergunta dos arquivos de senha. Destaca a bagunça incrível desses softwares.
dbanet 25/09/16
@banban, concordo plenamente e espero que outra pessoa apareça e adicione uma resposta descrevendo como fazer isso de alguma outra maneira mais simples. Em seguida, o OP pode escolher o seu favorito.
Celada
dbanet e @Celada, exatamente meus pensamentos. Isso é muito complicado e, mesmo que eu consiga fazer isso, é proprietário, o que significa que outro fornecedor teria outro método. :(
Nithin
3
É possível simplesmente armazenar a senha do luks em um arquivo.
Eu uso isso no meu computador em casa; O sistema de arquivos raiz vive em um volume normal do luks que eu desbloqueio com a minha senha na inicialização. Uma unidade adicional contém um volume luks com uma senha gerada.
Esse volume adicional é desbloqueado por um arquivo de senha que fica no sistema de arquivos raiz criptografado. Ele é desbloqueado automaticamente durante a inicialização se o sistema de arquivos raiz estiver desbloqueado.
O terceiro campo é o arquivo de 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 esse arquivo sem seguir a nova linha. Além disso, verifique se ele possui permissões estritas:
É possível simplesmente armazenar a senha do luks em um arquivo.
Eu uso isso no meu computador em casa; O sistema de arquivos raiz vive em um volume normal do luks que eu desbloqueio com a minha senha na inicialização. Uma unidade adicional contém um volume luks com uma senha gerada.
Esse volume adicional é desbloqueado por um arquivo de senha que fica no sistema de arquivos raiz criptografado. Ele é desbloqueado automaticamente durante a inicialização se o sistema de arquivos raiz estiver desbloqueado.
Minha
/etc/crypttab
aparência é assim: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:Observe que uma nova linha ou qualquer outro espaço em branco será usado como parte da senha! Tome cuidado para gerar esse arquivo sem seguir a nova linha. Além disso, verifique se ele possui permissões estritas:
Você deve poder duplicar essa abordagem para vários volumes (com senhas distintas ou uma senha compartilhada, sua escolha).
fonte
/etc/crypttab
. Eu adicionei um pouco de texto extra para deixar isso mais claro.