恩尼格码的发明和破解

2023-05-16

恩尼格码是二战德军所采用的电子加密机械

 

其基本组成可以分为三部分:

键盘,转子和显示器

键盘一共具有26个键,类似于今天的计算机键盘(显示起见,省略为6个)

转子实际上有3个,缩略起见只画了1个

显示器在最右边,当键盘上的键被按下时,字母被加密后所对应的小灯就会在显示器上亮起来

 

即按下a灯,B灯会亮,这就意味着a被加密成了B

同样的,b被加密成了A,c被加密成了D,d被加密成了F,e被加密成了E,f被加密成了C。

这种加密方式称为“简单替换算法”

 

“简单替换”在现实中很容易通过频率统计法破解,这就用到了转子。

转子的作用在于键盘上的一个键被按下时,相应的密文会在显示器上显示,然后转子的方向就会自动的转动一个字母的位置

 

例如,当连续的按下3个b时:

第一次键入b时,信号通过转子中的连线使得A灯亮了起来,然后转子转动一格;

第二次键入b时,它所对应的字母就变成了C;

同样的,第三次键入b时,灯E会变亮。

 

这里看到了恩尼格码的关键:这并不是一个简单替换算法,同一个字母b在明文的不同位置时,可以被不同的字母所替换,而密文中不同位置的同一个字母,可以代表明文中的不同字母。这就使得频率分析法没有用武之地了。这种加密方式被称为“复式替换密码

 

但是如果连续的键入6个键(实际有26个键),转子就会整整转一圈,回到原始的方向上,这时编码就和最初重复了。于是在实际的恩尼格码中,一共有3个转子(二战后期甚至有4个转子)

所以要在26*26*26=17576后才会重复原来的编码。

 

自此基础上,设计者巧妙地在三个转子的一端加上了反射器

 

如图所示,键盘和显示器中的相同字母被连到了一起。反射器和转子一样,把一个字母连在另一个字母上,但是并不转动。乍一看这个固定的反射器并没有作用,并不增加可以使用的编码数目,但是如果将它和解码联系起来就会发现这种设计的别具匠心之处:

当一个键被按下时,信号并不从键盘直接传到显示器,而是首先通过三个转子连成的一条线路,然后通过反射器回到3个转子,再通过另一条线路到达显示器上。例如,b键被按下时,D灯亮。

如果此时按下的不是b键而是d键,则信号会按照相反的方向,到达B灯。

也就是说,反射器虽然没有增加可能的不重复方向,但是使得编码过程和解码过程完全一致

 

在实际情况下:发信人首先要调整三个转子的方向,使其处于17576中的一个方向(其实转子的初始方向即为密钥,这是约定好的),然后依次键入明文,发送出去。解密方只需要使用一台相同的恩尼格码机,按照约定,将转子的方向调整至和发信方相同,依次键入得到的密文,就可以得到明文--这就是反射器的作用

我们也可以得到,反射器的一个副作用就是一个字母永远也不能被加密成它自己,因为反射器中的1个字母总是被连接到另外1个字母。

 

也就是说,转子的初始方向决定了整个密文的加密方式

虽然17576很大,但是也足够进行暴力破解。当然设计者也可以再多增加转子,但是我们发现,每增加一个转子,也只是使得转子的初始方向增加了26倍(即乘26),同样增加了转子也就增加了恩尼格码的体积和成本

这时设计者使得三个转子做得可以拆卸下来互相交换,这样一来初始方向的可能性变成了原来的六倍

即将3个转子编号为1、2、3,那么它们可以被放成,123-132-213-231-312-321一共六种不同的位置,也就是说,现在收发信息的双方除了要约定好转子的初始方向,还必须约定好六种排列中的一种。

不过增加6种转子的排列方式也并不能有效地回避暴力破解问题。

下一步设计者在键盘和第一转子之间增加了一个连接板,这块连接板允许使用者用一根连线把某个字母和另一个字母连起来,这样这个字母的信号在进入转子之前就会变成另一个字母的信号,这样的连线一共有6根。

这样就可以使得6对字母的信号互换,其他没有连线的字母保持不变。当然连线状况也需要约定好

那么由转子自身的初始方向,转子之间的位置,以及连接板连线的状况就组成了所有可能的密钥:

三个转子不同的方向为26*26*26=17576种;

三个转子之间的相对位置为6种;

连接板上两两交换6对字母的可能性很大,由排列组合可得为100391791500种;

