O formato LUKS tem vários slots principais, cada um pode conter a chave mestra criptografada usada para criptografia de dados. Essa chave mestra é criptografada usando outra chave que é derivada de sua frase secreta.
Usar hash_function(passphrase)
simples para gerar uma chave seria burro, já que hashes como sha1 podem ser calculados rapidamente (SHA-1 é um exemplo de um MAC , para autenticação de uma mensagem, não para ser usada como simples para uma senha).
Para criptografia de dados com base em uma senha, você quer que a função seja lenta para impedir ataques de força bruta. Para este propósito, PBKDF2 (função de derivação de chave baseada em senha) é usada (veja as respostas excelentes em esta questão Sec.SE para motivações e outros exemplos).
derivedKey = PBKDF2(hash_function, passphrase, salt, iterations, derivedKeyLen)
A função hash_ da minha instalação é sha1, como é mostrado em cryptsetup --help
:
Default compiled-in key and passphrase parameters:
Maximum keyfile size: 8192kB, Maximum interactive passphrase length 512 (characters)
Default PBKDF2 iteration time for LUKS: 1000 (ms)
Default compiled-in device cipher parameters:
loop-AES: aes, Key 256 bits
plain: aes-cbc-essiv:sha256, Key: 256 bits, Password hashing: ripemd160
LUKS1: aes-xts-plain64, Key: 256 bits, LUKS header hashing: sha1, RNG: /dev/urandom
O comprimento da chave derivada depende da codificação usada para criptografia de dados. O número de iterações depende da velocidade do processador.
Estes detalhes podem ser encontrados na página de manual do cryptsetup (pbkdf2 deve tocar uma campainha). Para outros detalhes de segurança, consulte as Perguntas frequentes do cryptsetup .