假设我丢失了一个 LUKS 加密 USB 随身碟。我认为文件系统类型(ext4/fat32/...)不起作用。一个外国人发现了它。当然,他无法访问我的数据,因为他没有密码。但他可以更改“原始”数据中间的单个字节,从而损坏数据。
随身碟归还给我后,是否可以验证我的数据是否损坏?
我认为读取整个映射器设备会导致 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 的编程问题。
答案1
这是可能的,但对于“普通”LUKS 来说不行,您需要设置经过身份验证的加密。这对于 LUKS v2--integrity
来说是可能的,您需要使用luksFormat
.这基本上会为加密数据添加校验和以确保完整性,没有它,LUKS/dm-crypt 根本不关心(或知道)磁盘上有什么,如果你用零覆盖它,它会“解密”这些零。请参阅经过身份验证的磁盘加密部分在cryptsetup 手册页更多细节。