供您参考,我无法回答“权威性”,因为我不是 LUKS/cryptsetup/dmcrypt 的作者/贡献者,而是用户。但我的答案如下,
LUKS 标头包含什么?
根据The cryptsetup FAQ LUKS 标头的布局是:
+------------------------+----+----+----+----+----+----+----+----+-----------+
| Luks Partition Header | K0 | K1 | K2 | K3 | K4 | K5 | K6 | K7 | BULK DATA |
+------------------------+----+----+----+----+----+----+----+----+-----------+
Figure - 1
在哪里,
- Luks Partition Header (PHDR) 包含解密/加密 luks 设备的必要信息,如下所示,
-------------------------------+-----------------------------
| 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
- 分区头 (PHDR) 的第二部分由 8 个 key-slot 描述符组成,即关于 key-slot 的信息如下,
------------------------------+------------------------------
| 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
供您参考,上述 luks 分区标头信息是您通过执行luksDump
命令获得的信息4.0K
,大小约为。
- 从
Figure-1
之后Luks Partition header
,我们可以看到 Key-slot 部分开始,然后是 8 个 key-slot。每个键槽128kiB
的大小都是近似的。因此,对于 8 个密钥槽,我们得到8 * 128 = 1024 KiB
1MiB 或 1048576 字节。
到目前为止,我们从分区标头中获得了 4096 字节,为密钥槽获得了 131072 字节,这些字节总计1048576 + 4096 = 1052672 bytes
用于默认 luks 配置。对于最常见的配置aes-xts-plain
,它大约为 2MiB。
因此,您可以说标头的大小取决于各种元素,例如主密钥大小、散列大小、加密算法、散列算法等。但是将 2MiB 视为 luks 标头是安全的。
- 在键槽之后,开始批量数据。从cryptsetup FAQ中,
由于 2MiB 默认对齐,cryptsetup 1.3 和更高版本的数据区域的开始是 2MiB,即在 0x200000。对于旧版本,它位于 0x101000,即 1'052'672 字节。
您可以在以下输出中看到批量数据/加密数据从偏移量开始 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..|
为什么 cryptsetyp luksFormat 需要指定设备 (/dev/sdb1) ?
因为,
cryptsetup
需要指定 luks Device 作为参数
- 可能有几个 luks 设备/分区,因为我有以下六个,
[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
因此,如果您愿意,luksFormat
您必须提及标准分区或现有的 luks 设备。
我可以为多个 luks 设备共享一个标头吗?
据我所知,不,您不能header
在不同的 luks 设备上使用 luks 设备,因为配置(密码类型、密钥大小等)可能不同(如果配置相同,我强烈不相信它会工作)。