LUKS 模式下 dm-crypt / cryptsetup 的默认加密密钥大小是多少?

LUKS 模式下 dm-crypt / cryptsetup 的默认加密密钥大小是多少?

我正在使用cryptsetup 2.1.0,其默认加密选项是(如所报告的cryptsetup --help):

Default compiled-in device cipher parameters:
    LUKS: aes-xts-plain64, Key: 256 bits, LUKS header hashing: sha256, RNG: /dev/urandom
    LUKS: Default keysize with XTS mode (two internal keys) will be doubled.

我也在读ArchLinux dm-crypt 维基对于 LUKS 来说:

默认情况下使用 256 位密钥大小。但请注意,XTS 将提供的密钥一分为二,因此要使用 AES-256 而不是 AES-128,您必须将 XTS 密钥大小设置为 512。

我对密钥大小加倍/减半感到困惑。我不明白:

  1. 默认值相当于--key-size 256在命令行上发出,并且程序将其加倍至 512,以有效获得 AES-256。手册页中似乎说的“将加倍”就是这个意思
  2. 默认设置相当于--key-size 512在命令行上发出,并且程序将其减半,有效地执行 AES-256。ArchLinux 页面似乎就是这么说的。

哪一个是 (1) 还是 (2)?换句话说,我需要知道在命令行上明确给出的哪个密钥大小相当于默认值 (256 还是 512?),以及这会产生多少有效的 AES 强度 (AES-128 还是 AES-512?)。

答案1

都不是。默认值相当于颁发--key-size 256,因为这指的是 cryptsetup 本身处理的密钥数据,但由于 XTS-AES 需要两个独立的 AES 密钥(一个用于数据,一个用于“调整”,即扇区号),它将 cryptsetup 提供的 256 位密钥分成两个 128 位 AES 密钥。

但这仍然比普通的 AES-128 稍微强一些,因为两个密钥都参与加密每个数据块。

同样,如果您指定--key-size 512,则将通过 cryptsetup 加载 512 位密钥,但 XTS-AES 会将其拆分为两个 256 位密钥。(“构建块”AES 密码仅提供 128、192 或 256 位密钥变体,并且 XTS 密码模式一次使用其中两个“构建​​块”。没有 AES-512。)

有关 XTS-AES 内部工作原理的详细信息,请参见:

相关内容