于是一共具有17576*6*100391791500,大约1亿亿种可能性。

只要约定好上面的密钥,收发双方之间就可以简单的加密和解密,但是如果不知道密钥,破解出来基本没有可能。

 

我们总结一下可以发现,连线班对可能性的贡献最大,但是由于连线班本身是一个“简单替换”,非常容易被频率分析;转子的提供的可能虽然不多,但是其“复式替换”系统的设计,使得整个系统再也无法受到频率分析。这二者优势互补,增加了可能性,也使得暴力破解望而却步。(这是我认为恩尼格码机最出色,也是最有魅力的设计所在)。

 

“加密系统的保密性只应建立在对密钥的保密上,而不应该取决于加密算法的保密”。恩尼格码的设计使得,即使敌人获取了一台恩尼格码机,但是如果不知道密钥(即转子的初始方向,转子的相对位置以及连线板的连接情况),破解是不现实的。

 

在战争期间,如果每天只有一个密钥,那么难免被对方截获大量的以同一个密钥加密的信息,这对保密工作有害无益。尽管不知道对于恩尼格码机是否可以采用类似的方法,德国人还是留了个心眼。他们决定在当天密钥调整好的恩尼格码机上不直接加密要发送的明文,相反的,首先发送的是一个新的密钥

例如,在连线板的连接顺序和转子的顺序不改变的情况下,随机选择三个字母,输入两次,比如PEHPEH,加密为比如KIVNSE(注意复式加密的会被加密成不同的形式,第一次KIV,第二次NSE),然后发信方把KIVNSE放在电文的最前面,接着重新调整三个转子的初始方向到PEH,才开始继续加密。

这种方法的每一份电报都有属于自己的三个表示初始方向的密钥。输入两遍是为了纠错。

 

一直到图灵破解恩尼格码时,对于其的破译都采用的是雷杰夫斯基的方法,即利用每条密文最开始重复的密钥。如果德国人发觉这一点并取消,那么英国密码分析专家的破译手段就会毫无用处。图灵的任务就是找到另一种不必利用重复密钥的破译方法。

在发现德国人总是在早上6点发出天气预报,其中八成含有“天气”,也就是“Wetter”这个词,根据此前德国人天气预报的死板形式,图灵甚至能够准确的知道这个词具体在密文的哪个位置,这就使得图灵想到使用“候选单词”这个方法来破译恩尼格码电文。

如果在一篇密文中,图灵知道了Wetter这个词被加密成了ETJWPX,那么剩下的工作就是找到将Wetter加密成ETJWPX的初始位置,如果暴力破解,将会遇到1590亿种的组合。但是雷杰夫斯基的天才思想告诉图灵,必须将转子方向变化造成的问题和连接板交换字母造成的问题分开来考虑

假设图灵已经猜到了Wetter这个词被加密成了ETJWPX,那么存在一个字母循环圈:

 

图灵并不清楚在密文中出现这个候选单词时的转子状态,但是假设他猜对了这个候选单词,把这个候选单词起始时的转子方向记为S,那么在此时恩尼格码把w加密成了E;然后转子转到了下一个状态,假设为S+1,恩尼格码把e加密成T;在S+2方向上一个不属于这个循环的字母被加密了,暂且不去管它;接下来在S+3方向,恩尼格码把t加密成W。

图灵的绝妙思想是利用3台恩尼格码机将连线板效应消除!

也就是说将第一台恩尼格码显示器上的E和第二台恩尼格码显示器上的e连起来,又把第二台上的T和第三台上的t连起来,最后把第三台上的W和第一台上的w连起来(注意恩尼格码本身并没有区分大小写,只用来区分明文密文)

假设连接板上有关的交换字母的连线是这样的:

E<——>L1

T<——>L2

W<——>L3

现在假设字母w被输入第一台恩尼格码机,它先通过连接板变成了L3,然后通过三个转子经过反射器,再通过三个转子返回连接板;因为我们根据候选单词知道w此时会被加密成E,所以没有经过接线板前它一定是和E对应的L1;L1经过接线板变成E后,直接成了第二台恩尼格码机的输入。提醒一下,第二台恩尼格码机的转子方向是S+1,所以根据候选单词知道e此时会被加密成T,我们来看看具体是怎么回事。从第一台恩尼格码机来的e通过连接板变成了L1,再通过转子和反射器回来变成了连接板上和字母T对应的L2;通过连接板后变成了T,然后这个T又变成第三台恩尼格码机上的输入t。第三台恩尼格码机的转子方向是S+3,这个传送过来的t会被加密成E,具体的情况和上面第一第二台上的类似。我们发现现在三台恩尼格码机的线路组成了一个闭合回路,如果在里面加上一个灯泡,它就会亮起来。

