É possível converter LUKS2 para LUKS versão 1 e, por extensão, alterar o uso de recursos que bloqueariam essa conversão?
O Fedora 30 usa o LUKS2 por padrão , no entanto, me deparei com uma situação em que preciso ficar com o LUKS versão 1. Especificamente, Relax-and-Recover( rear
) não suporta LUKS2 no momento .
A documentação menciona que a conversão entre LUKS2 e LUKS1 é possível sob certas condições:
Formulário de conversão no local LUKS1
Para permitir testes e transição fáceis para o novo formato LUKS2, há um novo comando convert que permite a conversão in-loco do formato LUKS1 e, se não houver opções incompatíveis, também a conversão de volta do formato LUKS2 para LUKS1.
Observe que este comando pode ser usado apenas em alguns dispositivos LUKS1 (alguns tamanhos de cabeçalho de dispositivo não são suportados). Este comando é perigoso, nunca o execute sem backup de cabeçalho! Se algo falhar no meio da conversão (erro de E/S), o cabeçalho será destruído. (Observe que a conversão requer a movimentação da área de dados do keylot para um deslocamento diferente.)
Para converter o cabeçalho no local para o formato LUKS2, use
$ cryptsetup convert --type luks2Para convertê-lo de volta para o formato LUKS1, use
$ cryptsetup convert --type luks1Você pode verificar a versão do LUKS com o comando luksDump.
$ cryptsetup luksDumpObserve que alguns recursos do LUKS2 tornarão o cabeçalho incompatível com o LUKS1 e a conversão será rejeitada (por exemplo, usando o novo Argon2 PBKDF ou extensões de integridade). Alguns atributos menores podem ser perdidos na conversão.
Esse último ponto é um problema, pois parece que esse recurso é usado por padrão pelo menos no Fedora.
$ sudo cryptsetup convert /dev/sda3 --type luks1
WARNING!
========
This operation will convert /dev/sda3 to LUKS1 format.
Are you sure? (Type uppercase yes): YES
Cannot convert to LUKS1 format - keyslot 0 is not LUKS1 compatible.
$ sudo cryptsetup luksDump /dev/sda3
LUKS header information
Version: 2
Epoch: 3
Metadata area: 16384 [bytes]
Keyslots area: 16744448 [bytes]
UUID: 974b19f8-021a-46b6-a089-a46e06e6e746
Label: (no label)
Subsystem: (no subsystem)
Flags: (no flags)
Data segments:
0: crypt
offset: 16777216 [bytes]
length: (whole device)
cipher: aes-xts-plain64
sector: 512 [bytes]
Keyslots:
0: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 4
Memory: 973984
Threads: 4
Salt: af 33 7e 3b 6c bb 55 dc e3 dc 2b 07 c5 9e c3 6d
f2 c9 08 be 2f 1d 8b 78 8a 33 65 90 41 e3 05 10
AF stripes: 4000
AF hash: sha256
Area offset:32768 [bytes]
Area length:258048 [bytes]
Digest ID: 0
Tokens:
Digests:
0: pbkdf2
Hash: sha256
Iterations: 100361
Salt: d9 30 b6 7f 60 d0 e0 19 39 f6 a2 38 ae 22 88 43
1e 5c 74 75 e6 b5 dd db a9 e7 29 1a 74 64 9c 0f
Digest: ae 06 29 5f 71 49 bd c8 75 de 53 e8 95 94 d3 38
57 43 5f 0e 1e ac 6d 59 fb 34 a3 97 e4 5a 94 0c
Converter LUKS1 para LUKS2 e depois voltar para LUKS1 funciona bem. Está começando com LUKS2 e depois convertendo para LUKS1 que causa problemas. Aparentemente,
cryptsetup convert
não é possível converter entreargon2i
chaves LUKS2 epbkdf2
chaves LUKS1.Configurar:
Teste com originalmente luks1:
Temos LUKS1 -> LUKS2 -> LUKS1 funcionando.
Teste com originalmente luks2:
Mesma história para o luks1.img original, se você adicionar outra chave enquanto estiver no formato LUKS2.
Mas como podemos adicionar chaves argon2i ao luks1 originalmente, talvez possamos adicionar a chave pbkdf ao luks2 originalmente? Houve alguns problemas estranhos com isso também, mas depois de algumas tentativas e erros, acabei com:
E então funciona (desde que seja a única chave).
Mas não é exatamente o mesmo que o cabeçalho LUKS1 originalmente (em particular,
Payload offset: 32768
se destaca). Agora, o LUKS1 alterou seu deslocamento de dados antes (originalmente não estava alinhado com o MiB), então o software de terceiros deve ser capaz de lidar com deslocamentos incomuns, mas nunca se sabe.O LUKS2 também possui outros recursos que tornam as conversões impossíveis (sem a recriptografia antiquada), portanto, o método descrito aqui cobre apenas o caso mais simples.