Como uso o dm-crypt (LUKS) com o GnuPG para usar dois fatores para o FDE?

9

Ao usar a criptografia de disco completo com o Ubuntu (ao contrário da criptografia homedir), o dm-crypt com LUKS é usado para criptografar o volume. No instalador (pelo menos na versão 12.04 alternativa), você pode escolher entre configurá-lo usando uma senha ou um arquivo de chave. Eu gostaria de usar uma combinação dos dois; também não, mas exige ambos.

Por quê? Porque isso aumenta a segurança (dois fatores); você precisará ter algo e saber algo para desbloqueá-lo. Quero colocar o arquivo de chave em um pequeno dispositivo de armazenamento removível (unidade flash USB) e conectá-lo apenas durante o tempo de inicialização. O resultado é que é necessário colocar a unidade flash correta e fornecer a senha correta para desbloquear a partição raiz.

Portanto, em outras palavras, quero que durante a inicialização seja solicitada a senha para a qual o arquivo de chave em uma unidade externa está criptografado.

Vejo um /usr/share/initramfs-tools/hooks/cryptgnupgscript auxiliar que pode ajudar a realizá-lo, mas não tenho idéia de como usá-lo.

Só para evitar confusão: Estou não pedindo uma maneira de adicionar um adicional chave para o volume para desbloqueá-lo.

gertvdijk
fonte
Eu mesmo encontrei uma parte da resposta lendo os documentos . Leia como usar isso no /usr/share/doc/cryptsetup/README.gnupg. Vou tentar encontrar algum tempo para alterá-lo para que ele use um arquivo de chave da mídia externa.
gertvdijk

Respostas:

5

Faço a mesma coisa, no entanto, receio que minha resposta não seja satisfatória, pois, por várias razões, fui com um Initramfs completamente personalizado .

Em vez de GnuPG, que é um binário extra que deve ser incluído no Initramfs (e, no caso de GnuPG-2um bastante complexo), simplesmente usei o que já existe. E isso é obviamente dm-crypt/LUKS.

Então, suponha que você tenha um keyfile. De preferência um com dados aleatórios.

# dd if=/dev/urandom of=keyfile count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000189802 s, 2.7 MB/s

Adicione criptografia para ele com o LUKS (fique à vontade para adicionar as configurações de cifra de sua escolha).

# truncate -s 2M keyfile.luks
# cryptsetup luksFormat keyfile --header keyfile.luks

WARNING!
========
This will overwrite data on keyfile.luks irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase: bananas
Verify passphrase: bananas

Agora você tem um arquivo de chave (512 bytes) e um arquivo de chave.luks (2 MB, que criptografam, por algum motivo, precisam gravar o cabeçalho LUKS 192k). Como o Initramfs será compactado de qualquer maneira, isso não é muito ruim (ainda menor que GnuPG).

Agora você pode descriptografar o arquivo de chave:

# cryptsetup luksOpen keyfile --header keyfile.luks lukskey
Enter passphrase for keyfile: bananas

E você tem 512 bytes de dados aleatórios em /dev/mapper/lukskey. (Você pode escrever para isso, se quiser alterá-lo, para que possamos inicializar o arquivo com zeros antes.)

# blockdev --getsize64 /dev/mapper/lukskey
512

No Initramfs, init você poderia então abrir o volume LUKS real com ele (assumindo que você adicionou a chave primeiro).

cryptsetup --key-file=/dev/mapper/lukskey luksOpen /dev/yourdisk luksyourdisk
cryptsetup luksClose lukskey # clean up

Essa abordagem torna o GnuPG totalmente supérfluo, além de você obter todas as vantagens do LUKS, como várias frases secretas para a chave, cifra de sua escolha, etc. Sem mencionar um prompt de senha agradável (geralmente regular) com várias tentativas.

frostschutz
fonte
2
Solução legal, mas como faço para integrar isso exatamente no meu initramfs? Você afirma que usa um initramfs completamente personalizado, mas isso não seria possível apenas usando um gancho?
gertvdijk
Certamente. Talvez mesmo sem um gancho, se você puder pensar em uma maneira de coagir o crypttab a encontrar e abrir a chave de alguma forma primeiro. Por exemplo, não precisa ser um arquivo, você pode criar uma partição separada para ele no pendrive. No entanto, como não estou fazendo dessa maneira, não posso dar uma resposta concreta para isso ... desculpe: - /
frostschutz
11
Não há problema algum - contornar o GnuPG e reutilizar o LUKS é certamente uma opção superior. Caso precise reescrever ganchos para a abordagem do GnuPG, é melhor reescrevê-lo sem usá-lo de qualquer maneira. E sim, eu sei que isso não precisa ser um arquivo.
gertvdijk
@gertvdijk se obter este curso, eu estaria interessado em sua resposta para referência futura
frostschutz