Cloudflare 将 100 盏熔岩灯的照片转换为随机数据,以用于 SSL 加密。
阅读本文后,您将能够:
复制文章链接
随机性对于安全加密非常重要。计算机用来加密数据的每个新密钥都必须真正随机,以使攻击者无法找出密钥并解密数据。但是,计算机设计为基于给定的输入提供可预测的逻辑输出,无法生成创建不可预测加密密钥所需的随机数据。
要生成强加密所需要的不可预测的杂乱数据,计算机必须具有随机数据源。不过,“现实世界”是随机性的绝佳来源,因为物理世界中的事件是不可预测的。
正如大家期望的那样,熔岩灯始终是随机的。熔岩灯中的“熔岩”永远不会再次出现相同的形状,因此,观察一组熔岩灯是获取随机数据的不错来源。
为了收集这一数据,Cloudflare 在 Cloudflare 总部大厅的一面墙壁上安排了大约 100 盏熔岩灯,并且安装了一台朝向这些熔岩灯的相机。相机以固定间隔拍摄熔岩灯的照片,并将图像发送到 Cloudflare 服务器。实际上,所有数码图像实际上都由计算机存储为一系列数字,每个像素有其自己的数值,因此每一幅图像都会变成一串完全随机的数字,Cloudflare 服务器可以其为起点来创建安全加密密钥。
因此,在熔岩灯的帮助下,Cloudflare 能够向客户提供极强的(并且足够随机的)SSL/TLS 加密。考虑到超过数百万互联网资产使用了 Cloudflare,这一点尤其重要。
在密码学中,随机不只是指统计上的随机,它还意味着不可预测。
加密的数据看起来应该像完全随机的数据,因为可预测的数据是能被猜到的。如果存在某种模式,例如特定的值用于加密的频率高于其他值,或者值始终以一定的顺序出现,那么数学分析能够挑选出这种模式,从而使攻击者更容易地猜测到加密所用的密钥。基本而言,如果加密数据可以预测,那么它或许已遭到破坏。
加密过程本身是可预测的过程:加密后的数据加上正确的密钥等于解密后的数据,而且解密后的数据与加密之前的数据相同。但是,使用的加密密钥必须不可预测。
为了解为什么不可预测性为何如此重要,我们可以想象两位扑克玩家:鲍勃总是在有好牌时加注,牌不好时则弃牌(拒绝跟注)。爱丽丝则混合使用下注策略,因此没有明显的模式:有时在牌好时加注,有时满足于跟注,有时甚至会在牌不好时通过加大注来诈牌。如果爱丽丝和鲍勃参加同一届扑克锦标赛,爱丽丝的存活时间要比鲍勃更长,因为鲍勃太容易预测。对手很快就会知道鲍勃什么时候有好牌,并做出应对。即使看不到他的牌,他们也可以大致分辨出他手里的牌。
同样,即使攻击者看不到通过网络发送的“牌”(或加密的内容),但如果隐匿内容的方法太容易预测,他们仍然可以猜测到。
计算机以逻辑为基础运行。计算机程序基于 if-then 语句:如果满足某些条件,则执行指定的操作。如果程序的输入相同,那么每次都会产生相同的输出。
这是设计使然。输入应导致预期的输出,而不是意外的输出。想象一下,如果打印机打印出与文档中文本不同的随机,或者智能手机呼叫的电话号码与用户输入的不同,那就混乱不堪了。计算机的用处正是源于它的(相对)可靠性和可预测性。但是,在生成安全加密密钥时,这种可预测性成为了不利因素。
有些计算机程序擅长模拟随机性,但对创建加密密钥来说仍然不够。
一种称为伪随机数生成器(PRNG)的软件程序能够获取不可预测的输入,并用它来生成不可预测的输出。从理论上讲,PRNG 可以从随机输入产生无限的随机输出。
这种算法之所以称为“伪随机”而非“随机”,是因为它的输出实际上并不是完全随机的。为何会如此?主要有两个原因:
由于第 2 个原因,该算法不断需要新的随机输入。随机输入称为“密码种子”。
密码安全伪随机数生成器(或 CSPRNG)是满足更严格标准的 PRNG,能够更安全地用于加密。CSPRNG 满足 PRNG 不一定满足的两个要求:
如同 PRNG 一样,CSPRNG 需要以随机数据(密码种子)为起点,从中生成更多随机数据。
为了生成用于 SSL/TLS 加密的加密密钥,Cloudflare 使用 CSPRNG,并将从熔岩灯收集的数据作为密码种子的一部分。
密码种子是 CSPRNG 于生成随机数据的起点数据。尽管从理论上讲 CSPRNG 可以从单个密码种子产生无限的随机输出,但是定期更新密码种子要安全得多。攻击者最终可能会攻破初始的密码种子。另请记住,如果被提供相同的种子,CSPRNG 会再次产生完全相同的输出,因此攻击者可以复制随机输出。此外,即使是经过最严格测试的 CSPRNG,也无法保证无限期产生不可预测的结果。
通过使用熔岩灯,Cloudflare 可以不断获得新的加密种子数据。相机拍摄到的每张熔岩灯照片都是不同的,从而能产生可用作种子的不同随机数值序列。
许多操作系统都有自己的随机数据源来用于密码种子,例如来自用户操作(鼠标移动、键盘输入等),尽管它们获取数据的速度相对较慢。Cloudflare 将获取自熔岩灯的随机数据与 Linux 操作系统在两台不同机器上生成的数据混合在一起,以便在为 SSL/TLS 加密创建加密种子时最大化熵。
一般而言,“熵”表示无序或混乱。但是,熵在密码学中有一个特定的含义:它指的是不可预测性。密码学家实际上根据熵的位数来衡量给定数据集具有熵的大小。因此,Cloudflare 将熔岩灯墙称为“熵墙”。
因为熔岩灯墙位于 Cloudflare 总部繁忙的大厅中,所以这种情况一直存在。人们在大厅里进进出出,走过这些熔岩灯或在灯前面停下来聊天。这样的障碍物成为相机捕获的随机性的一部分,因此,部分遮挡相机的熔岩灯视线的人实际上有助于产生熵。
如果发生这种情况,Cloudflare 仍然可以从 Cloudflare 服务器上运行的 Linux 操作系统中获得另外两个随机来源。此外,Cloudflare 可以轻松对相机进行物理访问,因为它位于 Cloudflare 拥有的空间内,并且 Cloudflare 也可快速将其重新开机或根据需要进行更换。
Cloudflare 的另外两个主要办事处分别在伦敦和新加坡,并且每个办事处各自都有从现实世界输入中生成随机数据的方法。伦敦办事处从安装的双摆系统拍照(摆锤与摆锤相连,其运动在数学上不可预测);新加坡办事处则测量铀颗粒(足够小以至无害)的放射性衰变。
出乎意料,并不是。一家名为 Silicon Graphics 的公司在 1996 年设计了一个类似的系统,称为“Lavarand”,尽管其专利已过期。
如需了解有关 Cloudflare 熔岩灯墙的更多信息,请阅读以下两篇博客文章: