从密码分析的角度来看,在 dm-crypt plain 模式下使用 cypher 对不同卷重复使用相同的密钥时是否存在安全缺陷aes-xts-plain64
?
# Example: Encrypt two volumes with the same key
cryptsetup --type plain --cipher=aes-xts-plain64 --key-size=256 --key-file mykey open /dev/sda myvol1
cryptsetup --type plain --cipher=aes-xts-plain64 --key-size=256 --key-file mykey open /dev/sdb myvol2
我只考虑实际情况,例如使用相同密钥加密的卷少于 100 个。
答案1
好吧,这不是安全堆栈交换,我也不是密码学专家,但从表面上看:
爱丽丝未加密:
00000000 48 65 6c 6c 6f 20 6d 79 20 6e 61 6d 65 20 69 73 |Hello my name is|
00000010 20 41 6c 69 63 65 0a 00 00 00 00 00 00 00 00 00 | Alice..........|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
鲍比未加密:
00000000 48 65 6c 6c 6f 20 6d 79 20 6e 61 6d 65 20 69 73 |Hello my name is|
00000010 20 42 6f 62 62 79 0a 00 00 00 00 00 00 00 00 00 | Bobby..........|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
两者都使用相同的(主)密钥 aes-xts-plain64 进行加密:
Alice000 8f 04 35 fc 9f cb 5d c8 af da ae 78 cd e5 64 3d |..5...]....x..d=|
Bobby000 8f 04 35 fc 9f cb 5d c8 af da ae 78 cd e5 64 3d |..5...]....x..d=|
Alice010 4f d3 99 77 7b c1 2c 8d ff 9b 4d 55 da a3 9b e2 |O..w{.,...MU....|
Bobby010 12 d6 ad 17 74 50 4d 08 8c 38 22 40 98 a7 14 99 |....tPM..8"@....|
Alice020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
Bobby020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
因此,从表面上看,一个问题是相同的偏移量和明文(对于每个 16 字节块)会产生相同的密文。如果明文不同,密文也会不同。在某些情况下,这可能比显示自由空间更能说明问题。
另一个问题是,您可以将密文从一个驱动器复制到另一个驱动器,然后将其解密为有意义的数据 - 但在错误的驱动器上。通常,如果你弄乱了密文,解密时得到的只是随机垃圾,但重新使用主密钥只会为你提供更有效的密文。
因此,完全人为的示例,如果您有一个用户不知道密钥,但以某种方式可以访问存储在该系统上的文件,并且能够将密文从一个驱动器复制到另一个驱动器 - 通常不可能,但我们假设确实如此。他们可以编写一个充满废话的大文件,找出该文件在磁盘上分配的位置,然后从其他驱动器复制数据。然后在读回文件时可以看到另一个驱动器的纯文本数据。
总而言之,当为每个磁盘使用唯一密钥如此容易时,这只是一个不必要的麻烦。即使您使用哈希函数或其他方式从共享主密钥派生该密钥。虽然这也没有理由。您可以仅使用多个密钥文件,或使用--keyfile-offset
,--keyfile-size
选项从单个文件中读取多个密钥。
LUKS 应该可以帮助您避免各种陷阱。除非您故意克隆标头,否则它总是为每个容器使用不同的随机主密钥,即使您为它们使用相同的密码。
另外还有一点关于您选择的密码的注释aes-xts-plain64
。这过去被称为aes-xts-plain
。一切都很好,直到大于 2TiB 的设备出现......随着aes-xts-plain
,密文每 2TiB 重复一次,这基本上与重复使用相同的主密钥相同的问题。
这个问题已经用 修复了aes-xts-plain64
,但一些博客/wiki 仍然推荐旧的,或者旧的容器与新的硬盘一起保留和增长,所以直到今天有些人最终还是使用了错误的......