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