第六十八章弥补漏洞
在上一个位面中,很多军迷都对英国从被击沉的德国潜艇上获得“恩尼格玛”密码机实物和密码本,从而破译德军密码的故事津津乐道,事实上,密码机实物和一部分密码本被英国获得也确实加快了盟军破译密码的进程。
但是在海伦娜看来,德军“恩尼格玛”密码体系被对手破译的主要原因并不在这儿。“恩尼格玛”密码机自身设计上的缺陷和德军在使用上的漏洞才是密码被破译的根本原因,而密码机实物和密码本被对手获得只不过是让对手能更方便地找到这些缺陷和漏洞罢了。
让我们来用对城池的攻防来作个比喻:“恩尼格玛”密码体系就好比德国建造的一座城池,英国负责破译密码的工程师们就好比一支攻城的军队。而密码机和密码本的泄露就好比让这支攻城的军队得知了西边的一段城墙在建造时偷工减料了,于是攻城的军队集中力量攻击那段薄弱的西边城墙,终于将这座城池给攻打了下来。
现在让我们试问,这座城池被攻破,仅仅是因为城墙西段的薄弱环节被对手得知了吗?我想绝大多数人都会明白西段城墙在建造时的偷工减料才是城破的主因吧?因为即使城墙的弱点没有被泄露,攻城一方通过反复的试探性攻城,也总是能试探出城墙的薄弱点之所在的!城墙的弱点被提前泄露也仅仅是加速了城池被攻克的进程罢了。
因此,一座城池的安全不能寄托在城墙结构不被敌方知晓的基础上,而必须建立在敌人即使知道城墙结构也找不到容易利用的弱点上!
密码的攻防和城池的攻防其实是同样的道理。一个密码体系的保密性不能仅仅建立在加密机制本身的保密性上,而必须建立在对密钥生成和分发的保密性上!这样即使对手偶然拿到了完整的密码机和密码本,也难以找到可以持续利用的破绽。就像*********奥古斯特·柯克霍夫说的那样:密码机制的安全性不依赖于算法的保密性,密码系统应该就算被所有人知道系统的运作步骤,只要密钥不被泄露,就仍是安全的。
那么现在问题来了,“恩尼格玛”密码机明明有上亿亿种可能的设置,而且采用一次一密的加密方式,它的密钥怎么就不安全了呢?下面我们将继续通过类比来说明这个问题:
很多人都用过带有机械式密码锁的旅行箱。假设使用者是一个比较懒惰的人,那么他可能每次都使用同一个密码(很可能就是他自己的生日或者电话号码),然后即使更换密码往往也只是将密码锁的转子拨动少数几格。我们甚至不需要任何专业的密码学知识,仅仅凭借直觉就能知道这种密码设置方法蕴含的潜在风险。因为使用同一个密码使得密码出现了重复,只把转子拨动几格则破坏了密码分布可能性的均匀性。上一个位面的德军在使用恩尼格玛机时,犯下的错误很多都和上面那个懒惰的旅行箱使用者犯下的错误类似。
具体的错误包括:每次发送密码时为了纠错发两遍啦(这个后来改了)、密码使用键盘上随手敲出的连续字母啦,如此等等。更严重的问题是古板的德国人每次发送电文的格式都非常之标准,往往都是按照固定的顺序交代时间、地点、天气、人物、事件……这还不算,很多电文到临结尾了还不忘发挥千里送人头的精神,加上一句画蛇添足的“Heil!”。
针对这个问题,海伦娜的解决方案是引入伪随机数机制,具体做法是先取一个真正的随机数作为的“种子”(比如当前的毫秒数),然后将这个“种子”自乘,截取乘积的中间的一部分作为下一个“种子”,然后不断重复这一过程,这样就得到了大量的伪随机数。
每次通过“恩尼格玛”发送信息时,这些伪随机数不仅用来规定密钥,而且用来规定行文格式。具体做法是将时间、地点、天气、人物、事件这些要素全部模块化,然后通过一组伪随机数来规定这些模块排列的先后顺序。必要时还可以将一部分乱码作为模块插入这些有用的要素模块中间,甚至单词之间,由于人脑可以很容易分辨出有用信息和乱码,所以这样做并不会对接收方的阅读产生太大影响。事实上,后世为了防止机器发帖所用的验证码也是这个原理,比如将一个成语的顺序打乱,再给它周围加上一些噪点,让你来识别。验证码的本质就是依靠人脑对不规则事物的归纳能力来打败计算机的运算能力。
依靠伪随机数来设置密码和行文顺序最大的好处就是杜绝了人类在长期重复劳动中形成的路径依赖以及行为惰性。将密码和行文顺序的随机性完全交给冷酷无情的数学模型来执行。不过伪随机数和真随机数毕竟有差别,生成的伪随机数达到一定数量后,必然会出现重复(只要已经使用过的种子复现,循环就开始了)。所以每隔一段时间后必须更换原始种子或者更换伪随机数的生成算法。
如果说以上问题都是人为的失误的话,下面这个问题就是“恩尼格玛”密码机自身的缺陷了,那就是一个字母永远无法被加密成它自身。比如说“A”可以被加密为从“B”到“Z”的任何一个字母,但就是无法被加密成“A”,出现这种情况的原因恰恰是“恩尼格玛”密码机的三大核心元件之一的反射器。因为反射器可以让电流从另一条任意路径返回,但就是不能使得电流从原路返回。
解决这个问题的方法之一是再加一个专门转子,这个转子的两面各拥有78个触点,这些触点中只有任意三个触点和它正对面的触点有导线联通,转子两编的触点分别和一个电极接触,而这两个电极分别有连接按键开关和指示灯。没当按下按键时,该转子也被拨转,在大部分时候,该转子都是没有作用的,但只要有导线和对面触点连接的触点旋转到电极位置,电流回路就会被连通,和开关相对应的指示灯亮起,该字母就被加密为其自身了。而任何一个字母被加密为自身的概率正好是1/26。
经过海伦娜的以上改进,“恩尼格玛”密码系统的安全性更升了不止一个数量级,但在二战条件下是不是不能被破解,海伦娜还真不敢打包票。毕竟“恩尼格玛”加密系统还是有一些固有缺陷是无法解决的。
请收藏本站:https://www.biqu4.cc。笔趣阁手机版:https://m.biqu4.cc
但是在海伦娜看来,德军“恩尼格玛”密码体系被对手破译的主要原因并不在这儿。“恩尼格玛”密码机自身设计上的缺陷和德军在使用上的漏洞才是密码被破译的根本原因,而密码机实物和密码本被对手获得只不过是让对手能更方便地找到这些缺陷和漏洞罢了。
让我们来用对城池的攻防来作个比喻:“恩尼格玛”密码体系就好比德国建造的一座城池,英国负责破译密码的工程师们就好比一支攻城的军队。而密码机和密码本的泄露就好比让这支攻城的军队得知了西边的一段城墙在建造时偷工减料了,于是攻城的军队集中力量攻击那段薄弱的西边城墙,终于将这座城池给攻打了下来。
现在让我们试问,这座城池被攻破,仅仅是因为城墙西段的薄弱环节被对手得知了吗?我想绝大多数人都会明白西段城墙在建造时的偷工减料才是城破的主因吧?因为即使城墙的弱点没有被泄露,攻城一方通过反复的试探性攻城,也总是能试探出城墙的薄弱点之所在的!城墙的弱点被提前泄露也仅仅是加速了城池被攻克的进程罢了。
因此,一座城池的安全不能寄托在城墙结构不被敌方知晓的基础上,而必须建立在敌人即使知道城墙结构也找不到容易利用的弱点上!
密码的攻防和城池的攻防其实是同样的道理。一个密码体系的保密性不能仅仅建立在加密机制本身的保密性上,而必须建立在对密钥生成和分发的保密性上!这样即使对手偶然拿到了完整的密码机和密码本,也难以找到可以持续利用的破绽。就像*********奥古斯特·柯克霍夫说的那样:密码机制的安全性不依赖于算法的保密性,密码系统应该就算被所有人知道系统的运作步骤,只要密钥不被泄露,就仍是安全的。
那么现在问题来了,“恩尼格玛”密码机明明有上亿亿种可能的设置,而且采用一次一密的加密方式,它的密钥怎么就不安全了呢?下面我们将继续通过类比来说明这个问题:
很多人都用过带有机械式密码锁的旅行箱。假设使用者是一个比较懒惰的人,那么他可能每次都使用同一个密码(很可能就是他自己的生日或者电话号码),然后即使更换密码往往也只是将密码锁的转子拨动少数几格。我们甚至不需要任何专业的密码学知识,仅仅凭借直觉就能知道这种密码设置方法蕴含的潜在风险。因为使用同一个密码使得密码出现了重复,只把转子拨动几格则破坏了密码分布可能性的均匀性。上一个位面的德军在使用恩尼格玛机时,犯下的错误很多都和上面那个懒惰的旅行箱使用者犯下的错误类似。
具体的错误包括:每次发送密码时为了纠错发两遍啦(这个后来改了)、密码使用键盘上随手敲出的连续字母啦,如此等等。更严重的问题是古板的德国人每次发送电文的格式都非常之标准,往往都是按照固定的顺序交代时间、地点、天气、人物、事件……这还不算,很多电文到临结尾了还不忘发挥千里送人头的精神,加上一句画蛇添足的“Heil!”。
针对这个问题,海伦娜的解决方案是引入伪随机数机制,具体做法是先取一个真正的随机数作为的“种子”(比如当前的毫秒数),然后将这个“种子”自乘,截取乘积的中间的一部分作为下一个“种子”,然后不断重复这一过程,这样就得到了大量的伪随机数。
每次通过“恩尼格玛”发送信息时,这些伪随机数不仅用来规定密钥,而且用来规定行文格式。具体做法是将时间、地点、天气、人物、事件这些要素全部模块化,然后通过一组伪随机数来规定这些模块排列的先后顺序。必要时还可以将一部分乱码作为模块插入这些有用的要素模块中间,甚至单词之间,由于人脑可以很容易分辨出有用信息和乱码,所以这样做并不会对接收方的阅读产生太大影响。事实上,后世为了防止机器发帖所用的验证码也是这个原理,比如将一个成语的顺序打乱,再给它周围加上一些噪点,让你来识别。验证码的本质就是依靠人脑对不规则事物的归纳能力来打败计算机的运算能力。
依靠伪随机数来设置密码和行文顺序最大的好处就是杜绝了人类在长期重复劳动中形成的路径依赖以及行为惰性。将密码和行文顺序的随机性完全交给冷酷无情的数学模型来执行。不过伪随机数和真随机数毕竟有差别,生成的伪随机数达到一定数量后,必然会出现重复(只要已经使用过的种子复现,循环就开始了)。所以每隔一段时间后必须更换原始种子或者更换伪随机数的生成算法。
如果说以上问题都是人为的失误的话,下面这个问题就是“恩尼格玛”密码机自身的缺陷了,那就是一个字母永远无法被加密成它自身。比如说“A”可以被加密为从“B”到“Z”的任何一个字母,但就是无法被加密成“A”,出现这种情况的原因恰恰是“恩尼格玛”密码机的三大核心元件之一的反射器。因为反射器可以让电流从另一条任意路径返回,但就是不能使得电流从原路返回。
解决这个问题的方法之一是再加一个专门转子,这个转子的两面各拥有78个触点,这些触点中只有任意三个触点和它正对面的触点有导线联通,转子两编的触点分别和一个电极接触,而这两个电极分别有连接按键开关和指示灯。没当按下按键时,该转子也被拨转,在大部分时候,该转子都是没有作用的,但只要有导线和对面触点连接的触点旋转到电极位置,电流回路就会被连通,和开关相对应的指示灯亮起,该字母就被加密为其自身了。而任何一个字母被加密为自身的概率正好是1/26。
经过海伦娜的以上改进,“恩尼格玛”密码系统的安全性更升了不止一个数量级,但在二战条件下是不是不能被破解,海伦娜还真不敢打包票。毕竟“恩尼格玛”加密系统还是有一些固有缺陷是无法解决的。
请收藏本站:https://www.biqu4.cc。笔趣阁手机版:https://m.biqu4.cc