对于 LUKS:最可取和最安全的密码?

信息安全 加密 linux 磁盘加密 卢克斯
2021-08-18 06:54:18

我即将使用 LUKS 加密我的两个硬盘驱动器,因为我自己不能真正做到这一点,所以我使用 Arch Linux wiki 上的指南(可以在此处找到)在指南中的示例中,指定的密码是aes-xts-plain512 位密钥大小。aes-xts-plain最好的选择还是有更好的密码可以使用?我更喜欢安全而不是速度。

3个回答

在任何分组密码的使用中,您都需要了解三个组件,它们在这里明确应用:

  • 分组密码原语。这可能是您熟悉的 AES 候选密码之一,例如 AES、Serpent、Twofish、Blowfish...
  • 操作模式。按原样使用分组密码,逐块称为电子密码本,但还有其他模式,例如密码块链接和计数器模式,各有优缺点。
  • 初始化向量生成方案,例如essiv,它与攻击者可用的各种指纹技术对抗用于磁盘加密的 CBC。

因此,当您选择一个选项时,例如aes-cbc-essiv,您实际上是在要求 AES,在 CBC 模式下使用基于某些每个块标识符的加密 IV,而aes-xts-plain在 XTS 模式下使用 AES,并从一些每个块信息生成普通的旧 IV。

归结为您是否相信 XTS 对加密模式中的白化(ESSIV 与之作斗争)有足够的抵抗力。在这个阶段,XTS 是一种更现代的模式,具有更多的技术优势,但经过的密码测试比 CBC 少。

XTS 需要注意的一点,来自维基百科:

由于拆分,想要 AES 256 和 AES 128 加密的用户需要分别选择 512 位和 256 位的密钥大小。

需要小心选择使用此模式生成密钥大小,以便每个块使用所需位大小的密钥。我还没有查看 LUKS 信息以了解它或 cryptsetup 如何划分其密钥;这可能是您希望做的事情,以确保您拥有所需的正确安全级别。因此,按照您的指南,每个块都使用了 256 位加密(512 密钥分为两部分)。

最可取的密码是aes-xts-plain64,默认情况下它被广泛使用(RedHat、CentOS、Oracle Linux、Ubuntu)。大多数人使用AES 它是因为许多设备、应用程序都支持它,并且AES可以在Intel 处理器上加速其性能。而且这种加速特性AES在其他密码上具有很多优势。您可以在此处Simple implementation of AES阅读vs之间的性能比较另一件要提到的事情是,如果由于互联网上存在可用攻击而由于其广泛使用而使用它,您将很快了解它,并且您可能会快速获得更新/补丁。作为磁盘加密的实现有一些被动攻击,您可以从中读取Hardware Accelerated AES AESAES在这里

但是您的选择可能会有所不同。在选择密码时,您只需确保您选择的密码尚未被泄露。你可以从这里查看还有其他类似的密码可用,它们效率不高(从 i/o 的角度来看),AES但是很好的替代品。如果你不打算使用AES,然后有两个接班人AES其中的是安全比 AES阿努比斯,如果你正准备牺牲速度以确保安全。

幸运的是,您可以在LUKS. 如果你想将一些数据符合加密大于AES足够我猜测,因为AES是优选FISMANIST-特殊出版物-800-53-修订-4

因为LUKS,在我看来,对于加密算法,你应该认真对待散列算法。如果您使用弱散列,那么您的超级安全算法不会对您有太大帮助。LUKS因为散列在加密过程中起着至关重要的作用。所以你不应该使用sha1和其他弱散列算法。但是sha512足够安全。但您也可以使用whirepool或最近密码哈希竞赛的获胜者argon2i

我的另一个回答LUKS

您可以使用以下命令列出内核支持的密码,

[root@arif]# ls /lib/modules/$(uname -r)/kernel/crypto/
algif_rng.ko.xz   blowfish_common.ko.xz   cmac.ko.xz               cts.ko.xz          gf128mul.ko.xz           michael_mic.ko.xz  rsa_generic.ko.xz      tgr192.ko.xz           xts.ko.xz
ansi_cprng.ko.xz  blowfish_generic.ko.xz  crc32_generic.ko.xz      deflate.ko.xz      ghash-generic.ko.xz      pcbc.ko.xz         salsa20_generic.ko.xz  twofish_common.ko.xz   zlib.ko.xz
anubis.ko.xz      camellia_generic.ko.xz  crct10dif_common.ko.xz   des_generic.ko.xz  jitterentropy_rng.ko.xz  pcrypt.ko.xz       seed.ko.xz             twofish_generic.ko.xz
arc4.ko.xz        cast5_generic.ko.xz     crct10dif_generic.ko.xz  dh_generic.ko.xz   khazad.ko.xz             rmd128.ko.xz       serpent_generic.ko.xz  vmac.ko.xz
async_tx          cast6_generic.ko.xz     cryptd.ko.xz             drbg.ko.xz         lrw.ko.xz                rmd160.ko.xz       sha512_generic.ko.xz   wp512.ko.xz
authencesn.ko.xz  cast_common.ko.xz       crypto_null.ko.xz        fcrypt.ko.xz       mcryptd.ko.xz            rmd256.ko.xz       tcrypt.ko.xz           xcbc.ko.xz
authenc.ko.xz     ccm.ko.xz               crypto_user.ko.xz        gcm.ko.xz          md4.ko.xz                rmd320.ko.xz       tea.ko.xz              xor.ko.xz

luks您可以通过以下命令列出您可以使用的密码和哈希以及它们的 I/O 比较,

[root@arif arif]# cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1       289342 iterations per second for 256-bit key
PBKDF2-sha256     353293 iterations per second for 256-bit key
PBKDF2-sha512     227555 iterations per second for 256-bit key
PBKDF2-ripemd160  233224 iterations per second for 256-bit key
PBKDF2-whirlpool  236165 iterations per second for 256-bit key
argon2i       4 iterations, 917485 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
argon2id      4 iterations, 951672 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
#     Algorithm |       Key |      Encryption |      Decryption
        aes-cbc        128b       642.2 MiB/s      2495.8 MiB/s
    serpent-cbc        128b        89.3 MiB/s       542.6 MiB/s
    twofish-cbc        128b       100.4 MiB/s       343.1 MiB/s
        aes-cbc        256b       477.2 MiB/s      1979.2 MiB/s
    serpent-cbc        256b        89.3 MiB/s       538.9 MiB/s
    twofish-cbc        256b       173.3 MiB/s       343.1 MiB/s
        aes-xts        256b      1668.0 MiB/s      1664.1 MiB/s
    serpent-xts        256b       535.7 MiB/s       523.4 MiB/s
    twofish-xts        256b       332.6 MiB/s       339.8 MiB/s
        aes-xts        512b      1384.5 MiB/s      1380.7 MiB/s
    serpent-xts        512b       539.3 MiB/s       524.4 MiB/s
    twofish-xts        512b       335.0 MiB/s       340.1 MiB/s

您可以通过以下命令比较特定密码,

[root@arif]# ciphers="aes-xts serpent-xts anubis-xts"

[root@arif]# echo "#     Algorithm |       Key |      Encryption |      Decryption";for i in $ciphers ; do cryptsetup benchmark --cipher $i|tail -n 1; done

#     Algorithm |       Key |      Encryption |      Decryption
        aes-xts        256b      1613.9 MiB/s      1642.8 MiB/s
    serpent-xts        256b       538.9 MiB/s       521.9 MiB/s
     anubis-xts        256b       182.0 MiB/s       182.1 MiB/s

正如您在 SU 上的原始帖子中所提到的,对于大多数目的,所需的安全级别应该足以使攻击者没有合理的机会在有用的时间范围内破坏它(例如,对于您的个人数据,您可能希望它是 10年跨度)。

因此,在此示例中,假设您的 PC 上没有国家机密或敏感的公司数据,AES-XTS-PLAIN 有望在合理的时间范围内抵抗攻击者。