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

9

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

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

Então, em outras palavras, quero ser perguntado durante a inicialização da frase secreta na qual o arquivo de chave em uma unidade externa está criptografada.

Eu vejo um script auxiliar /usr/share/initramfs-tools/hooks/cryptgnupg que pode ajudar a realizá-lo, mas não tenho ideia de como usá-lo.

Apenas para evitar confusões: Eu não estou pedindo uma maneira de adicionar uma chave adicional ao volume para desbloqueá-lo.

    
por gertvdijk 22.07.2013 / 21:35

1 resposta

5

Eu faço a mesma coisa, mas tenho medo de que a minha resposta não seja satisfatória, já que por várias razões eu 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-2 , um bastante complexo), eu simplesmente usei o que já está lá . E isso é obviamente dm-crypt/LUKS .

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 a ele com o LUKS (sinta-se à vontade para adicionar suas configurações de criptografia 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 chaves (512 bytes) e um keyfile.luks (2MB, que cryptsetup por algum motivo precisa escrever o cabeçalho LUKS de 192k). Como o Initramfs será comprimido de qualquer maneira, isso não é tão ruim (ainda menor que GnuPG ).

Agora você pode descriptografar o arquivo de chaves:

# 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 ele se quiser alterá-lo, então poderíamos ter inicializado o arquivo com zeros anteriormente).

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

Em Initramfs init , você poderia prosseguir para abrir o volume real do LUKS com ele (supondo que você tenha adicionado 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 múltiplas senhas para a chave, a cifra de sua escolha, etc. Sem mencionar um prompt de senha legal (principalmente regular) com várias tentativas.

    
por frostschutz 22.07.2013 / 22:19