BitLocker 恢复密钥是无法避免的暴力攻击漏洞吗?

信息安全 比特锁
2021-08-13 06:57:56

在对驱动器进行一些加密工作时,我发现 BitLocker 一直在制作这些“恢复密钥”。我使用的其他加密软件都没有这样做,所以这让我很恼火,也许让我有偏见。

在努力安全存储这些“恢复密钥”时,我突然意识到它们看起来有多小,现在我开始怀疑一个更严重的问题。

我搜索了他们的工作方式并找到了帖子Microsoft 的 BitLocker 恢复代码如何工作?. 它说它只是另一个加密密钥,就像密码一样。

现在我的密码是 128 个字符的字母数字和特殊字符,我使用带有一些随机输入的算法(例如,我的鼠标移动)生成这些特殊字符。我的估计是每个字符 7 位 = 896 位。如果其中一半是随机的,则密钥远高于 256 位,符合行业标准。

另一方面,如果我的数学正确,恢复密钥是 48 位,最多log 2 (10^49) = 163 位。163 位的密钥看起来非常小,而且肯定达不到 256 位的工业标准。

但后来又有一件事打动了我。生成密钥时,我既没有移动鼠标,也没有按下键,我的计算机也没有连接到 Internet。Windows 还能用什么来实现随机性?芯片组上的热敏电阻?太慢了,密钥在几秒钟内就打印出来了。所以它必须是一个伪随机的 163 位密钥。破解任何低于 128 个随机位的东西的时间一落千丈,因此在最坏的情况下,使用常规 GPU 可以非常快速地破解它。所以它增加了两个问题:

  1. 通过使用超级计算机猜测恢复密钥,BitLocker 锁定的驱动器能否在数小时内被暴力破解?有几个 GPU?(假设微软在那个伪随机恢复密钥上付出了尽可能多的努力,并且没有通过减少那里已经很糟糕的随机性来插入任何后门)

  2. 是否有禁用 BitLocker 恢复密钥的选项?

回答问题 2。(我希望)我找到了禁用恢复密钥的方法!

在 Windows 中,搜索运行gpedit.msc计算机配置管理模板Windows 组件BitLocker 驱动器加密固定/可移动数据驱动器选择如何恢复固定/可移动驱动器重启。重新创建驱动器。

有一分钟我对我的发现感到高兴,但我意识到如果问题 1 的答案是肯定的,它可能只是在后台创建恢复密钥,但从不显示、保存或记录它。该漏洞将同样起作用。

我实际上无法完全禁用恢复密钥。BitLocker 只是失败并显示一个错误,指出没有创建恢复密钥的选项。我确实切换到了 256 位恢复密钥,某个论坛上有人说它应该符合 FIPS。它将其保存为 U 盘上的隐藏系统文件。

3个回答

通过使用超级计算机猜测恢复密钥,Bitlocker 锁定的驱动器能否在数小时内被暴力破解?有几个 GPU?(假设微软在那个伪随机恢复密钥上付出了尽可能多的努力,并且没有通过减少那里已经很糟糕的随机性来插入任何后门)

甚至远程也不行。首先,您说的是“可悲的随机性”,但坦率地说,这只是掩盖了您不知道大量熵是什么样的。256 位加密很常见不是因为 128 位不安全,而是因为 256 位在现代 CPU 上足够快,没有理由使用更小的密钥。然而,从安全的角度来看,这是一个荒谬的过度杀伤,至少对传统计算机来说是这样(如果量子计算机能够到达任何地方,可能对量子计算机更安全)。128 位熵意味着 2^128 种可能性,而 128 位熵仍然是一种极其常见的加密密钥强度(尽管取决于算法,这有时需要密钥长度超过 128 位)。2^128 约为 3.4 * 10^38(编辑:修正了数学中的错字)要考虑实际需要多少,就所需的总计算量而言,请考虑:

  • 对于某些类型的操作,当今最常见的超级计算机是 GPU;例如,高端现代 GPU 每秒可以计算数百亿 (10^10) 次加密哈希。
  • 让我们暂时假设您可以通过计算 2^128 SHA1 加密哈希来破解 BitLocker 恢复密钥。(这几乎肯定是错误的,即使键实际上只有 2^128 熵,更不用说。)
  • 让我们进一步假设您是 NSA 之类的,并且可以购买高端 GPU 的全部年产量(这些天有人正在购买它们……)。假设它大约是 3800 万(这实际上几乎可以肯定是太高了;这是对 GPU 总数的一个不错的猜测,其中大多数都没有高端 GPU 强大)。
  • 因此,38M (3.8 * 10^7) 个强大的 GPU,每个 GPU 平均每秒能够进行 10^10 次 SHA1 操作。每秒总共有 3.8*10^17 个哈希值。
  • 这仍然是 10^21 秒的一个因子!那是多长时间?将近 32 万亿年大约是迄今为止宇宙存在时间的 2500 倍。

