云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

域名交易_mysql数据库备份方案_优惠

小七 141 0

随机性101:生产中的拉瓦朗

云彩大堂的熔岩灯由@mahtin提供介绍你们中的一些人可能知道,在我们旧金山办公室的大厅里有一堵熔岩灯墙,我们用它来做密码。在这篇文章中,我们将探讨这是如何工作的。这篇文章假定没有技术背景。如需更深入地了解技术细节,请参阅LavaRand in Production:the Nitty Gritty technical details。背景密码学中的随机性正如我们在过去讨论过的,密码学依赖于生成随机数的能力,这些随机数既不可预测,又对任何对手保密。但是"随机"是一个相当棘手的术语;它在许多不同的领域中被用来表示稍微不同的东西。和所有这些领域一样,它在密码学中的应用是非常精确的。在某些领域,一个过程是随机的,只要它有正确的统计特性。例如,pi的数字被称为随机的,因为所有的数字序列都以相同的频率出现("15"和"38"一样频繁,"426"和"297"一样频繁,等等)。但对于密码学来说,这还不够——随机数必须是不可预测的。为了理解不可预测的含义,考虑所有的密码学都是基于信息不对称的。如果您试图安全地执行一些加密操作,那么您所担心的是有人—一个对手—会试图破坏您的安全性。唯一区别于对手的是你知道一些对手不知道的东西,而密码学的工作就是确保这种信息的不对称足以保证你的安全。让我们考虑一个简单的例子。想象一下,你和一个朋友想去看电影,但你不想让你的复仇女神知道你要去哪部电影(以免她出现妨碍你看电影!)。本周,轮到你选电影了。一旦你做出了选择,你需要给你的朋友发一条信息,告诉他你选择了哪部电影,但你需要确保即使你的复仇女神截获了信息,她也无法理解它说的是什么。你设计了以下方案:由于目前只有两部电影可供观看,你将其中一部标为A,另一部标为B。然后,当着你朋友的面,你掷硬币。你同意下表,根据你选择看什么电影以及硬币是正面(H)还是反面(T),你将发送哪种信息。稍后,一旦您决定要看哪部电影,您将使用此表向您的朋友发送加密消息,告诉他您选择了哪部电影。电影硬币消息AH"西班牙的雨主要停留在平原上。"AT"在赫特福德、赫里福德和汉普郡,飓风几乎从未发生过。"BH"在赫特福德、赫里福德和汉普郡,飓风几乎从未发生过。"BT"西班牙的雨主要停留在平原上。"如果你决定看电影B,而硬币正面朝上,你会传达这样一个信息:"在赫特福德、赫里福德和汉普郡,飓风几乎从未发生过。"因为你的朋友知道硬币是正面朝上的——事情发生时他就在那里——他知道你一定已经决定了看电影B。但是从你的复仇女神的角度考虑吧。她不知道抛硬币的结果——她只知道有50%的几率硬币正面朝上,50%的概率朝反面。因此,看到"在赫特福德,赫里福德和汉普郡,飓风几乎从不发生"的信息对她毫无帮助!有50%的几率硬币正面朝上(暗示着电影B),50%的几率出现在反面(暗示着电影a)。她什么都不知道,比以前知道的还要多!现在让我们回到不可预测性的概念。想象一下掷硬币的结果是完全可以预测的——比如说你的复仇女神设了一个诡计,第一次掷硬币时总是正面朝上,第二次掷硬币时是反面,第三次掷硬币时总是正面朝上,等等。既然她第一次看到的是一个硬币,她肯定会100%的机会知道。尽管"诡计硬币"仍然表现出"随机性"的一些基本属性,正如这个术语在统计学领域中使用的那样——它出现的次数和出现的反面一样多——但它是可预测的,这使得它对密码学来说毫无用处。要点:当我们在密码学的上下文中说随机时,我们指的是不可预测的。计算中的随机性不幸的是,对于密码学家来说,如果有一件事计算机擅长,那就是可预测性。它们可以执行相同的代码一百万次,只要每次都给它们相同的输入,它们就会得到相同的输出。这对可靠性非常好,但是当涉及到密码学时却很棘手——毕竟,我们需要不可预测性!这个问题的解决方案是加密安全的伪随机数生成器(CSPRNGs)。CSPRNGs是一种算法,它提供了一个本身不可预测的输入,产生更大的输出流,这也是不可预测的。这个流可以无限期地扩展,在将来的任何时候都可以产生所需的输出。换言之,如果你将一枚硬币掷几次(这是一个众所周知的不可预测的过程),然后将这些抛硬币的输出作为CSPRNG的输入,那么一个无法预测这些抛硬币的输出的对手也将无法预测CSPRNG的输出—无论消耗了多少输出来自CSPRNG。但即使CSPRNGs是一个非常强大的工具,它们只是等式的一半-它们仍然需要不可预测的输入来运行。但正如我们所说,计算机并不是不可预测的,所以我们不是又回到原点了吗?嗯,不完全是。事实证明,计算机通常确实有一些不可预测的来源,它们可以使用,但速度很慢。我们能做的是将收集不可预测输入的缓慢过程与CSPRNG相结合,CSPRNG可以更快地获取输入并产生更大数量的输入,我们可以满足我们所有的随机性需求!但是计算机从哪里得到如此不可预测的输入,甚至是缓慢的?答案是真实的世界。虽然计算机为程序员提供了一个很好的简化世界,但真实的、物理的计算机仍然存在于真实的物理世界中。这个世界是不可预测的。计算机有各种各样的方式从现实世界中获取输入——温度传感器、键盘、网络接口等等。所有这些都提供了对真实世界进行测量的能力,而且所有这些测量都有一定程度的固有误差。我们稍后会解释,不准确和不可预测是同一回事,这是可以使用的!不可预测随机性的常见来源包括高精度测量CPU的温度,高精度测量键盘上击键的时间,等等。要想知道这是如何被用来产生不可预测的随机性的,考虑一下这个问题,"我坐的房间的温度是多少现在就进去?"你可以估计在几度之内,比如说,在70到75华氏度之间。但是你可能不知道温度精确到小数点后2位,是73.42度还是73.47度?通过高精度测量温度,然后只使用测量值的低阶数字,你可以通过观察你周围的世界得到高度不可预测的随机性。电脑也是。所以,回顾一下:密码学中使用的随机性需要是不可预测的。计算机可以通过测量环境来慢慢地获得少量不可预测的随机性。计算机可以通过使用CSPRNG来极大地扩展这种随机性,它可以迅速地将其转化为大量不可预测的随机性。对冲你的赌注如果说有一件事是密码学家需要警惕的,那就是确定性。密码系统通常显示出比最初认为的安全性要低,我们不断更新我们对在什么情况下使用什么算法是安全的理解。因此,密码学家喜欢使用比他们认为必要的更多的安全性来对冲他们的赌注,以防他们的一个假设是错误的。这有点像密码学家的工程实践版本,即设计出的建筑能够承受比他们想象中要多得多的重量、风或热。当涉及到随机性时,这种对冲通常采取混合的形式。不可预测的随机值有一个很好的特性:如果它们以正确的方式与更不可预测的随机值混合,那么结果至少与任何一个输入一样不可预测。这意味着,如果将高度不可预测的随机值与某种程度上可预测的随机值混合,结果将是高度不可预测的值。此混合属性很有用,因为它允许您混合来自多个源的不可预测的随机值,并且如果您后来发现其中一个源的不可预测性比您最初想象的要小,那么它仍然可以-其他源会伸出援手。拉瓦兰在Cloudflare,我们在世界各地的数据中心拥有数千台计算机,每台计算机都需要加密随机性。历史上,他们使用我们运行的操作系统Linux提供的默认机制来获得这种随机性。但作为一个优秀的密码学家,我们总是在试图对冲我们的赌注。我们需要一个系统来确保即使获取随机性的默认机制有缺陷,我们仍然是安全的。我们就是这样想到拉瓦兰的。从摄像机看到的景象LavaRand是一个使用熔岩灯作为生产服务器随机性的第二来源的系统。圣弗朗西斯大厅的熔岩灯墙