这篇文章的原标题是关于 CryptSetup 没有加载具有 4096 字节扇区的 Truecrypt 设备。无论如何,我设法转储了 Truecrypt 标头(使用主密钥),但是现在当我尝试使用 dmsetup 加载它时它不起作用:
echo "0 5860533168 crypt aes-xts-plain64 <my-super-secret-64-byte-key> 256 /dev/sdh 256" | dmsetup create test
device-mapper: resume ioctl on test failed: Invalid argument
Command failed
它似乎不支持超过 2^32 的大小数字,所以我尝试将扇区大小:4096参数添加到表中:
echo "0 732566646 crypt aes-xts-plain64 <my-super-secret-64-byte-key> 256 /dev/sdh 256 sector_size:4096" | dmsetup create test
device-mapper: reload ioctl on test failed: Invalid argument
Command failed
如果我将扇区数设置为低于 2TB (2^32 * 512),它会起作用,但不会超过。我试图在纯 cryptsetup 中复制相同的命令,但我不知道如何准确匹配 dmsetup 表,我无法复制它。有没有办法强制 dmsetup 使用超过 2TB 的设备?有没有办法将主密钥直接传递给 cryptsetup?这是我迄今为止尝试过的,但它使用错误的密钥解密:
echo <64-byte-key> | cryptsetup open --type plain /dev/sdh test --offset 256 --cipher aes-xts-plain64 --hash plain --key-size 512
扇区总数错误。我必须取扇区总数并减去偏移量。为什么 dmsetup 不只是说扇区数超过了设备而不是非常无益的:“无效参数”?这将节省几个小时。
对于 4k 模式,您必须采用扇区总数 * 512 / 4096 - 偏移量。您还必须在表中任何额外的“可选参数”之前指定一个计数。在这里,我只有 1 个,所以它是: