LUKS,如何使最强和合理的密码短语成为可能?

信息安全 磁盘加密 密码 卢克斯
2021-08-11 17:32:47

假设我有一个使用 512 位密钥在 LUKS 下加密的卷。这意味着2 ^ 512密钥可能可能的值。

现在我需要一个至少与实际的 512 位卷加密密钥一样能抵抗暴力破解的密码。如果我的以下假设是错误的,请纠正我,所有数值仅用于数学示例:

假设我的密码是由 base64 编码随机输入生成的,因此我的密码的键空间是64字符。2 ^ 512因此,为了使我的密码至少与卷加密密钥一样强,那么在密码长度内至少需要有可能的组合。这可以表示为:

(size_of_keyspace) ^ number_of_characters >= 2 ^ (size_of_key)

因此,对于这个音量密钥大小512和密码短语密钥空间的示例,64我的密码短语应该是最少字符数,以便至少与音量密钥一样安全86

这个逻辑是正确的还是我应该注意一些缺点?根据这个问题可以提供任何其他建议吗?

我的理由是,拥有比实际有效负载密钥本身更强的密码短语并没有内在的好处——有人暴力破解我的驱动器最终试图破解我的加密密钥,而不是我的密码短语。如果我的密码比加密密钥强,那么攻击者可以比密码更快地暴力破解加密密钥。这是正确的,还是使用比加密密钥更强的密码短语有什么好处,也许是因为攻击者没有充分分散他们的方法的资源消耗?

3个回答

在安全的背景下,一切都是一种权衡。稍后会详细介绍....

破解加密卷的攻击选项有哪些?它们基本上是:

  1. 对对称加密原语使用的密钥的密钥空间进行暴力搜索。

  2. 通过使用卷的特定盐和密钥派生参数尝试每个可能的密码来暴力破解密码。

  3. 邪恶的女仆、橡胶软管、键盘记录器或其他“非加密”方式来保护您的键盘。

您应该担心数字 3。因为它是明显的攻击媒介。

没有人会成功地暴力破解用于块加密原语的密钥。

从基本的安全角度来看,我仍然坚信,如果实施没有被破坏,即使是 128 位密钥也是完全安全的。在这种情况下,蛮力搜索平均必须耗尽具有 340,282,366,920,938,463,463,374,607,431,768,211,456 种可能性的关键空间的一半。

对于 256 位键控原语,您说的是 115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,936 种可能性。

因此,即使使用 256 位密钥安全性,您也已经达到接近已知宇宙中原子数量的数字。

所以就这样了。

您担心的是有人尝试了所有可能的密码短语。

现在,请记住 LUKS 使用一些 salt + PBKDF2 将您的密码短语拉伸到密钥空间的大小。这意味着即使是“a”的密码也可以映射到整个密钥空间中的任何可能位置。所以攻击者不会有一个可以在这里提供帮助的彩虹表。

如果他们要暴力破解密码短语,他们将尝试所有可能的输入,通过密钥派生函数运行每个输入,并使用卷上使用的参数(盐和迭代)。这需要时间。而且,如果没有记错的话,LUKS 实际上会将迭代设置为每次“尝试”花费特定的时间。

这意味着您只需要一个具有足够熵的密码短语长度,以使攻击者无法尝试足够数量的可能短语来定位您的短语。攻击者当然可以使用 GPU 或专门的 ASIC 硬件来加速这个过程(这就是为什么人们正在尝试使用 Scrypt 之类的东西来增加难度),但是你将受到 20 到 30 个包含小写、大写、数字的字符的保护。和键盘符号(包括来自移位数字的符号和键盘上的其他符号)。

这让我回到我最初的评论。重要的是要记住权衡。您可以尝试想出一个与您的 512 位密钥空间的难度相当的密码短语,但它会影响您的行为。当您起床喝杯咖啡时,您可能会发现自己没有下马/注销,因为在重新登录时正确获取该密码短语非常痛苦。您可以将长密码短语存储在手机或手机上纸。如果您将其存储在密码管理器中,您将受到密码管理器安全性的限制,而不是密码长度的安全性。

同时,一旦攻击者必须使用 93 个可能的字符尝试 20 到 30 个字符的密码短语,攻击者将面临(有效地)95 到 150 位的熵,这使其超出了合理的暴力破解范围。

