Eu tenho um disco contendo (apenas) um volume criptografado LUKS. Isso foi criado em uma unidade vazia sem tabela de partição usando cryptsetup v.1.6.1. Quando desbloqueado, posso verificar o tamanho do volume descriptografado, compará-lo com o disco inteiro e ver que a diferença é exatamente 2 MB. Quando faço backup do cabeçalho, por outro lado, usando:
cryptsetup luksHeaderBackup /dev/sda --header-backup-file <filename>
Recebo um arquivo com 30 kB a menos de 2 MB. Usando dd para despejar os primeiros 2 MB do disco e comparando-o com o cabeçalho de backup, vejo que faltam 30 KB no final e contém todos os 0s. Estranhamente, tenho backups de vários (outros) cabeçalhos LUKS usando cryptsetup 1.4.1 e 1.4.3, e todos eles têm exatamente 2 MB. Isso é consistente com a seção 6.2 do FAQ do cryptsetup , que diz que o tamanho do cabeçalho deve ser de 2 MB.
Alguém poderia me ajudar a entender o que são esses 30KB? (Gostaria de substituir o cabeçalho com dados aleatórios, pois o coloquei em um dispositivo separado e quero ter certeza de que sei o que estou fazendo.)
Também como uma questão mais geral, existe uma maneira mais fácil/automatizada, usando a saída do luksDump talvez, para dizer exatamente onde o cabeçalho está localizado em um disco? (Deslocamento e tamanho.) Eu li as perguntas frequentes do cryptsetup, mas o resultado certamente não desaparece.
E existe uma maneira melhor de substituir o cabeçalho do que usar dd?
cryptsetup luksHeaderRestore <file_with_random_data>
não funciona, porque o cryptsetup faz algumas verificações idiotas para ver se algum cabeçalho já presente corresponde ao tamanho da chave mestra e ao deslocamento.
Acontece que 30k é um espaço não utilizado, mas os dados do cabeçalho foram alinhados para 1 MB. Todos os 2 MB foram incluídos ao fazer backup com versões anteriores do cryptsetup, mas as versões posteriores o excluem.
Usando a saída payloadOffset de
cryptsetup luksDump
(um número de setores 512B), é possível ver o deslocamento onde o volume criptografado começa; para que você possa limpar manualmente até lá. Ou, desde o cryptsetup 1.6.4, você pode usarcryptsetup luksErase
para sobrescrever todos os slots de chave ativos. O cabeçalho visível restante com metadados é o primeiro 4 KB do disco, portanto, teria que ser apagado manualmente.[Agradecimentos a Milan, um dos desenvolvedores do cryptsetup, no cryptlab!]