Estou tentando criar um volume criptografado de 10M de tamanho. Eu sei que isso é possível porque tenho túmulos com 10M de tamanho. Eu executei os seguintes comandos.
fallocate -l 10M container
cryptsetup -y -v luksFormat --progress-frequency 1 container
cryptsetup open --type luks container luksvol1
E recebo a seguinte mensagem de erro.
Requested offset is beyond real size of device container.
Mas meus comandos são bem-sucedidos se meu contêiner tiver 20 milhões de tamanho. Por que isso falha com 10M? 10M deve ser muito grande para manter um volume luks criptografado.
O formato de volume LUKS original, agora conhecido como LUKS1, costumava reservar 2 MiB para o cabeçalho de metadados (parâmetros de codificação, slots de chave etc.), deixando você com 8 MiB para os dados reais.
Mas com a introdução do LUKS2, que usa um formato de metadados diferente, o deslocamento de dados padrão agora é de 16 MiB . O problema é que,
cryptsetup luksFormat
na verdade, não verifica se o dispositivo é grande o suficiente, apenas escreve cegamente o cabeçalho.(Em ambas as versões de formato, a razão original para uma grande área de slot de chave é o uso de "striping anti-forense", ou seja, cada chave de 32 bytes é espalhada por vários setores. Mas, além disso, LUKS2 armazena uma parte de seus metadados usando JSON em vez de estruturas binárias compactadas, portanto, a área de metadados foi aumentada para dar conta da nova sobrecarga.)
Suas opções são:
inicialize o volume usando
luksFormat --type luks1
(que usará um deslocamento de 2 MiB);ou inicialize o volume LUKS com valores
--luks2-metadata-size
e diferentes--luks2-keyslots-size
. (Observação: não sei qual é o tamanho mínimo de segurança.)Ambas as versões do LUKS usam as mesmas cifras; a principal vantagem prática do LUKS2 é que ele suporta o Argon2 KDF enquanto o LUKS1 é limitado apenas ao PBKDF2.