luks1 的限制为 8。但我只是不小心向 luks2 添加了 9 个插槽(从 0 到 8)。我想知道luks2的限制是多少?
Keyslots:
0: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 5
Memory: 1048576
Threads: 4
Salt: 32 ff 35 1e a2 b5 64 a7 fe f9 6e 7d 12 75 75 d5
a4 e7 47 39 80 96 1d 76 b1 35 b3 77 0a 85 46 ac
AF stripes: 4000
AF hash: sha256
Area offset:32768 [bytes]
Area length:258048 [bytes]
Digest ID: 0
1: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 5
Memory: 1048576
Threads: 4
Salt: 55 7b 9a 4c d8 53 2b bb 90 af 57 44 67 b5 0c 03
85 a1 5d 70 e4 1e b0 5f 97 1a f3 0e f2 8c dc b2
AF stripes: 4000
AF hash: sha256
Area offset:290816 [bytes]
Area length:258048 [bytes]
Digest ID: 0
2: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 5
Memory: 1048576
Threads: 4
Salt: ac 24 09 ca f9 24 52 3d 49 d3 c9 89 63 d0 1d 61
83 4a aa ed 75 a2 39 ec 3f f8 ab 95 5d 0c 49 aa
AF stripes: 4000
AF hash: sha256
Area offset:1064960 [bytes]
Area length:258048 [bytes]
Digest ID: 0
3: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 5
Memory: 1048576
Threads: 4
Salt: 3d 37 41 20 93 44 55 62 c6 19 fe e0 7d ae 14 0d
67 86 6a 44 5e c8 8a f0 97 01 1d c7 c6 83 02 22
AF stripes: 4000
AF hash: sha256
Area offset:1323008 [bytes]
Area length:258048 [bytes]
Digest ID: 0
4: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 5
Memory: 1048576
Threads: 4
Salt: bf 6d a0 15 c9 8e 9b 49 12 84 86 6b 13 93 95 7d
cf cf 8f 3a e2 b7 42 42 4c 59 a1 5c 23 cd e6 1a
AF stripes: 4000
AF hash: sha256
Area offset:1581056 [bytes]
Area length:258048 [bytes]
Digest ID: 0
5: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 5
Memory: 1048576
Threads: 4
Salt: bd 76 ae e1 33 d3 7a 83 5b 59 d4 bc 46 17 36 ec
e6 94 a5 b1 85 2d 00 9f a4 ff f4 02 cc b6 ca bc
AF stripes: 4000
AF hash: sha256
Area offset:1839104 [bytes]
Area length:258048 [bytes]
Digest ID: 0
6: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 5
Memory: 1048576
Threads: 4
Salt: ab 7f dd e5 2c eb 32 51 97 9a 10 5e 70 75 1e 15
91 35 10 63 f5 8b b6 8c 7a 97 16 40 50 e6 89 fb
AF stripes: 4000
AF hash: sha256
Area offset:2097152 [bytes]
Area length:258048 [bytes]
Digest ID: 0
7: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 5
Memory: 1048576
Threads: 4
Salt: aa 02 fd a2 fd 4a ee 84 1a 41 93 58 7a 25 c2 d4
0d 65 bc b4 5b 18 1a 05 4b 0a 81 f7 68 8c 9a 26
AF stripes: 4000
AF hash: sha256
Area offset:548864 [bytes]
Area length:258048 [bytes]
Digest ID: 0
8: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 5
Memory: 1048576
Threads: 4
Salt: 2b 04 62 29 e2 dc 42 b4 3a 28 8d 46 28 17 05 26
a1 05 86 62 95 8e 50 98 91 67 18 15 71 1c 8a f9
AF stripes: 4000
AF hash: sha256
Area offset:806912 [bytes]
Area length:258048 [bytes]
Digest ID: 0
答案1
对于 LUKS1,它是 8 个键槽,固定的。
对于卢克斯2来说,目前最多有32个键位:
#define LUKS2_KEYSLOTS_MAX 32
尝试添加更多内容会导致错误消息“所有键槽已满。”。
然而,答案可能并不那么简单。代码中存在 32 的限制,但在代码中根本没有提及LUKS2 磁盘格式规范。
LUKS2 标头实际上能够存储的不仅仅是 32 个键槽。或者它甚至可能无法存储其中的 8 个。它取决于数据偏移、键槽区域的大小以及每个单独的键所需的大小。
对于新格式化的标头,它默认为较大的数据偏移量,因此您可以轻松获得 32 个键槽。如果您从 LUKS1 转换而来(只有 2MiB 数据偏移量),则它保持不变,为 8 个键槽。如果数据偏移较小,则可能小于 8 个键槽。
当数据偏移量为 1MiB 时,您只能获得 3 个键槽(cryptsetup
发出警告):
# truncate -s 100M foobar.img
# cryptsetup luksFormat --offset=2048 foobar.img
WARNING: keyslots area (1015808 bytes) is very small,
available LUKS2 keyslot count is very limited.
# cryptsetup luksAddKey foobar.img
# cryptsetup luksAddKey foobar.img
# cryptsetup luksAddKey foobar.img
No space for new keyslot.
在此特定示例中,在标头耗尽空间来存储更多键之前,只能使用 3 个键槽:
# cryptsetup luksDump foobar.img
LUKS header information
Version: 2
Epoch: 5
Metadata area: 16384 [bytes]
Keyslots area: 1015808 [bytes]
[...]
Keyslots:
0: luks2
[...]
Area offset:32768 [bytes]
Area length:258048 [bytes]
Digest ID: 0
1: luks2
[...]
Area offset:290816 [bytes]
Area length:258048 [bytes]
Digest ID: 0
2: luks2
[...]
Area offset:548864 [bytes]
Area length:258048 [bytes]
Digest ID: 0
这里总的可用键槽区域只有 1015808 字节。每个密钥的大小为 257048 字节。要存储额外的密钥,至少需要 1032192 字节,因此在这种特殊情况下它不适合更多的密钥。
如果您不关心 MiB 对齐,则可以使偏移量更小,只留下一个键槽。
答案2
Luks2 不像 Luks1 那样有固定键槽。您可以存储多少个取决于:
* luks2-metadata-size(根据规范最多可以保留 4MB),其中键槽定义与所有其他元数据存储在一起(采用 JSON 格式,因此没有明确的键区域保留区)并且每个键也没有绝对的大小要求)。
* luks2-keyslots-size(根据规范最大可保留 128MB),其中保存密钥槽的实际密码内容。这里它也是一个松散的结构,因此它取决于实际的插槽数据,您可以使用特定大小获得多少个键。
我没有计算,但我认为大多数情况下可能会有很多槽位。