Como posso alterar a especificação de hash e o tempo de iter de um dispositivo LUKS existente do dm-crypt?
Claramente, posso passar as opções se criar um novo dispositivo, por exemplo, algo como isto:
sudo cryptsetup luksFormat --cipher aes-cbc-essiv:sha256 --key-size 256 --iter-time 2100 --hash sha512 /dev/loop0
Mas se o dispositivo já existe, como posso mudar por exemplo sha256
a sha1
ou alterar o tempo de iteração sem "destruir" o dispositivo. (Claramente, você teria que redigitar sua senha, pois um novo hash será gerado.)
hash-spec
é ou asiter-time
configurações mais especificamente.cryptsetup-reencrypt
. A lista de marcadores parece com o que você está tentando fazer comigo: "alterar parâmetros de criptografia arbitrários".Respostas:
Cada slot de chave possui seu próprio tempo de iteração. Se você deseja alterar o número de iterações, crie um novo slot com a mesma senha e um novo número de iterações e remova o slot antigo.
Eu acho que o algoritmo hash não pode ser configurado por slot, é sempre PBKDF2 com uma função hash escolhida globalmente.
As versões recentes do cryptsetup incluem uma ferramenta
cryptsetup-reencrypt
que pode alterar a chave de criptografia principal e todos os parâmetros, mas é considerado experimental (e reescreve o dispositivo inteiro, mesmo que isso não seja necessário para alterar apenas a função de derivação de chave baseada em senha) .fonte
Se tudo o que você deseja alterar é o hash, não há necessidade de criptografar novamente. Você ainda precisa criar um novo cabeçalho LUKS. Mesma cifra, mesma chave mestra, mesmo deslocamento, hash diferente.
Você pode tentar isso por si mesmo. Primeiro, configuramos um dispositivo LUKS com configurações padrão e péssimas contagens de iter:
Neste ponto, temos um dispositivo LUKS com os dados criptografados "Olá, mundo, sou LUKS". Em particular, é assim:
Como você pode ver, a iteração ruim conta, os hashes sha1 padrão.
Para mudar isso para contagens de iteração alta e hash sha512, sem precisar criptografar novamente, precisamos de um novo cabeçalho LUKS usando a mesma chave mestra, a mesma cifra e o mesmo deslocamento de carga útil.
Obtendo a chave mestra: (Aviso: este exemplo vaza sua chave mestra em um arquivo legível pelo mundo, na lista de processos e no histórico do seu shell. Para segurança, faça-o na RAM / em um Live CD / qualquer outra coisa)
Crie o novo cabeçalho LUKS usando esta chave: (falha é possível - faça um backup do seu cabeçalho antigo LUKS primeiro!)
E aqui está o que parece:
Agora nós temos. A mesma cifra, deslocamento [se eles diferem, você deve especificá-los juntamente com o luksFormat], novo hash e número adequado de iterações.
Mas o conteúdo ainda está aí?
Ai está.
fonte
cryptsetup-reencrypt --keep-key --hash sha512
faz a mesma coisa.