而且,所有这些都导致了进入你的音量的第三种可能性。与暴力破解加密原语的密钥或尝试所有可能的密码短语相比,第三种情况“妥协”确实是您应该担心的。让您将受感染的 Web 浏览器指向在您正在运行的系统上提供升级权限的漏洞的攻击者可以扫描内存以查找您的密码。在您的系统上获取 rootkit 的攻击者也可以这样做。如果您插入受感染的 USB 或火线设备,则可能会损害安全性。对于攻击者来说,这些都比暴力破解密钥空间或密码空间要容易得多。

在实践中,攻击者会尝试在您的密钥之前攻击您的密码。在某些情况下,攻击实际密钥要困难得多。请记住,对于密码和密钥,制定锁定策略很重要。

实际上,在具有良好锁定策略的系统上,针对高质量 10-12 字符密码短语的攻击者是不现实的。86个字符的高质量密码短语确实很难被击败。如果我是攻击者,我只会另谋出路。我认为 20 个字符的密码足以满足您的目的。

所以为了回答你的问题,我想说你不应该担心你的密码长度是否会吸引恶意用户直接破解密钥。相反,我会确保有适当的锁定和速率限制策略,以便一开始就基本上不可能进行暴力攻击。

这里的树木很容易错过森林。当您没有进行研究以确保您正在使用的过时软件没有绕过身份验证时,请不要为密码而烦恼,过度思考它们。尝试查看整个安全图景。研究你的软件平台,确保没有更多严重的安全漏洞——一旦攻击者意识到你的密码不是“密码”,这将是下一个目标。

这个问题基本上归结为“密码应该有多少位熵?”。太多了,我们记住了额外的字符而没有额外的好处,太少了,攻击者可以强行访问硬盘驱动器。正如博格德的回答所指出的那样,在某个时候,其他风险(例如硬盘未加密时对机器的物理访问、软件漏洞、键盘记录器或其他东西)超过了对密码进行暴力攻击的风险,所以一旦你的密码足够安全,你就应该担心其他风险,而更长的密码只会增加其他风险。

让我们从描述最强大的现实攻击者开始。要暴力破解长密码,攻击者必须擅长快速计算sha256哈希。一组众所周知的擅长计算sha256哈希的设备是参与比特币挖掘的设备。出于所有实际目的,可以安全地假设攻击者最多可以计算sha256与比特币网络一样多的哈希值。截至 2021 年 5 月,比特币网络的 1.72 * 10^20哈希率为每秒比特币哈希值,其中(假设需要计算 2 个sha256哈希值来计算一个比特币哈希值)是3.44 * 10^20 sha256每秒哈希值。随着时间的推移,这一比率以略低于每年翻一番的速度增长。y因此,似乎可以安全地假设,到年底sha256计算的哈希值最多为2 * 3.44 * 10^20 * (#seconds per year) * 2^(y-2021) ≈ 2^(94 + y - 2021).

假设您使用默认cryptsetup选项来创建LUKS卷,您可能(截至 2021 年)使用PBKDF2密钥派生算法并num_iterations选择迭代次数,以便num_iterations在您的机器上完成大约 2 秒的迭代。这意味着攻击者将需要sha256至少计算num_iterations几次来检查 1 个密码,本质上log_2(num_iterations)是在密钥的熵中添加位。如果您已经创建了一个加密容器,您可以num_iterations通过运行sudo cryptsetup luksDump /dev/sdXiwhere /dev/sdXishould be replace 为加密设备的实际路径来找到您正在使用的迭代次数。

基于上述情况,我建议95 + (y - 2021) - log_2(num_iterations)您的密码短语的熵位足以确保上述最强大的现实攻击者只有1/2机会暴力破解您的密码短语。例如,如果您想确保到 2041 年没有人暴力破解您的密码并且您拥有num_iterations = 2*10^6(这就是我在笔记本电脑上得到的),94 位熵或 16 个随机 base-64 字符就足够了。在这一点上,对比特币进行 51% 攻击会比暴力破解硬盘更容易(更便宜)。

离开现实场景,如果您怀疑暴力破解您的密码短语将是 NSA 或中国政府未来 20 年的第一目标(他们将拥有您的加密硬盘驱动器的副本,其中包含非常有价值的信息,并且没有其他方法可以得到它),并且您仍然希望确保它们以 99.999999% 的概率失败,然后使用 124 位熵或 21 个随机 base-64 字符。

免责声明:

  • 以上仅考虑暴力攻击。在加密技术进步的情况下,其他一些攻击方法PBKDF2可能是可能的。
  • 我不是密码学家。