对低熵密钥的攻击

信息安全 密码学 虚拟化 随机的
2021-08-30 05:29:33

如果我要给某人两个 4096 位密钥,并说一个是在具有非常低可用熵的 Linux 操作系统中生成的,而另一个是在具有足够熵的 Linux 操作系统中生成的。

可以区分两者吗?他们能对低熵生成的密钥进行任何类型的攻击吗?

我问这个主要是因为我经常在 VM 上生成大量 4096 位密钥/证书/DH 参数等等,而我对此知之甚少,因为我想要使用大量可用的熵,因为它使预测事情变得更加困难。

我做了一些关于为什么随机性很重要的搜索,我发现了一篇博客文章(为什么安全系统需要随机数),它试图解释为什么随机性很重要,并描述了流行的编程和技术网站 Hacker News 的黑客行为:

并且所有的伪随机数生成器都需要从某个地方开始;他们需要播种,这就是 Hacker News 失败的地方。随机数生成器以最后一次启动 Hacker News 软件时的时间(以毫秒为单位)为种子。通过一些仔细的工作,攻击者设法让 Hacker News 崩溃,然后可以在大约一分钟的窗口内预测它何时重新启动。通过它,他能够预测在用户登录时分配给用户的唯一 ID,因此可以冒充他们。

好的,我明白了,但这是否仍然需要攻击者进行主动攻击而不仅仅是被动攻击?我的意思是你无法获得某人的流量并说“嘿,这个 Diffie-Hellman 参数/SSH 密钥似乎是用低熵生成的,所以让我们攻击它们吧”,对吧?

所以假设我刚刚生成了一个低熵的密钥或其他东西,但是攻击者无法发起主动攻击,并且目前不知道使用了哪个随机选择的预主密钥,那又如何?

我仍然觉得我无法真正表达我在说什么,所以我将再添加一个示例:

以下是使用 WiFi 的计算机如何使用流行的 WPA2 协议与接入点建立安全连接的部分内容:

  • 接入点生成一个随机随机数并将其发送到计算机。
  • 计算机生成一个随机数并将其发送到接入点。
  • 接入点和计算机从那里继续使用这些随机 nonce 值来保护连接。

没关系。说我是中间人,你被动地观察流量,结果路由器的熵用完了,那又怎样?我怎么可能知道这一点,甚至考虑发起攻击以引起新的握手,并从他们那里尝试预测使用的随机 nonce 从而破坏加密?

如果答案是“你不能”就像我想的那样,那为什么它甚至很重要?这不会是任何人尝试的第一次攻击,除非他们知道使用了低熵源,就像他们在 Hacker News 事件中所知道的那样。

如果你能想出一个更好的标题,也可以随意编辑我的标题哈哈。

1个回答

熵将基本上定义随机数生成器在给定时刻可能具有的不同状态的最大数量(可以在此处找到有关该主题的更多信息)。熵越高,可能性越大。

低熵的主要问题是随机数生成器将具有较少的不同可能状态来切换,因此它将开始重复自身。

检测此类问题的主要方法是尝试检测此类重复。例如,一个常见问题可能会影响会话 ID:攻击者可能会从服务器请求大量会话 ID(或者在 Wifi 访问的情况下从 AP 请求随机数 - 有人谈论过 WEP 吗?)并分析服务器是否可以被骗两次生成相同的ID。如果另一个漏洞允许它,他还可以导致几个快速应用程序重启来分析第一个生成的 ID。

熵问题的一个非常好的历史例子影响了 Debian(及其众多衍生产品)。在两年内,他们打破了 Open-SSL 随机数生成器,将ssh-keygen命令(用于生成用于验证服务器上的人员并验证服务器本身以避免中间人攻击的密钥)限制为 32 767 个不同的密钥. 结果:

  • 受此问题影响的服务器可以立即被识别,因为他将提供这些易受攻击密钥之一的公共部分来验证自己:攻击者知道的私有部分可以进行广泛的攻击,
  • 如果一个用户使用这种易受攻击的密钥来验证自己(服务器本身不需要是易受攻击的),攻击者可以通过尝试从一组应该相对较快的每个密钥来访问他的帐户。

最后,您不能依赖低熵“看起来像”好熵并且您还不知道检测它的方法这一事实。这被称为通过默默无闻的安全性,它不会带来任何好的安全性。事实上,不知道这种方式这一事实并不意味着没有其他人知道,如果一个攻击者这样做,后果可能是灾难性的(我猜 WEP 人最初认为他们的系统是安全的......)。

对于您对 VM 熵的担忧,您可能对此讨论感兴趣。基本上,一个简单而有效的解决方法是“用从其他地方的其他随机源获得的种子为每个 VM 播种;这就像将一些文件写入/dev/random“(引自 Thomas Pornin 的回答)一样简单。