Est-il possible de convertir LUKS2 en LUKS version 1 et par extension, modifiez l'utilisation de fonctionnalités qui bloqueraient une telle conversion?
Fedora 30 utilise Luks2 par défaut Cependant, j'ai couru dans une situation où j'ai besoin de coller avec Luks version 1. Spécifiquement, Relax-et-récupération (rear
) Ne pas supporter LUKS2 pour le moment .
Documentation mentionne que la conversion entre LUKS2 et LUKS1 est possible dans certaines conditions:
Formulaire de conversion en place LUKS1
Pour permettre un test facile et la transition vers le nouveau format LUKS2, une nouvelle commande convertie permet une conversion en place du format LUKS1 et, s'il n'y a pas d'options incompatibles, la conversion de LUKS2 au format LUKS1.
Remarque Cette commande ne peut être utilisée que sur certains périphériques LUKS1 (certaines tailles d'en-tête de périphérique ne sont pas prises en charge). Cette commande est dangereuse, ne l'exécutez jamais sans la sauvegarde de l'en-tête! Si quelque chose échoue au milieu de la conversion (erreur IO), l'en-tête est détruit. (Notez que la conversion nécessite le déplacement de la zone de données KeysLot sur un décalage différent.)
Pour convertir le format de l'en-tête sur place au format LUKS2, utilisez
$ cryptsetup Convert --Type Luks2Pour le convertir au format LUKS1, utilisez
$ cryptsetup Convert --Type Luks1Vous pouvez vérifier la version lumks avec la commande LuksDummp.
$ cryptsetup lucksdumpNotez que certaines fonctionnalités LUKS2 rendront l'en-tête incompatible avec Luks1 et la conversion seront rejetées (par exemple en utilisant New Argon2 PBKDF ou des extensions d'intégrité). Certains attributs mineurs peuvent être perdus dans la conversion.
Ce dernier point est un problème car il semble que cette fonctionnalité soit utilisée par défaut au moins sur 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
Conversion Luks1 en Luks2, puis retour à Luks1 fonctionne juste bien. Il commence avec Luks2 puis convertissant en Luks1 qui provoque des problèmes. Apparemment, cryptsetup convert
est incapable de convertir entre LUKS2 argon2i
clés et luks1 pbkdf2
clés.
Installer:
# truncate -s 100M luks1.img
# truncate -s 100M luks2.img
# cryptsetup luksFormat --type luks1 luks1.img
# cryptsetup luksFormat --type luks2 luks2.img
Test avec l'origine Luks1:
# cryptsetup convert luks1.img --type luks2
WARNING!
========
This operation will convert luks1.img to LUKS2 format.
Are you sure? (Type uppercase yes): YES
# cryptsetup convert luks1.img --type luks1
WARNING!
========
This operation will convert luks1.img to LUKS1 format.
Are you sure? (Type uppercase yes): YES
Nous avons Luks1 -> Luks2 -> Luks1 Travailler.
Test avec l'origine LUKS2:
# cryptsetup convert luks2.img --type luks1
WARNING!
========
This operation will convert luks2.img to LUKS1 format.
Are you sure? (Type uppercase yes): YES
Cannot convert to LUKS1 format - keyslot 0 is not LUKS1 compatible.
Même histoire pour l'initialement Luks1.img, si vous ajoutez une autre clé au format LUKS2.
Mais comme nous sommes capables d'ajouter des clés argon2i à l'origine Luks1, nous pouvons peut-être ajouter une clé PBKDF à l'origine LUKS2? Il y avait des problèmes étranges avec cela aussi, mais après un essai et une erreur, je me suis retrouvé avec:
# cryptsetup luksConvertKey --pbkdf=pbkdf2 luks2.img
Enter passphrase for keyslot to be converted: I have a sudden craving for butternut biscuits.
Et puis cela fonctionne (à condition que c'était la seule clé).
# cryptsetup convert luks2.img --type luks1
WARNING!
========
This operation will convert luks2.img to LUKS1 format.
Are you sure? (Type uppercase yes): YES
Mais ce n'est pas tout à fait la même chose que l'en-tête de Luks1 à l'origine (en particulier, Payload offset: 32768
se distingue). Maintenant, Luks1 a changé de compensation de données avant (à l'origine, ce n'était pas aligné sur alignement) afin de pouvoir gérer des compensations inhabituelles, mais vous ne savez jamais.
Luks2 a également d'autres caractéristiques qui rendent les conversions impossibles (sans recryptage à la mode ancienne) afin que la méthode décrite ici ne couvre que le cas le plus simple.