这是我们发现,无论连接板上的连线究竟如何(也就是说无论L1,L2,L3是什么),只要转子的方向正确,这个回路就会闭合(小灯泡就会亮)。当然也需要找到连接板上的连线,但是这是一个简单替换,比如键入ETJWPX出来了tewwer,就说明w和t交换了,键入其他部分可以猜出其他字母的交换情况。

同时其他的问题也可以通过一定的技巧解决。

比如说即使找到了候选单词,也不一定能确定其在一整句话的位置。

但是根据反射器的构造我们发现,一个字母从来也不会被加密成它本身,可以用一句明文去逐渐的对应密文,找到有相同对应的情况就排除,其他的可以交给破译工具去尝试。

转载于:https://www.cnblogs.com/lzhdcyy/p/6556116.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

恩尼格码的发明和破解 的相关文章

  • 导航hover延迟

    function var hoverTimer outTimer 34 nav li 34 hover function var this 61 this clearTimeout outTimer hoverTimer 61 window
  • 用ctrl+鼠标滚动调节字体大小

    如此设置之后 xff0c 按住ctrl 43 鼠标滚动 xff0c 可以放大和变小代码的字号 转载于 https www cnblogs com dengyg200891 p 6063535 html
  • CentOS7 查看操作系统版本信息

    CentOS 查看操作系统版本信息 1 使用cat proc version uname 查看内核版本 root 64 CentOS7 cat proc version Linux version 3 10 0 957 el7 x86 64
  • wincc7.4安装授权 全(文件分享)

    链接 xff1a https pan baidu com s 1YJwbvetH1gFElu468TWuAQ 提取码 xff1a 6ood 转载于 https www cnblogs com hefengweiliang p 1113633
  • Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger' while attempting to activa...

    Unable to resolve service for type 39 Microsoft Extensions Logging ILogger 39 while attempting to activate 39 xxxxx Cont
  • python的两种运行方式

    python有两种运行方式 xff0c 第一种是交互式 xff0c 另一种是脚本式 xff0c 这里可能郁闷了 xff0c 啥叫脚本 xff1f xff1f 脚本可能会想到不重要的 xff0c 边角料啥的 xff0c 我们可以认为是一个大型
  • 机器人ROS系统学习随笔->2 RPLIDAR激光雷达使用

    一 驱动的安装 SLAMTEC官网下载激光雷达资料 xff1a http www slamtec com 本人用的是RPLIDAR A1的激光雷达 在下载界面下载相应的资料 xff0c sdk与固件及其他 二 安装 1 建立工作空间并编译
  • 蓝牙飞控数传套装(适合APM/Pixhaw/Pixhack/Pixhawk2飞控)

    SSC FK BL900是迅瞻电子初创的一款蓝牙 43 射频模块一体的飞控数传套装电台 xff0c 它内嵌入Digi的900HP模块和蓝牙模块 xff0c 对外提供XT60的电池供电接口 xff0c 支持5 28V的宽电压工作 xff0c
  • VC++ 编译过程

    一 前言 一开始编译C 43 43 代码的时候可能会对编译的错误觉得很难理解 xff0c 搞不清楚究竟是哪里错了 了解编译过程 xff0c 能够更好的处理编译错误 二 名词解释 编译单元 xff1a 当一个c或cpp文件在编译时 xff0c
  • PLC的ST编程方式--文本编程,简洁啊

    一 ST语言介绍 发现网上PLC的ST编程资料极少 不过 xff0c 道理也很简单 xff0c 因为做PLC的基本都是电气出身 xff0c 梯形图类似于继电器逻辑 xff0c 比较接近他们的习惯 ST属于文本编程 xff0c 符合程序员的习
  • stm32气压传感器 带探头的_基于STM32的真空度的测量装置的设计

    阮敬华 43 张忠伟 43 徐沛 43 李雪莲 43 阚茹男 摘 要 xff1a 采用USART串口通信 SPI通信作为核心技术 xff0c 通过气压和温湿度传感器对环境的真空值 温湿度参数进行数据采集 xff0c 将采集到的数据通过SD卡
  • Python 迭代器

    一 迭代器 迭代是访问集合元素的一种方式 迭代器是一个可以记住遍历的位置的对象 迭代器对象从集合的第一个元素开始访问 xff0c 直到所有的元素被访问完结束 迭代器只能往前不会后退 1 1 判断一个对象是否可迭代 可以使用 isinstan
  • EasyPlayerPro Windows播放器进行本地对讲喊话音频采集功能实现

    需求 在安防行业应用中 xff0c 除了在本地看到摄像机的视频和进行音频监听外 xff0c 还有一个重要的功能 xff0c 那就是对讲 EasyPlayerPro win为了减轻二次开发者的工作量 xff0c 将本地音频采集也进行了集成 x
  • 大端法、小端法、网络字节序

    关于字节序 大端法 小端法 的定义 UNXI网络编程 定义 xff1a 术语 小端 和 大端 表示多字节值的哪一端 小端或大端 存储在该值的起始地址 小端存在起始地址 xff0c 即是小端字节序 xff1b 大端存在起始地址 xff0c 即
  • 阿里云安全肖力:云原生安全构筑下一代企业安全架构

    34 数字经济的发展驱动越来越多的企业上云 xff0c 每个企业都会基于云原生安全能力构筑下一代企业安全架构 xff0c 完成从扁平到立体式架构的进化 xff0c 届时云原生安全技术红利也将加速释放 xff01 9月27日 xff0c 阿里
  • Vue 自定义按键修饰符

    如点击F2 触发某个事件 lt input type 61 34 button 34 name 61 34 34 id 61 34 34 value 61 34 添加 34 64 keyup f2 61 34 add 34 gt 自定义全局
  • android Studio keytool' 不是内部或外部命令,也不是可运行的程序 或批处理文件

    android Studio keytool 39 不是内部或外部命令 xff0c 也不是可运行的程序 或批处理文件 遇到这个问题好久了 xff0c 一直没解决今天搜集了大量的资料 xff0c 有的说什么Java没配置好 xff0c 不是扯
  • java -jar 运行springboot项目时内存设置

    java Xms64m JVM启动时的初始堆大小 Xmx128m 最大堆大小 Xmn64m 年轻代的大小 xff0c 其余的空间是老年代 XX MaxMetaspaceSize 61 128m XX CompressedClassSpace
  • Jupyter notebook 读取文件的问题

    Jupyter notebook只能打开当前目录下的数据集 xff08 txt CSV等 xff09 xff0c 所以需要把数据集倒导入到当前目录下 xff0c 导入的方法是 1 文件不大时 直接上传文件 pd read csv读取 2 文