老实说,你等不起现在宇宙年龄的 2500 倍。你的攻击者也不能。他们可能可以通过购买专用硬件而不是现成的处理器来将估计值降低几个数量级,但即使他们管理 1000 倍的加速......这仍然是多个时代的宇宙寿命. 只需执行一次操作 2^128 次。使用价值数十亿美元的硬件。我认为您的恢复密钥会好的


是否有禁用 Bitlocker 恢复密钥的选项?

除了您已经找到的使 Windows 不会在您每次使用 BitLocker GUI 时强制创建密钥的选项之外,您还可以使用命令行manage-bde.exe工具删除“保护器”,包括恢复密钥。

manage-bde -protectors -delete C: -Type RecoveryPassword

只是,在你跑去执行那个小命令之前,休息一下考虑一下。毕竟,你有不止几个宇宙时代的时间尺度来考虑它。

通过使用超级计算机猜测恢复密钥,Bitlocker 锁定的驱动器能否在数小时内被暴力破解?有几个 GPU?(假设微软在那个伪随机恢复密钥上付出了尽可能多的努力,并且没有通过减少那里已经很糟糕的随机性来插入任何后门)

我认为你大大低估了有多大2^163如果我们做一些粗略的数学运算并采用 Intel i9-9900K(16 线程,3.6GHz),并假设它可以在每个周期尝试一个 AES 密钥(因为它具有 AES-NI),那么我们每秒就有 57,600,000,000 个密钥,或者每年 1,816,473,600,000,000,000 (1.8 × 10^18)。这意味着在单个高端 CPU 上暴力破解 163 位密钥将花费 55,051,722,194,035,743,997,062,743,766,462,087,395,540 (5.5 × 10^40) 年。

当然,您可以在问题上投入更多的 CPU(GPU 可能不会有太大帮助,因为它们不会像 CPU 那样在硬件中具有 AES) - 但您仍然无法接近可行。

所以是的,一个 48 位的密钥小于 256 位,但它仍然处于完全不可破解的领域。作为一般规则,128 位被认为是完全不可能暴力破解的,而且这不太可能改变。

但后来又有一件事打动了我。生成密钥时,我既没有移动鼠标,也没有按下键,我的计算机也没有连接到互联网。Windows 还能用什么来实现随机性?芯片组上的热敏电阻?

Windows 生成随机数的确切方式很复杂,但微软发布了一份关于它白皮书,如果您想了解详细信息,值得一读。

简短的版本是您不会猜到它们,而且我不相信他们的方法中存在任何严重缺陷。

是否有禁用 Bitlocker 恢复密钥的选项?

这是一个坏主意 - 在各种情况下您都可能需要它们(BIOS 更新、某些固件更新、TPM 问题、主板故障)。如果您这样做,那么我希望您对数据有良好的备份(并且您已经用同样强大的东西对它们进行了加密)。

48 位,最多log 2 (10^49) = 163 位,如果我的数学是正确的。

你的数学有点偏离:最多是 log 2 10 48 ≈ 159 位。

但是,由于它是手动输入的,因此其中一些数字可能是校验位。从网上看,它似乎是一个 128 位密钥,分为 8 个块,每个块 16 位,每个块转换为十进制并乘以 11(以捕获个位数错误和换位)。密钥实际上是 128 位。

正如其他答案所说,这已经足够了。

Windows 还能用什么来实现随机性?芯片组上的热敏电阻?太慢了,密钥在几秒钟内就打印出来了。

Windows 在内核中有一个熵收集服务,它在操作系统启动时启动,并且只要系统正在运行就运行。重要的是启动后的时间,而不是您要求它生成密钥的时间。

微软自己的系统描述(适用于 Windows 10)在这里它说熵的主要来源是周期精确的中断时间(通过RDTSC指令)。他们估计每个时间戳有不止一位的熵,每秒有数百个中断。

即使您在启动系统后几乎立即生成密钥,您也可能没问题,因为在启动时它会从 CPU 硬件 RNG ( RDRAND/ RDSEED) 以及各种其他来源读取 256 位

我的密码是包含特殊字符的 128 个字符的字母数字,我使用带有一些随机输入的算法(例如,我的鼠标移动)生成这些特殊字符。我的估计是每个字符 7 位 = 896 位。

如果不了解更多关于你的生成方法,很难知道这些密码有多少熵,但它可能比你想象的要少得多。很容易搞砸自制软件的安全性。


从根本上说,你需要考虑你的敌人是谁。即使熵收集的某些问题将恢复密钥或密码限制为 2 64种可能性,即使攻击者可以找出这些可能性(这似乎需要对您的系统有一定程度的了解,这会导致大量这些其他保护措施毫无意义),尝试所有这些仍然非常昂贵且耗时。如果有人有动力破解您的加密,那么您还有很多其他事情要担心。他们可能会闯入您的房子(无法检测到)并安装硬件键盘记录器,或者找到您写下 128 个字符密码的纸,因为它太长而无法记住,等等。