明文模式下 dm-crypt 密钥重用的安全性?

明文模式下 dm-crypt 密钥重用的安全性?

从密码分析的角度来看,在 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 仍然推荐旧的,或者旧的容器与新的硬盘一起保留和增长,所以直到今天有些人最终还是使用了错误的......

相关内容