随机推荐

  • MIUI目前为止最简单安装谷歌服务框架教程

    安装谷歌服务框架方法有很多 xff0c 比如用第三方 rec卡刷gapps包 用第三方工具安装 然而这些对于新手来说还是比较难的 xff01 我今天说的方法可以说是最简单的 xff1a 1 不需要修改文件 xff1b 2 不需要借助第三方软
  • 用docker安装emby的详细步骤

    搭建个人存储服务器NAS xff0c 媒体播放器少不了 群晖自带的Video Station据说没有Emby Plex好用 Plex是收费的 xff0c Emby是开源的 本文看似很长 实际上有一半篇幅是关于设置 亲测 xff0c 那些设置
  • ubuntu 下通过ftp命令下载文件

    连接 ftp 192 168 180 2 Connected to 192 168 180 2 Name 192 168 180 2 rivsidn admin Password 获取远端文件 ftp gt get test pdf loc
  • pycharm安装到32位操作系统

    在32位操作系统中安装pycharm过程中发现的一些问题 首先是下载了最新版本的pycharm安装后打开 xff0c 弹出未发现可执行的文件 xff0c 然后想到了其他的办法 1 下载最新版本的pycharm不能直接运行 xff0c 因此可
  • 遗忘的初境

    农历八月深夜的黎明朦胧昏黄 xff0c 林立在山雾中的坟地貌似并不太平 xff0c 白露轻风清不走香纸白烛烟气 这层孽障将要带着旧尘怨气破土而出 筹谋着一场突击 这支躲藏在大山幽月中的乡村透着光亮 一双双眼睛凝视着挂在横梁上昏暗的煤灯 泛白
  • 2019-2020-1 20175313 《信息安全系统设计基础》第二周学习总结

    目录 一 教材学习内容总结二 教材学习中的问题和解决过程三 心得体会四 学习进度条五 参考资料 一 教材学习内容总结 第二章内容 基本知识 重点和难点 二 教材学习中的问题和解决过程 问题1 xff1a 对教材49页上的代码进行验证时 xf
  • centos下通过conda安装pytorch

    一 安装anaconda anaconda安装简单 xff0c 只要确定自己的系统即可 xff0c 具体安装请参考这里 二 确定自己的系统版本 我的是centos cat etc redhat release 查看linux系统方法 xff
  • 论文中表格跨页处理

    https www jianshu com p 96a370384459 上面是跨页表格中带有表头的 我希望的样子是跨页不带表头并且第一张表有下横线 xff0c 第二张表有上横线 xff0c 第二张表头有 表XX XX xff08 续表 x
  • Aria2在Windows上如何安装配置使用

    一 下载所需的软件二 安装与使用三 Aria2的额外内容四 Aria2的使用五 Aria2与其它插件配合使用 一 下载所需的软件 可以从一下地址获取最新版本 GitHub xff1a https github com aria2 aria2
  • 银河麒麟操作系统常用问题及解决方法

    银河麒麟操作系统作为国内安全等级较高的国产操作系统 xff0c 很多用户都想自行安装体验 xff0c 自行安装很有可能遇到一些问题 xff0c 现在奉上可能遇到的问题及解决方案 xff0c 用户可自行查阅处理 xff01 xff01 常用问
  • 几种方式加速网页视频播放速度

    现在有不少视频网站 自带了播放加速功能 例如油管 bilibili 慕课等等 节省了很多看视频的时间 特别是看一些技术教程类的视频 不管是念ppt还是手把手演示 在自己付费的一些网站中 一些是自带播放器不支持视频加速的 因为已经被加速惯坏
  • dataframe指定位置插入行

    1 loc 函数可以定位行后 xff0c 并直接赋值插入 如下可见loc函数对直接改变原来行的值 df 61 pd DataFrame 39 动物 39 39 狗 39 39 猫 39 39 兔 39 39 数量 39 3 4 6 prin
  • Linux系统备份与还原

    Linux系统备份与还原 1 整盘备份与还原 1 1 记住几个这里要经常用到操作1 2 整盘克隆的方法 2 推荐 非整盘克隆的方法 2 1 备份系统2 2 还原系统 1 整盘备份与还原 1 1 记住几个这里要经常用到操作 查看存储设备 xf
  • VS2013如何添加LIb库及头文件的步骤

    在VS工程中 xff0c 添加c c 43 43 工程中外部头文件及库的基本步骤 xff1a 1 添加工程的头文件目录 xff1a 工程 属性 配置属性 c c 43 43 常规 附加包含目录 xff1a 加上头文件存放目录 2 添加文件引
  • composer.json和composer.lock到底是什么以及区别?

    composer方文档 xff1a https docs phpcomposer com 04 schema html 我们在做项目的时候 xff0c 总是要安装一些依赖 composer给我们提供了很多方便 直接运行composer in
  • VUE npm run build的项目出现跨域请求的问题npm run dev没有这个问题

    报错信息 Access to XMLHttpRequest at 39 http platformapi test lih elearning cn api v1 login 39 from origin 39 http www vue c
  • PHP message:filesize(): stat failed for 错误

    PHP message filesize stat failed for 错误 message filesize stat failed for F s2017 SinaImgUpload SinaImgUpload bin Debug T
  • PHP 开发者如何做好密码保护 & Laravel 底层密码存储和验证实现

    随着在线攻击的增多 xff0c 密码安全越来越重要 作为开发者我们要担负起安全管理 计算哈希和存储用户密码的责任 xff0c 不管应用是简单的游戏还是绝密商业文件的仓库 xff0c 都要做到这一点 PHP内置了一些工具 xff0c 让保护密
  • python 列表中的数字转为字符串

    1 list1 61 1 2 3 4 5 list1 61 str x for x in list1 2 list1 61 1 2 3 4 5 list1 61 list map str list1 转载于 https www cnblog
  • 恩尼格码的发明和破解

    恩尼格码是二战德军所采用的电子加密机械 其基本组成可以分为三部分 xff1a 键盘 xff0c 转子和显示器 键盘一共具有26个键 xff0c 类似于今天的计算机键盘 xff08 显示起见 xff0c 省略为6个 xff09 转子实际上有3