如果你想深入了解区块链和区块链项目,你将不可避免地需要了解密码学。区块链是密码学的综合应用。如果你懂密码学,你就能真正理解区块链。在我们关尚力财经小编2022于密码学起源的科普文章中,介绍了经典的加密方法,从凯撒密码到多表密码,还有一次性加密。本文将与大家分享第一台实现一次性加密的加密机和伪随机数发生器。
二战初期,法西斯的整体战争实力其实远不如协约国。而德国和日本采取了大量的奇袭战术,在二战初期先发制人,取得了一定的战争优势。为了有效实施奇袭战术,情报非常关键,因此如何保证情报的安全性是二战时期密码学的主要目标。我们在上一篇文章中提到,为了保证信息的绝对安全,需要对信息进行一次一密的加密,即随机加密每个字母。理想情况下,这台机器会对每个输入的字母进行随机移位,然后输出加密的字母。
当时最先进的机器,被称为转子加密机,很好地实现了一次一个加密。原理其实和大家熟悉的里程表很像。
(低单位的轮子转一圈,高单位的轮子转一圈。)里程表机我们都很清楚,一周重复一次需要很长时间。想象一下,我们把里程表的轮子上的数字打乱,当它没有向前滴答一次的时候,我们把转子上的每一个数字加起来,得到排量数,然后用排量加密我们要加密的字母。这是转子加密机的一般原理。
加密器和接收器可以按照以下方法生成相同的置换序列:首先需要共享同一台机器,然后约定初始状态。这被定义为机器代码设置,然后他们将各自的机器调整到相同的位置,最后,他们继续做相同的操作以获得相同的序列。对于每个转子具有26个数字的三个转子,通过转子26的第三次幂(17,576个数字)旋转的每个序列的位移序列将被重复。并且每个转子的位置等于序列中的相应位置。初始的机器状态称为机器码设置,所有机器码设置的集合称为机器码空间。如果初始机器设置的方法增加,机器代码空间尚力财经小编2022将增加。当我们选择一个关键设置时,我们在这个空间中选择一个起点。如果暴露了密钥设置,整个加密序列就会暴露。所以这种转子加密机的安全性取决于机器码空间的大小和机器码设置的随机性。第二次世界大战期间,纳粹德国使用的最重要的加密技术之一是名为“谜”的加密机。
战争接近尾声时,英格玛可以有超过1.5亿种设定方式。这让德国人相信盟军已经获得了恩尼格玛机,无法验证所有可能的机器码设置。对于使用Enigma进行通信的双方来说,他们需要首先共享日常机器代码设置,这使得他们能够将他们的机器调整到相同的位置。这个协议在战争期间被反复修改过,但通常都是分发给分发密钥表上的所有运营商。操作人员每天都会把当天的设置剪下来,上面会告诉他们当天机器的配置,比如用哪个转子,转子的顺序,然后机器代码设置用完后会销毁。 然而,对于运营商来说,还有至关重要的一步。在沟通之前,他们会选择每个转子的初始位置,而一些懒惰的操作者会犯一个非常简单的错误,这和我们锁自行车机械锁时犯的错误是一样的。我们倾向于将转子从初始位置移动几次,或者重复使用一个公共密码,这破坏了初始转子位置的均匀分布。经过反复观察,这个人为的低级错误导致了英格玛的最终破解,间接影响了战争的走向。正如我们所看到的,一次一个秘密的最大问题是我们必须提前共享这么长的密钥。为了解决这个问题,我们需要引入伪随机数。
在了解伪随机数之前,我们先来看看真随机数。事实上,随机波动在我们的物理世界中无处不在。通过测量称为噪声的随机波动,我们可以生成真正的随机数。测量噪声的过程叫做采样,通过采样我们可以得到一个随机数。但是,相对来说,机器其实是确定的,它们的操作是可预测的,可重复的。1946年,冯诺依曼参与了军方的氢弹设计,并应用了一台名为ENIAC的计算机。他打算反复计算核聚变过程的模拟。但是,它需要生成随机数以便快速访问,并确保这些数字是可重复的。然而,ENIAC的内存相当有限,不可能存储长的随机序列。因此,冯诺依曼设计了一种算法来机械地模仿随机性。算法如下:首先,选择一个称为种子的实数随机数。这个数字可以来自对噪声的测量,比如当前时间的毫秒数,它被称为种子。然后,把这个种子作为输入,做一个简单的计算3354把种子和自己相乘,然后输出这个结果的中间部分。接下来,使用这个输出作为下一个种子,并根据需要重复这个过程。
这叫打分法,是大量伪随机数生成器中的一种。那么,随机产生的序列和伪随机产生的序列有什么区别呢?最核心的区别是,如果伪随机数达到某个数,最终会重复序列。当之前使用的种子号出现在算法中时,循环开始。伪随机数序列重复之前的长度称为周期,周期严格受初始种子长度的限制。例如,如果我们使用两位数的种子,算法在重复循环之前最多可以生成100个数字,三位数的种子在重复循环之前可以生成1000个数字,四位数的种子在重复循环之前可以生成10000个数字。然而,如果我们使用足够大的种子,序列中的数字将在重复循环之前扩展到万亿。还有一个关键的区别很重要,就是当你伪随机生成数字的时候,会有一些序列无法生成。例如,如果加密机Alice产生一个具有20个位移的真正随机序列,它将等同于从所有可能的位移序列的堆栈中随机选择一个序列。这个堆栈包含了26的20次方个可能性,这是个天文数字。但是,如果加密器使用一个4比特的随机种子来生成一个20比特的伪随机数序列,那么他只能在10000个可能的结果中进行均等的选择,也就是说她只能生成10000个不同的序列。当我们从随机位移转移到伪随机位移时,相当于把密钥空间减少到一个相对较小的种子空间。伪随机数的概念使得加密器和接收端不需要事先共享整个随机位移序列,而只需要共享一个相对较短的随机种子,必要时再扩展成同一个随机序列。但是如果他们还是不能见面分享这颗种子,他们该怎么办?这是现代加密技术最重要的内容,也是区块链加密的核心。我们将在下一篇文章中重点讨论它。 (来源:猎豹区块链安全)
标签: 2022