Esta pergunta já foi feita antes: diferença entre passphrase e key file no LUKS . Há um comentário e uma 'resposta' que não responde à pergunta. Então, estou perguntando novamente.
Em essência
- Qual é a diferença entre um arquivo-chave e uma frase-senha?
- É simplesmente que uma senha deve ser inserida pelo usuário toda vez que o sistema tenta desbloquear o disco, mas ele obtém automaticamente o arquivo de chave sem a necessidade de interação do usuário?
- Como é possível ter vários slots de chave? Se um disco pode ser descriptografado com um arquivo de chave complexo OU uma frase-senha simples, qual é o sentido do arquivo de chave complexo? Certamente um ataque de força bruta chegaria à frase-senha simples rapidamente.
Em outras palavras, qual é o sentido de usar um arquivo de chave complexo, se o mesmo disco pode ser descriptografado com uma frase-senha simples?
Com LUKS, nenhuma. O arquivo de chave atua como a fonte de uma frase-senha e, a partir daí, ambas são processadas exatamente da mesma maneira.
(Pelo que me lembro, isso também é verdade para o TrueCrypt, embora o TC também tivesse a capacidade de misturar um arquivo de chave e uma senha, mas se você fornecesse apenas um ou outro, eles seriam intercambiáveis.)
O arquivo-chave ou frase-senha não é usado diretamente como a chave de criptografia de volume; ele age apenas como a chave de criptografia de slot de chave. Cada um desses slots de chave contém uma versão criptografada da chave de criptografia de volume (então, se houver 5 slots de chave, haverá 5 cópias da chave de volume).
Não simplifique, então. Uma frase-senha suficientemente longa não pode ser forçada brutamente em nenhum tempo razoável – muito mais se o mais novo Argon2 KDF for usado com LUKS2, embora se for uma frase- senha inteira , até mesmo o algoritmo PBKDF2 usado por LUKS1 ainda fornece um pouco de lentidão (embora não tanto).
Por exemplo, uma frase-senha básica de quatro palavras a uma taxa estimada de 5000 hashes/seg para Argon2 em uma única GPU ainda leva ~100 anos até que uma correspondência seja encontrada. Se você conhece alguém que tem 100 GPUs extras – adicione alguma pontuação, numerais, etc.
a) Economiza tempo na digitação da senha.
Como você não está inserindo manualmente o arquivo de chave, não há sentido em torná-lo "tão fraco quanto a frase-senha" – uma única operação KDF vai levar quase o mesmo tempo de qualquer maneira, então você pode muito bem gerar uma chave aleatória para consistência. Sim, o slot de chave baseado em frase-senha continua sendo o ponto fraco.
E b) Você não é obrigado a definir uma frase-senha simples. Você pode ter um volume LUKS que tenha apenas o arquivo de chave.
Por exemplo, o BitLocker funciona de forma semelhante, e há muitos sistemas em que o volume do sistema é protegido apenas com uma chave aleatória (duas chaves aleatórias, uma protegida pelo TPM do sistema, outra impressa como a chave de recuperação numérica), mas não uma frase-senha. Você pode ter uma configuração semelhante com LUKS, com systemd-cryptenroll ou manualmente.
(Também é comum ter o volume do sistema protegido com uma senha, onde você armazena arquivos de chave para desbloquear vários volumes de dados. Dessa forma, você pode alterar a senha apenas uma vez sem precisar repetir a alteração em 5 a 6 volumes diferentes. A senha do volume do sistema ainda é o ponto fraco em tal configuração, mas, novamente, não faz sentido tornar os arquivos de chave fracos deliberadamente, então é mais simples sempre gerar arquivos aleatórios com força total para consistência.)