五千年(敝帚自珍)

主题:【原创】密码传奇(三):12、纯技术篇之活拆了ENIGMA (3) -- 1001n

共:💬32 🌺51
分页树展主题 · 全看首页 上页
/ 3
下页 末页
  • 家园 【原创】密码传奇(三):12、纯技术篇之活拆了ENIGMA (3)

    以下,都是详细剖析ENIGMA机理的;这些地方看了难免头痛,喜欢听后续故事的兄弟,再耐心等一下吧:)

    又,各位兄弟反映发长帖会被莫名其妙地截短。我这篇【活拆了ENIGMA】已经写完了,但是太长,先发前面一段试试看吧:)

    ---------------------------------------------

    上文说到,ENIGMA机器内有个转轮组;这转轮组需要靠3个转轮组合而成。每个转轮都有26个可能的旋转位置。那么整体而言,总共的变化可能,是不是26 * 26 * 26 = 17576呢?

    要说清楚这个问题,光靠想像是不成的;我们还必须把它安装在ENIGMA里,真正考察一下转轮组的运行过程,才能得出正确的结论。不过,为了便于理解,1001n打算先以石英钟为例子,简单说说步进进位的关系。

    石英钟的表盘上,有秒针、分针和时针。其中,秒针从0开始一格格运动,1、2、3、4……直到59。这一下下地运动,我们称之为步进

    当秒针运转到59,继续步进的时候,就会再次指向0——在这个瞬间,分针跟着前进一格。在这个例子中,59这个位置,我们就称为进位点

    秒针从0转到59,达到进位点;再次步进一格时,秒针进入下一圈,具体说也就是数字0的位置。而越过进位点的这一次步进,秒针将带动它上一级的分针也步进一次;这个过程,就是进位

    同理,分针到达59这个进位点时,再步进一次就将带动时针步进一次;换言之,分针也进位一次。

    综上所述,进位点本身并不是进位这一动作的发生点——只有再次步进越过进位点,进位这一行为才会发生

    回到ENIGMA转轮组,情况相当近似;只不过,这里我们以字母来代替数字。前文说过,在很多型号的转轮上,刻在它的字母轮箍上的是数字;这里为了叙述方便起见,就一律都假设为字母吧,反正机理根本就是一样的。

    我们假设:一个转轮的进位点是字母Z。那么,当它继续步进到下一圈的A时,进位就发生了——具体表现则是,相邻的转轮因此也步进一格。

    对于ENIGMA机器来讲,转轮的步进是和输入直接相关的:操作员每输入一个字母,转轮就将旋转一格。因此,当转轮步进到Z时,操作员再次输入一个字母,就将引发进位;而整体地来看进位的结果,就是会有两个转轮同时步进一格——非常类似秒针和分针同时步进的那一下。

    在实际应用中,转轮上的进位点并不是固定死的,而是可以调节的;这个用来调节进位点的装置,就是凹口圈。

    凹口圈也叫缺口环notched ring),在每个转轮上都有;它是个空心的圈,套在转轮的左侧,如下图

    点看全图
    外链图片需谨慎,可能会被源头改

    这是转轮图的局部。

    之所以倒过来发,是因为在使用时,操作员面对的转轮应该是这么放置的

    顾名思义,凹口圈上有个凹口。当凹口圈和转轮组合起来以后,我们就会发现:这个凹口正好是一个字母的宽度;而对应这个凹口的字母,就是该转轮的进位点

    例如,这个凹口对应字母B,那么当这个转轮转过A,到达B时就到达了进位点;再次输入一个字母,该转轮由B步进为C的同时,相邻的下一个转轮将跟随步进一次,形成进位。

    同时,由于凹口圈是可以手动旋转的,因此,操作员可以把它旋转到任意一个字母的位置。这就是说,操作员可以临时决定这个转轮的进位点。比如我们把它转到Q,那么,这个转轮步进到Q以后,再次步进到R时,就将带动相邻的转轮也步进一次,形成进位。

    不难看出,“进位点可以通过手工设置”这一条,给转轮组的运行规律和整个ENIGMA的加密,都带来了众多可能的变化。也正是因为这个原因,凹口圈这个东西才不是白加的附件:如果没有它,出厂时所有同型号的转轮都被统一固定了进位点,那么必然导致所有机器的进位规律都一样——这也实在太便宜了敌国的密码分析人员。。。

    不仅如此。由于可以随时调节进位点,转轮步进的规律性越发变得诡异——不仅可以做到不同型机器规律不同(转轮型号不同,进位点不同),同型机器规律不同(同型号转轮进位点设置不同),还可以做到操作同一台机器时,加密这份报文和那份报文时的规律也不同——甚至如果你愿意的话,完全可以在加密某一报文时,让上下文之间的加密规律也不同……

    ——不能不承认:这对密码分析人员来说,实在是个非常有特色的杀着!

    看到这里,有兄弟或许会说了:转轮组如此加密,并没有涉及其它古怪变化;三个转轮导致的总变化量,依然应该是26 * 26 * 26啊——你前面怎么说,这么算不对呢?

    别急,转轮组工作起来,确实还是有古怪变化的——这个古怪的机制,就是所谓的双重步进Double Stepping)。

    为了说明这个双重步进,我们还是暂时把注意力转移到石英钟上,看看如果是双重步进的话,又会发生什么吧。

    先看看正常的步进,应该是这个样子:

    时钟状态:01时 59分 59秒

    增加一秒:02时 00分 00秒

    再增一秒:02时 00分 01秒

    再加一秒:02时 00分 02秒

    现在是双重步进了:

    时钟状态:01时 59分 59秒

    增加一秒:02时 00分 00秒

    再增一秒:02时 01分 01秒 ←看分针

    再增一秒:02时 01分 02秒

    玄机就在这里:分针到达进位点后,再次步进则带动时针步进,形成进位,这不希奇——而时针进位之后,在下次接到输入时,还会反过来带动分针,让分针再次步进一位——就有点裹挟的味道了,呵呵。

    谁家的石英钟要是这么走,估计各位非砸了它不可;可ENIGMA的转轮组,却实实在在地是这么运行的。

    现在,我们来分析一下转轮组的运行吧。当你面前打开一部ENIGMA时候,会观察到机器内的转轮组;这时候,我们把你左手边的转轮命名为1号转轮,中间的一个是2号转轮,右手边的则是3号转轮——这个命名法,跟当年的命名规则完全一致,除了没用罗马数字以外,呵呵。

    要特别留神一点的是:操作员输入的字母信号,并不是从左,也就是从1号转轮流入转轮组的;而是从右,即3号转轮流入的。换言之,如果你正襟危坐在ENIGMA前,那么它的转轮组对一个输入的字母信息,加密的流程就应该是

    后续加密步骤 …… ← 1 ← 2 ← 3 ← …… 输入字母

    这样的。各位兄弟看这流程示意估计不大适应:从右往左,这怎么跟阅读顺序整个一满拧啊——没办法,现在不拧,后面更容易乱;现在拧了,后面其实还是容易理解地,嘿嘿。。。

    所以,充当石英钟秒针的角色,就是3号转轮;而分针,就是2号转轮;时针,则是1号转轮。

    现在,我们假定1、2、3号转轮的凹口圈,其凹口分别设定指向字母E、F、G;即1的进位点为E,2的进位点为F,3的进位点为G。

    在此基础上,我们再假设当前转轮组的初始位置为A、A、A。那么,现在转轮组的情况就是

    ━━━━━━━━━━━━━━━━━━━━━━━━━━

    1(凹口E) 2(凹口F) 3(凹口G)

    初始位置 A A A

    在纸面上模拟一下它的加密过程,就是这样的——其中每一行,都表示操作员一次新输入后的状态

    A A B

    A A C

    A A D

    第一种情况 A A E

    (单纯进位) A A F

    A A G ←注意,3已经到了进位点

    A B H ←进位完成,2步进一格;3的步进,则是因为新输入

    A B I

    …… 继续加密 …… 继续加密 ……

    A E F

    A E G ←注意,3再次达到进位点

    第二种情况 A F H ←3对2的进位完成;注意,2也达到了进位点

    (双重步进) B G I ←2步进的同时产生进位,带动1步进

    B G J

    …… 继续加密 …… 继续加密 ……

    D E E

    D E F

    第三种情况 D E G ←3达到进位点,即将进位

    (单纯进位) D F H ←2步进,本身也达到进位点

    E G I ←2步进的同时产生进位,带动1步进;1也到达进位点

    E G J ←1并未进位,特殊情况结束

    E G K

    E G L

    ━━━━━━━━━━━━━━━━━━━━━━━━━━

    累死我了——这东西真是理解不难,表达麻烦啊……

    先让我们看第一种情况,即单纯步进的情况吧。在单纯进位的时候,低位转轮(即相对在右的转轮)步进,将通过进位的方式,带动高级转轮(即相对在左的直接相邻转轮)步进。

    实际上,在ENIGMA转轮组中,这样的情况只出现于右边和中间的转轮,即2、3号转轮之间

    其次就是第二种情况,双重步进。在某个转轮“上有老,下有小”的时候,双重步进才会发生;而在这三个转轮中,满足这一条件的,只有2号转轮。当2号转轮到达进位点,即将进位时,双重步进将按以下方式发生:

    ① 接受3的进位推动,2步进一位,达到进位点;

    ② 随着3的再次步进,无法稳定停留在进位点的2继续步进一位,并越过2自己的进位点,对1形成进位;于是,1也步进一位。

    整体看起来,就是2先步进达到了进位点,在下一次输入时,1、2又同时步进。

    这个机制就是所谓的双重步进。容易看出,能够实现双重步进必须具备两个条件:第一,是有低级转轮的进位推动;第二,是高级转轮存在。缺了一个,双重步进都不可能发生——这就是双重步进必然发生在“上有老,下有小”的2号转轮上的原理。

    这样一来,双重步进,范围只在1、2转轮之间;并且,具体到第二次步进,只能发生在2号转轮上。

    ——看到这里,细心的兄弟肯定会问:为什么2、3转轮之间就不会发生双重步进呢?2进位后,带动3再次步进,也是符合这个原理的啊……

    也请各位兄弟再仔细看看上面的列表分析,特别请注意3这一列的变化情况……

    稍微留心就不难发现,3的变化可以说是不受任何影响的,典型小胡同放牛 —— 一条道走到黑,永远是心无旁骛地一位位顺序步进着。实际上,3的步进并非由于任何更低级(也就是更右边)的转轮进位推动而来,而是由操作员的直接输入产生;它每次针对输入作出直接响应,应该是件很正常的事。

    为了更清楚地了解2号转轮在转轮组的特殊性,且让我们看第三种情况。如上面列表分析的,2进位推动1到达进位点,再次输入字母后,按理说1也处于进位点这个不稳定的位置,这时候该步进了;可是,由于不存在更高级(也就是更左边)的转轮,1还就在这个位置呆下去了——这就是说,它根本就不会动!

    这就是说,凹口——也就是进位点,对于1,是完全无效的……

    总之1也好,3也罢,无论什么情况下,都不会出现双重步进;这一现象,仅能发生在2号转轮身上。

    现在,让我们再回到实际使用ENIGMA时的情况吧。前文说过,早期型号的ENIGMA,只有三个转轮,而且这三个转轮都将被装在机器上。后来随着ENIGMA的硬件升级,转轮总数变成五个,海军型的则陆续发展为七个乃至八个。

    而无论配置了几个转轮,在ENIGMA机器中,转轮组的位置只能装下三个转轮;因此,必然就有用不上的转轮(针对某次使用而言)。上文说的1、2、3号转轮,实际上只是一个可能安装方案而已;不过,从中推出的理论,倒是适合各种情况——现在,就让我们来总结一下ENIGMA转轮组的运转规律,大致如下:

    1、操作员每次输入的字母,都将直接推动最右边的转轮(以后简称右轮)步进一格;

    2、当右轮越过凹口圈上凹口对应字母位置的时候,将带动中间的转轮(以后简称中轮)步进一格;

    3、当中轮越过凹口圈上凹口对应字母位置的时候,将带动最左边的转轮(以后简称左轮,非手枪)步进一格;

    4、当左轮越过凹口圈上凹口对应字母位置的时候,将正常步进一格。

    唯一特殊的是:中轮在越过凹口以前,只是在凹口的位置“停留”了一次而已;因此连起来看的话,这个中轮可是连续步进了两次。

    这就意味着,3、4所指代的现象其实是一回事;所以,凹口圈所标明的进位关系,对左轮是不起作用的。这个凹口,在右轮也只是起到了标记进位点的作用,而不能影响右轮本身的运动。

    从此,我们可以看出:在初始状态下,操作员输入头几个字母时,右轮必将逐次步进;而在这头几次步进的过程中,中轮正好位于进位点,进而被推动的概率其实是很小的。中轮如此,左轮发生步进的机会将更低——即便中轮满足步进条件,也极有可能并不在进位点附近。

    这就是说,在不考虑转轮组以外的加密方式时,ENIGMA加密的报文中,头几个字母仅仅是通过单独的右轮转动加密产生,这个现象的发生概率将非常大——回顾【波兰篇】我们很快可以想起,波兰人实际就是从这里突破的ENIGMA!

    如果以二战早期德国人的标准操作,也就是首六字母重复加密制进行计算的话,我们可以得出

    右轮到达进位点并越过进位点的情况 / 右轮的全部位置情况 = 6 / 26 ≈ 23.1%

    ——这里要说一句:之所以分子是6而不是5,是因为右轮的初始位置完全可能就是它的进位点;这就是说,第一次输入即可导致进位的发生。

    那么,这个23.1%又意味着什么?

    它意味着:由于此时转轮组内部出现进位的概率还不到四分之一,波兰人可以有相当大的把握地认定:他们所截收的全部电文的头六个字母,基本都是由右轮单独加密而得到的。

    【波兰篇】里曾经提到过,第一位应该得到花环的马里安·雷杰文斯基(Marian Rejewski),在破解ENIGMA时,就得出了这样的结论。为了破译,他还必须算出每个转轮内部的环位置ring settings,参见前文);而这头六个很少受到干扰的密文字母,就为他提供了非常难得的单右轮运行的研究样本。

    也如前所述,雷杰文斯基最先攻破的,正是当时使用的ENIGMA的右轮的环位置——那时候,也就是在1936年以前,德国人还是三个月才更换一次转轮的组合顺序的。

    这就意味着,不管德国人选择了哪个转轮当作右轮,它都会在这个右轮的位置上呆满三个月——而这么个“悠长假期”内,波兰人将会截收到多少报文啊;进而,这些资料对计算这个转轮内部的环设置,可实在是多得足够奢侈了。

    这份慷慨,雷杰文斯基肯定是享受到了,他后来的英国同行,可就再没这个福气了。不过,英国人的破译也够狠,细节问题嘛,以后再说吧:)

    ------------------------------------------------------------------------------------------

    现在,可以转回来说最开始的问题了:转轮组的三个转轮旋转以后,到底会造成多少种变化?

    我们已经看到,由于中轮存在着诡异的双重步进机制,导致转轮组的整体运行规律也有了相应的变化;这里,也不妨再细看一次刚才的转轮组“步法”分析吧:

    ━━━━━━━━━━━━━━━━━━━━━━━━━━

    1(凹口E) 2(凹口F) 3(凹口G)

    初始位置 A A A

    ━━━━━━━━━━━━━━━━━━━━━━━━━━

    A A B

    A A C

    A A D

    第一种情况 A A E

    (单纯进位) A A F

    A A G ←注意,3已经到了进位点

    A B H ←进位完成,2步进一格;3的步进,则是因为新输入

    A B I

    …… 继续加密 …… 继续加密 ……

    A E F

    A E G ←注意,3再次达到进位点

    第二种情况 A F H ←3对2的进位完成;注意,2也达到了进位点

    (双重步进) B G I ←2步进的同时产生进位,带动1步进

    B G J

    …… 继续加密 …… 继续加密 ……

    D E E

    D E F

    第三种情况 D E G ←3达到进位点,即将进位

    (单纯进位) D F H ←2步进,本身也达到进位点

    E G I ←2步进的同时产生进位,带动1步进;1也到达进位点

    E G J ←1并未进位,特殊情况结束

    E G K

    E G L

    …… 继续加密 …… 继续加密 ……

    ━━━━━━━━━━━━━━━━━━━━━━━━━━

    仔细观察,我们就会发现:当中轮(在这里就是2号轮)位于进位点时,它只能在这个位置上停留一次,旋即,在下次输入时便会进位——这跟它在其它位置状态时都不同;在别的位置,它都能消停地呆上26次……

    这就意味着:凹口虽然在三个转轮上都有,但只在中轮上发挥了另外的作用——具体来说,就是减少了它的变化可能。

    不妨举例说明。还以上面的设定为例,当三个转轮分别转到A、E、F时,下一次就将变为A、F、H,这一步倒还没有什么;再下一次,受双重步进的影响,将变成B、G、I——注意:在此设定下,理论上该出现的B、F、I,并未出现;这时候的2号转轮也已经不能继续停留在F上,而是被双重步进所推动,变成了G。

    这就是正是双重步进的一大特点,也就是前面提到过的:

    ENIGMA转轮组的中轮,到了进位点,下一步必然会进位;它在这个位置,必然也只能停留一次。

    这就是说,中轮在进位点的那个字母位置时,只能特定地对应一次左右转轮位置;越过它以后,就可以分别对应左右转轮各26种情况了。

    如此一来,我们可以先计算一下当中轮不在进位点时,转轮组的变化情况,即:

    (左轮的变化)*(中轮的变化)*(右轮的变化) = 26 * ( 26 - 1 )* 26 = 16900

    这减掉的1,就是中轮处在那个进位点位置时,所可能的产生变化。

    ——而这,其实就是正确答案,虽然算法上有漏洞……

    为什么算法上有漏洞,结果却又是对的呢?很显然,出现如此现象,必然是有什么因素互相抵消了——没错,在转轮组中,我们还真可以找到这个互抵的因素。

    再仔细观察一下,我们会发现一个现象:

    D E G

    D F H

    E G I

    E G J

    其中,中轮在F停留了一次;这就意味着,下一步它将变成G;而在正常情况下,被右轮进位所推动的G,首次对应的应该是右轮进位点后的一个字母;在本例中,中轮的G,对应的应该就是右轮进位点G后的一个字母,即H。

    如此说来,D、F、H的后一步,应该就是E、G、H。

    可在这个实例中呢?却是E、G、I;而那个该死的H,又跑哪里去了呢?

    ——还是中轮的步进点,那个F捣的鬼;实际上,它越俎代庖地替中轮的G,率先对应了右轮的H。这也很正常,毕竟F也是进位而来,首次对应的自然该是右轮的H,这一点跟其它字母没什么不同;不正常的是,由于F本身又是进位点,迅即导致双重步进,才让后来的G没有H可对应了。

    这就是说,由于F的存在,使F“替”G对应了一次右轮的字母。如此看来,这笔关于F的糊涂账,实际应该算在字母G头上。

    知道了问题所在,那么解决办法也就很简单了:只要把这一次的对应,记在G的对应关系里,我们的字母G就圆满了:实实在在,G也对应了右轮的26种变化,自然也就对应了左轮的26种变化。

    也就是说,中轮进位点那额外对应的一次变化,可以计算它后一个字母内——因为这多出来的额外一次变化,正是以之后一个字母减少一次变化为代价的。而加一再减一,结果正好抵消了,嘿嘿。。。

    这样一来,在计算整个转轮组的变化时,中轮进位点的情况就可以完全排除了,整个算法也一下变得简洁清晰起来——有此一个前提后,我们还可以用另一种算法来计算:

    3 2

    转轮组理论上总的变化量 - 中轮进位点对应的变化 = 26 - 26 = 17576 - 676 = 16900

    与刚才计算的一样,哈哈——跟废话一样,能不一样么?26的立方减26的平方,不就相当于26 * 25 * 26么……

    而这个16900,就是ENIGMA转轮组的全部变化情况——唉,不得不承认,还是人家不分析过程,直接得出个17576来的省力省心的多啊……

    ------------------------------------------------------------------------------------

    上面我们分析的,都是ENIGMA最常见的转轮组;而也有些转轮组的结构,又跟上面分析的略有不同。

    比如,在军事情报署型ENIGMA(Abwehr ENIGMA),和海军的某些型号上的转轮组里,转轮的数量就不是三个,而是四个。

    不过,军事情报署型ENIGMA的转轮组里,四个转轮的确是名副其实;而海军型ENIGMA上,这多出的来的第四个转轮,就有那么点儿鱼目混珠滥竽充数瞒天过海以次充好的嫌疑了……

    在海军型ENIGMA的第四个转轮上,也有刻着26个字母的字母轮箍,也有拨轮……等等等等,长得那是跟别的转轮毫无二致。不过,这第四个转轮是不会步进的,它的旋转是临时靠手动调节的——就这一点,就可以把它排除在转轮组以外了。

    计算起来,M4上的四个转轮,其变化情况也比较简单,就是

    三个转轮的变化 * 第四轮的变化 = 16900 * 26 = 439400

    不过,这个转轮虽然跟转轮组的关系不大,却跟后面要提的另一个部件紧密相关;而我们对【多表加密模块】的分析,到这里也终于可以告一段落了。

    觉得轻松了不少吧?哈哈,其实我才是觉得最轻松的人……

    我去冒会儿烟了;也隆重建议看到这里的各位,休息一下吧……

    关键词(Tags): #密码#破译#二战#ENIGMA#布莱奇利元宝推荐:ArKrXe,

    本帖一共被 2 帖 引用 (帖内工具实现)
    • 家园 脑子笨,有个问题没想明白

      老兄的原文关于“双重步进”的分析:

      ************************************

      在此基础上,我们再假设当前转轮组的初始位置为A、A、A。那么,现在转轮组的情况就是

      ━━━━━━━━━━━━━━━━━━━━━━━━━━

      1(凹口E) 2(凹口F) 3(凹口G)

      初始位置 A A A

      在纸面上模拟一下它的加密过程,就是这样的——其中每一行,都表示操作员一次新输入后的状态:

      A A B

      A A C

      A A D

      第一种情况 A A E

      (单纯进位) A A F

      A A G ←注意,3已经到了进位点

      A B H ←进位完成,2步进一格;3的步进,则是因为新输入

      A B I

      …… 继续加密 …… 继续加密 ……

      A E F

      A E G ←注意,3再次达到进位点

      第二种情况 A F H ←3对2的进位完成;注意,2也达到了进位点

      (双重步进) B G I ←1进位的同时,再次带动2步进

      B G J

      …… 继续加密 …… 继续加密 ……

      D E E

      D E F

      第三种情况 D E G ←3达到进位点,即将进位

      (单纯进位) D F H ←2步进,本身也达到进位点

      E G I ←1步进,并反馈性地使2双重步进;1也到达进位点

      E G J ←1并未进位,特殊情况结束

      E G K

      E G L

      ━━━━━━━━━━━━━━━━━━━━━━━━━━

      ************************************

      第一种情况很好理解,我所困惑的是第二种和第三种情况。

      以第二种情况为例子来谈:A,E,G变为A,F,H好说,是因为中轮受到右轮进位点(G)到下一个位置的推动。所以从E变为F。

      但是为什么会从A,F,H变为B,G,I呢?是,中轮的步进点为F,但是当右轮从H变为I(由于操作员的手动)时,中轮不应该转动吧?(因为H并不是右轮的进位点,也就是说当右轮H到I的时候,中轮不应该运动)

      而中轮不运动,左轮又怎么会有A变成B呢?

      望兄启愚。

      • 家园 先赞一个,老兄观察的够细:)试答如下

        不是老兄“脑子笨”,只怪1001n自己没说清楚。下面用一个比较好理解的方式来解说一下,希望能解决老兄的困惑:)

        “双重步进”的关键就是:

        中轮达到凹口时,它的这个位置状态并不“稳定”;也就是说,在这个位置上,中轮只能“停留”一次。再有输入的时候,无论右轮的步进是否可以产生对中轮的进位,中轮自己都将步进一次——所以,右轮从H变成I,虽然并没有构成对中轮的进位推动,但是中轮自己仍然是要步进的。

        在中轮步进的同时,自己也越过了凹口;这就意味着它对左轮也产生了进位推动,因此左轮也要步进。而在这个时候,中轮步进、左轮步进这两个动作是同时发生的,因此,这一次看起来似乎是由左轮“拉”着中轮,同步步进了。

        总的来说,中轮在这个特殊位置前后时,连续两次的输入就会导致它的连续两次步进,而不是次次都需要右轮的进位推动;所以,这个“双重步进”才会是一个很有特色的机制。

        此外,还得感谢老兄的是:正因为老兄提出了这个问题,让我又去仔细查对了一遍上面的原文。最后发现,我的解释不够严密:如果抛开具体结果,只从字面上看的话,甚至会理解成中轮会连续三次步进。

        究其原因,是因为在分解动作的时候,有时候是以一个输入导致的所有动作为一步,有时候是以一个输入导致的所有动作之一为一步。这样确实非常容易混淆,并导致误会。

        现已将原文重新修正过。也因此,非常感谢老兄提出这个问题!

        最后,想到老兄能够认真阅读鄙文并思考,进而感到“吾道不孤”,我还是很高兴的——再鲜花一朵,感谢老兄!

        • 家园 【从实招来】2号轮双重步进怎么实现的

          你用石英钟来举例,害我问了个愚蠢之极问题。

          你得考虑重新写举例那一段。用秒针分针来比方有点不合适。

          2号轮可以是任何一个轮安装在2号位。那些个轮子到底有什么机关设计?

          • 家园 呵呵,老兄一针见血啊

            你用石英钟来举例,害我问了个愚蠢之极问题。

            你得考虑重新写举例那一段。用秒针分针来比方有点不合适。

            的确如此。其实,更适合举例的,应该是汽车上的里程表,或者某种老式的机械式电表。这样,进位规律就比较容易理解——不过,当时写的时候,觉得未必所有人都对汽车里程表有深刻的感性认识(比如没车的我,就对它没什么感觉),与此同时,肯定也有一些兄弟未必见识过机械式电表。。

            而它又是26进制的,这个古怪进制,用一般的十进制的数字也没法例举。。

            愁眉苦脸地:这咋办好呢?就是想举个通俗到特别通、特别俗的例子啊……

            才会想到石英钟;当时也觉得不太合适,所以,只是文中一提,主要用意是引出“进位点”这个概念。君不见,后面再没石英钟什么事了,嘿嘿。。

            而就是因为石英钟的例子容易引起误会,才专门又写了一段如果是石英钟又会如何——那个从00分跳到01分的地方,又加粗又设置指向箭头说明,就是怕兄弟们没注意,给理解错了啊……

            这个地方我也头疼。老兄不妨提个建议,用什么做类比,才能又直观形象地说明步进、进位,同时又不会因为双重步进而把大家搞糊涂?

            这例子还得特通俗。。。我是真想不出来,老兄帮忙,救命!

            2号轮可以是任何一个轮安装在2号位。那些个轮子到底有什么机关设计?

            正是这样。轮子的设计,前文已经提到了,在步进时起作用的主要是凹口圈和掣爪。由于掣爪的机制才是真正的麻烦和复杂,本文就把它忽略过去了。

            实际上,转轮组的步进也好,进位也好,并不是转轮本身就有这功能,而完全是幕后的掣爪直接推动的。在【活拆了ENIGMA(4)】中,有机槽内的样子;其中,就有掣爪,老兄不妨看看。

            至于掣爪机制又是怎么回事——呵呵,饶命饶命,老兄不是真想知道吧?其实所有能步进和进位的机械装置,比如钟表和里程表、电表之类,都有类似掣爪和棘轮的机制,ENIGMA内的,只不过是个变形罢了。

            双重步进,是ENIGMA的一个特殊机制。只是,如果非要具体分析它在机械上是怎么实现的……这个,1001n就只有逃命了,呵呵……

          • 家园 说实话,这个问题我也没搞清楚

            我也是觉得从D,F,H到E,G,I很自然(H到I不是因为操作员的手动吗?),没高明白一千零一夜兄为什么说正常情况应该是D,F,H到E,G,H。

            只是之前已经问了一个问题,怕问多了显得自己太笨。

            • 家园 啊呀,老兄不明白的地方,说出来咱们一起探讨就是了啊

              别说什么笨不笨的,要说笨,估计没有比100n更笨的了——几行公式就能描述的东西,活活搞出几万字来叙述,不是笨是什么?

              再说,老兄不明白,也不是因为看到ENIGMA琢磨不通,而是因为看了1001n的文字而琢磨不通——这说明,问题不是在老兄,而是在咱自己身上啊。。

              可别再这么说了。。咱们探讨一下,老兄看看是不是这个理儿:

              我也是觉得从D,F,H到E,G,I很自然(H到I不是因为操作员的手动吗?),没高明白一千零一夜兄为什么说正常情况应该是D,F,H到E,G,H。

              涉及这个问题的原文是这样的:

              再仔细观察一下,我们会发现一个现象:

              D E G

              D F H

              E G I

              E G J

              其中,中轮在F停留了一次;这就意味着,下一步它将变成G;而在正常情况下,被右轮进位所推动的G,首次对应的应该是右轮进位点后的一个字母;在本例中,中轮的G,对应的应该就是右轮进位点G后的一个字母,即H。

              如此说来,D、F、H的后一步,应该就是E、G、H。

              可在这个实例中呢?却是E、G、I;而那个该死的H,又跑哪里去了呢?

              我的意思是:

              右轮的进位点是G,因此,当右轮越过进位点到达下一个字母H时,中轮将发生进位。这就是说,按一般道理来看,在中轮进位完毕的那个瞬间,右轮的字母应该都是H。

              也就是说,中轮进位完毕的那个瞬间,无论中轮进位到达的字母是什么,这时候的右轮的字母都应该是H。

              如此分析的话,如果左轮和中轮因为进位,初次出现E-G组合的时候,右轮的字母也应该是H,所以,才会说“应该是E-G-H”。。。

              可是,问题就出在:这个E-G组合并不是由于正常的进位/步进而来的。

              由于它是由D-F组合仅经一步便“跳跃”而来的,所以,“短命”的D-F组合并未一个个对应上右轮的H、I、J、K、L、M、N……Z、A、B、C……E、F、G这完整的一圈26个字母,所以,才会出现E-G-I而非E-G-H的现象。

              也顺便说一句,从这个意义上讲,E-G-H的对应关系是不存在的——而这,正是双重步进与一般步进-进位规律不同的地方。

              ------------------------------------------

              文中让二位发晕的地方,其实正是1001n行文过于简略的地方。并且,为了突出双重步进的特殊性,在先强调了“中轮的缺口位不稳定”,会导致双重步进之后;又反过来再辅以单纯进位会出现的情况,来论证双重步进的特殊。

              本来,右轮的顺序很清楚,F、G、H、I、J……,按顺序,D-F-H后当然应该是E-G-I;而现在经过正反这么一对比后,就确实不容易理解文中说的“D-F-H的后一步,应该是E-G-H”的意思了。。

              本意是把问题从正反两面说生动一点,结果没交代清楚,让二位头大了,惭愧ing。。

              唉,都是咱不好。主要是研究这些个转轮的时候,实际上想了很多的情况;后来写的时候,不注意就都多少带出来了——问题是,我自己是明白的,可这么一写,大伙很容易晕过去——是我的不好,以后定当注意。

              不知道老兄满意这个解释么?

              • 家园 对不起,还是没明白

                为什么我会觉得D,F,H到E,G,I很正常呢?

                从D,E,G到D,F,H不存在问题,因为G是右轮的进位点,所以右轮G到H,中轮就会被推动从E到F。

                下一步,由于F的位置是不稳定的,所以在受到右轮H到I的输入后(记得你说这个输入是操作员手动控制而不受其他轮的影响的),虽然H不是右轮的步进点,中轮也从F运动到了G,同时,因为F是中轮的步进点,左轮也从D运动到E。

                兄看我的这段话有疏漏的地方吗?

                如此分析的话,如果左轮和中轮因为进位,初次出现E-G组合的时候,右轮的字母也应该是H,所以,才会说“应该是E-G-H”。。。

                我不明白的是,E-G组合的出现,不是由于右轮H到I的输入引起的吗?

                头有点大了。。。

                • 家园 老兄头别大,呵呵

                  如前所述,这是“两个标准”导致的问题。

                  第一个,中轮步进后,对应的第一个右轮字母都应该是H;所以,E-G组合出现时,首先对应的,应该是H,即E-G-H;

                  第二个,正常使用时,操作员每输入一次,右轮步进一次;只有输入,才能导致步进和进位,以及双重进位;因此,E-G只能对应I,即E-G-I。

                  这是从两个标准分析出来的结果,并不是说右轮在D-F-H后,还会在H上停留一位,变成E-G-H。

                  “E-G-H”一说,是按第一个标准分析出来的结果,并不是实际发生的;不会发生的原因,正是因为它和双重步进的原理相冲突。

                  不知道这么说,老兄是不是明白一些了?

                  • 家园 结合这篇,才发现老兄在上一篇里面已经解释清楚了

                    只是我粗心大意,没注意看。真是对不起。

                    文中让二位发晕的地方,其实正是1001n行文过于简略的地方。并且,为了突出双重步进的特殊性,在先强调了“中轮的缺口位不稳定”,会导致双重步进之后;又反过来再辅以单纯进位会出现的情况,来论证双重步进的特殊。

                    多谢老兄不厌其烦的耐心解释。

            • 家园 唉,我刚问完,就发现我的推导有问题……

              1001n的描述一点问题都没有。

              按照我的想法来推,2号轮处于凹口F时,2号轮不会动啦。3号轮必须再次旋转到G并越过G,才能驱动2号轮越过F,此时2号轮才能驱动1号轮旋转一格。而这,恰恰就是“D F H----E G H”

              正因为我们都看到了2号轮能够驱动1号轮,忘记了2号轮的双重步进。所以,都能“自然而然”的理解D F H----E G I

              我写一遍看看哈,按照一切都是3号轮驱动的话

              D E G

              D F H

              D F I

              D F J

              …………

              D F A

              …………

              D F G

              E G H

              嘿嘿,这个中间,还有这么多的变化。不是一步就过来了。

              前篇已经删除啦,问得太蠢,不好意思留下来。

              关键词(Tags): #1
              • 家园 这个理解不对吧?

                一千零一夜已经说了中轮的步进点F是个不稳定位置,不可能连续两次呆在同一个位置。

                而老兄的推导,这个F点出现了26次。

                有矛盾啊。

                • 家园 是的。但正因为这个错

                  才能解释为什么“D F H----E G H”是正常情况。

                  要不还能怎么解释呢?

                  不过,你说的也对阿。他的确早都说过凹口点只能呆住一次。

                  完啦。再次晕倒。估计醒不过来啦

                  双重步进……,害死人啰

                  要不,你解释一下为什么“D F H----E G H”是正常情况

                  • 家园 哈哈,我也是一笔糊涂帐,回答不了啊

                    我觉得D,F,H到E,G,I是容易理解的,而D,F,H到E,G,H就想不通了。

                    等着一千零一夜的解答吧。

        • 家园 很清楚,这下明白了。

          兄台呕心沥血写出这个长篇,咱本来就是门外汉,所以就想借此机会多了解一些密码领域的东西,技术性这么强的文章,不认真看看哪成?

          说实话,即使这样,我也没有把每个细节都搞清楚。惭愧。

          接着看下一篇去了。

分页树展主题 · 全看首页 上页
/ 3
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河