这篇文章的原始标题是关于 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
答案1
扇区总数错误。我必须获取扇区总数并减去偏移量。为什么 dmsetup 不直接说扇区数超出了设备,而是说非常无用的:“无效参数”?这样可以节省几个小时。
对于 4k 模式,您必须采用扇区总数 * 512 / 4096 - 偏移量。您还必须指定一个数数表中任何额外的“可选参数”之前。这里我只有 1 个,所以它是:
... /dev/sdh 256 1 sector_size:4096