假设我丢失了一个 LUKS 加密的 USB 笔式驱动器。我认为文件系统类型 (ext4/fat32/...) 不起作用。一个外国人发现了它。当然他不能访问我的数据,因为他没有密码。但他可以更改“原始”数据中间的单个字节,从而损坏数据。
U盘退还给我后,是否可以验证我的数据是否损坏?
我认为读取整个映射器设备会导致 I/O 错误,但不幸的是它不会。我也检查过dmesg
。
# create an all zero 100MiB file
dd if=/dev/zero of=moh bs=100M count=1
# format it as LUKS device
/usr/sbin/cryptsetup luksFormat moh
# map it to /dev/mapper/moh
sudo cryptsetup luksOpen moh moh
# initialize mapper file to zero
sudo dd if=/dev/zero of=/dev/mapper/moh
# close LUKS device
sudo cryptsetup luksClose moh
# overwrite 1MiB with zeroes at offset 10MiB. After this the LUKS device is damaged.
sudo dd if=/dev/zero of=moh conv=notrunc bs=1M seek=10 count=1
# open LUKS device and see if it complains
sudo cryptsetup luksOpen moh moh
# read all data to see if it complains
sudo dd if=/dev/mapper/moh of=/dev/null
上述命令证明打开和读取损坏的 LUKS 设备不会产生任何错误。
请注意,我不想执行任何文件系统检查。相反,我想验证 LUKS 设备的加密级别是否未受影响。
因为我正在寻找一个单一的命令来验证 luks 设备我希望你明白这不是一个更适合 SO 的编程问题。
有可能但不是“普通”LUKS,您需要设置经过身份验证的加密。
--integrity
这在 LUKS v2 中是可能的,您需要使用选项创建 LUKS 设备luksFormat
。这基本上会为加密数据添加校验和以确保完整性,没有它,LUKS/dm-crypt 根本不关心(或知道)磁盘上的内容,如果您用零覆盖它,它将“解密”那些零。有关详细信息,请参阅cryptsetup 手册页中的已验证磁盘加密部分。