Que contient l’en-tête LUKS? Je sais, l'en-tête a une taille de 2 Mo. De plus, cryptsetup prend en charge "l'en-tête détaché", où l'en-tête peut être stocké dans un fichier séparé.
Ainsi, par exemple, je peux formater le périphérique luks et spécifier un en-tête détaché dans un fichier séparé:
dd if=/dev/zero of=LUKS-HEADER bs=1M count=2
cryptsetup luksFormat /dev/sdb1 --header LUKS-HEADER --align-payload=0
IIUC, cette opération de formatage écrit uniquement dans l'en-tête. La partition de disque n'est pas modifiée (j'ai vérifié avec md5sum). Alors pourquoi cryptsetyp luksFormat nécessite-t-il de spécifier le périphérique (/ dev/sdb1)?
Puis-je partager un en-tête pour plusieurs appareils Luks?
MISE À JOUR
Après une enquête plus approfondie, il me semble que les premiers 4096 B de l'en-tête contiennent les informations d'en-tête, qui sont imprimées avec cryptsetup luksDump
.
Ce qui est stocké dans la partie restante du fichier de 2 Mo est un mystère pour moi. Il semble être écrasé par des données aléatoires (je l'ai d'abord rempli de zéros, donc je peux voir la différence). De plus, le fichier de 2 Mo est absolument incompressible. Indication supplémentaire de données aléatoires/cryptées.
Quelqu'un peut-il expliquer avec autorité ce qui est contenu dans l'en-tête LUKS de 2 Mo?
Je pense que l'en-tête a une taille de 2 Mo en raison du séparateur anti-criminalistique: la clé principale chiffrée est divisée en plusieurs blocs pour améliorer la diffusion et s'assurer qu'elle peut être facilement effacée du disque. En particulier, l'effacement d'une seule bande rend l'ensemble mk crypté irrécupérable.
https://web.archive.org/web/20160517044339/http://tomb.dyne.org/Luks_on_disk_format.pdf
voici la spécification LUKS2: https://gitlab.com/cryptsetup/LUKS2-docs/blob/master/luks2_doc_wip.pdf
Je me demande comment on peut extraire la clé principale chiffrée ...
Pour votre information, je ne peux pas répondre "avec autorité" car je ne suis pas l'auteur/contributeur de LUKS/cryptsetup/dmcrypt mais un utilisateur. Mais mes réponses suivent,
Que contient l'en-tête LUKS?
De ici ,
La disposition de l'en-tête LUKS est,
+------------------------+----+----+----+----+----+----+----+----+-----------+
| Luks Partition Header | K0 | K1 | K2 | K3 | K4 | K5 | K6 | K7 | BULK DATA |
+------------------------+----+----+----+----+----+----+----+----+-----------+
Figure - 1
Où,
-------------------------------+-----------------------------
| Partition Header Contents | Output by luksDump |
-------------------------------+-----------------------------
| Magic Byte | LUKS |
-------------------------------+-----------------------------
| Luks version | 1 |
-------------------------------+-----------------------------
| Cipher Name | serpent |
-------------------------------+-----------------------------
| Cipher Mode | xts-plain64 |
-------------------------------+-----------------------------
| Hash Type | whirpool |
-------------------------------+-----------------------------
| Payload offset | 4096 |
-------------------------------+-----------------------------
| Master Key Bits | 512 |
-------------------------------+-----------------------------
| Master Key Digest | 8a 90 77 7e ... |
-------------------------------+-----------------------------
| Master Key Salt | ca f3 40 fc ... |
-------------------------------+-----------------------------
| Master Key Digest Iteration | 23250 |
-------------------------------+-----------------------------
| Partition UUID | 46927c7d-7f17-4312-... |
-------------------------------+-----------------------------
Table - 1
------------------------------+------------------------------
| Key Descriptors | Output by luksDump |
+-----------------------------+------------------------------
| Activation status | Enabled |
+-----------------------------+------------------------------
| Iteration | 146285 |
+-----------------------------+------------------------------
| Salt | 1e c1 94 24 36 4c 98.. |
+-----------------------------+------------------------------
| Key Material Offset | 8 |
+-----------------------------+------------------------------
| AF Stripes | 4000 |
------------------------------+------------------------------
Table - 2
Pour votre information, les informations d'en-tête de partition luks ci-dessus sont obtenues en exécutant la commande luksDump
et il s'agit de 4.0K
en taille.
Figure-1
après le Luks Partition header
, nous pouvons voir que les sections Key-slot commencent, suivies de 8 key-slots. Chaque emplacement de clé est approximatif 128kiB
en taille. Donc, pour 8 emplacements clés, nous obtenons 8 * 128 = 1024 KiB
qui est de 1 Mo ou 1048576 octets.Jusqu'à présent, nous obtenons 4096 octets de l'en-tête de partition et 131072 octets pour les emplacements de clés totalisant 1048576 + 4096 = 1052672 bytes
pour la configuration par défaut de luks. Pour la configuration la plus courante aes-xts-plain
environ 2 Mo.
Vous pouvez donc dire que la taille de l'en-tête dépend de divers éléments comme la taille de la clé principale, la taille de hachage, l'algorithme de chiffrement, l'algorithme de hachage, etc. Mais il est sûr de considérer 2 Mo comme en-tête luks.
En raison de l'alignement par défaut de 2 Mo, le début de la zone de données pour cryptsetup 1.3 et versions ultérieures est à 2 Mo, c'est-à-dire à 0x200000. Pour les versions plus anciennes, elle est à 0x101000, soit à 1'052'672 octets.
Vous pouvez voir dans la sortie suivante que les données en masse/les données chiffrées commencent à partir du décalage 00200000
[root@arif tmp]# hexdump -C /dev/sda99 -s 0X1FFFa0 | head
001fffa0 31 62 33 33 66 30 30 20 72 20 5f 5f 6b 63 72 63 |1b33f00 r __kcrc|
001fffb0 74 61 62 5f 64 6d 61 6d 5f 61 6c 6c 6f 63 5f 63 |tab_dmam_alloc_c|
001fffc0 6f 68 65 72 65 6e 74 0a 66 66 66 66 66 66 66 66 |oherent.ffffffff|
001fffd0 38 31 62 33 33 66 30 38 20 72 20 5f 5f 6b 63 72 |81b33f08 r __kcr|
001fffe0 63 74 61 62 5f 64 6d 61 6d 5f 61 6c 6c 6f 63 5f |ctab_dmam_alloc_|
001ffff0 6e 6f 6e 63 6f 68 65 72 65 6e 74 0a 66 66 66 66 |noncoherent.ffff|
00200000 89 8d 9f 65 56 c0 f9 07 65 d8 50 58 18 3a 67 31 |...eV...e.PX.:g1|
00200010 87 c7 7c 2e 4a 3e 40 78 08 10 2c e3 14 52 5f dc |..|.J>@x..,..R_.|
00200020 c9 7e 1e d3 a1 4d 4f fd 4c 6c f8 fb f2 bd 46 48 |.~...MO.Ll....FH|
00200030 3f e9 f8 4b ef f7 1c 82 be 7e 91 e0 78 35 aa bb |?..K.....~..x5..|
Pourquoi cryptsetyp luksFormat nécessite-t-il de spécifier le périphérique (/ dev/sdb1)?
Parce que,
cryptsetup
doit spécifier luks Device comme argument[arif@arif ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 931.5G 0 disk
├─sda1 8:1 0 1.9G 0 part /boot/efi
├─sda2 8:2 0 953M 0 part /boot
├─sda3 8:3 0 614.7G 0 part
│ └─luks-d84cd751-7f17-4312-ed89-4dfbc33dec61
253:0 0 614.7G 0 crypt
│ ├─vg1-root 253:2 0 139.7G 0 lvm /
│ ├─vg1-usr 253:3 0 186.3G 0 lvm
│ │ └─luks-03833316-8f82-4a78-0fc4-85ed66ffccd5
253:4 0 186.3G 0 crypt /usr
│ ├─vg1-home 253:5 0 186.3G 0 lvm
│ │ └─luks-65f51991-7437-460b-9a0b-e3851b32fdb4
253:8 0 186.3G 0 crypt /home
│ ├─vg1-var 253:6 0 93.1G 0 lvm
│ │ └─luks-d1b24b22-53eb-477f-8259-0a22846d3edc
253:9 0 93.1G 0 crypt /var
│ └─vg1-tmp 253:7 0 9.3G 0 lvm
│ └─luks-b69a98b8-e257-5ca7-80a4-21725a721f00
253:10 0 9.3G 0 crypt /tmp
├─sda4 8:4 0 14G 0 part
│ └─luks-9bbcad99-3532-4583-a428-c02b559fdf3c
253:1 0 14G 0 crypt [SWAP]
└─sda5 8:5 0 300.1G 0 part
└─storage
Donc, si vous voulez luksFormat
, vous devez mentionner une partition standard ou un périphérique luks existant.
Puis-je partager un en-tête pour plusieurs appareils Luks?
Pour autant que je sache, non, vous ne pouvez pas utiliser header
d'un appareil luks sur un autre appareil luks car la configuration (type de chiffrement, taille de clé, etc.) pourrait être différente (si la configuration est la même, je recommande fortement ne croyez pas que cela fonctionnerait).
Je pense avoir trouvé la réponse à votre question. L'en-tête est composé de l'en-tête lui-même et d'un espace pour les emplacements de clés. La raison pour laquelle cette section derrière l'en-tête est de 2 Mo est par défaut. Voici où j'ai trouvé la réponse: https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions
Regardez dans la section 2.4 sur cette page et à la fin de cette section, vous trouverez l'extrait ci-dessous.
"les numéros de secteur sont décalés de la longueur de l'en-tête et des emplacements de clé et il y a une perte de cette taille en capacité (1 Mo + 4096B pour les valeurs par défaut et 2 Mo pour le mode XTS non par défaut le plus couramment utilisé)"
J'espère que cela répond à votre question et que le site répertorié ci-dessus a reçu de nombreuses autres bonnes questions.
Tiré de https://www.lisenet.com/2013/luks-add-keys-backup-and-restore-volume-header/ , vous pouvez voir que le cryptsetup luksDump
La commande expliquera le contenu. Un en-tête doit pouvoir être utilisé contre n'importe quel nombre d'appareils.
# cryptsetup luksDump /dev/sdb2
LUKS header information for /dev/sdb2
Version: 1
Cipher name: aes
Cipher mode: cbc-essiv:sha256
Hash spec: sha1
Payload offset: 4096
MK bits: 256
MK digest: e5 88 07 f2 4b ce 79 21 85 34 f7 a6 e3 0b 6b b2 a7 b8 d5 a1
MK salt: 0c dd 95 3d 1e 30 1f 66 d4 5e 31 03 12 a0 61 29
e5 ef 34 8e 13 5d 80 76 8b 4a 0a c3 55 02 22 d3
MK iterations: 5750
UUID: e4971160-047b-49ce-8246-b63f1fb67db9
Key Slot 0: ENABLED
Iterations: 23233
Salt: ff bc fc 78 98 5d 35 50 97 76 37 b4 70 99 38 44
9f bd a1 b9 02 2d 4d 1d 18 b5 dc f6 4c a0 37 fc
Key material offset: 8
AF stripes: 4000
Key Slot 1: ENABLED
Iterations: 23956
Salt: 3a a0 06 83 d3 e0 ba da b0 5c e2 56 cb ed 72 69
76 9a 8a b8 e1 eb e6 90 44 b3 71 7a 2f 96 80 39
Key material offset: 264
AF stripes: 4000
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
Beaucoup de réponses ici ne fournissaient que des informations sur LUKS1 ( publié en 2004 ), alors j'ai pensé ajouter une référence à LUKS2 ( publié en 2017 ).
L'en-tête LUKS contient nécessairement des métadonnées non chiffrées ainsi que votre ou vos "emplacements de clés" chiffrés symétriquement contenant votre clé principale et les sels nécessaires pour déchiffrer les données sur votre volume LUKS.
Dans LUKS1, ces données comprenaient les champs suivants:
L'encodage et la taille exacts des champs de données ci-dessus sont décrits dans l'original LUKS On-Disk Format Specification écrit par Clemens Fruhwirth en janvier 2005.
L'en-tête de LUKS2 est très différent de LUKS1. La taille est beaucoup plus variable, les métadonnées sont stockées dans le format JSON plus extensible et le nombre d'emplacements de clés est variable.
Pour plus d'informations sur les données stockées dans l'en-tête LUKS2 et comment, consultez la Spécification du format sur disque LUKS2 publiée par Milan Broz en août 2018.