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