闲聊编码与加密

通过电报的发展史,就能看清编码与加密的大概,那么就从摩尔斯电码开始吧。

8793674-9ab3eb7a6bd83e74

摩尔斯电码(1836年)是随着电报机( 1835)的发明而产生的 ,结束了老式的使用马车、信鸽、烽火台等传递消息方式的历史。
它使用二元编码(有分歧),二元编码就是每一个表示位可以表示两种状态。这两种状态就是嘀(·)和嗒 (-)。

分歧解释:
维基和百度都表示摩尔斯电码为5种状态表示,
1.点(·):1
2.划(-):111
3.字符内部的停顿(在点和划之间):0
4.字符之间的停顿:000
5.单词之间的停顿:0000000
但是《编码的奥秘》中表示这是二元编码,见仁见智的事。

1位二元编码可以表示2种状态,即 2^1
2位二元编码可以表示4种状态,即 2^2
3位二元编码可以表示8种状态,即 2^3
...
英文字母(不区分大小写)有26个,即需要使用 2^1 + 2^2 + 2^3 + 2^4 = 30个状态,每种状态对应一个字母,也就是需要1位+2位+3位+4位二元编码才能表示全最基本的字母,还余下4个状态。
所以可以发现图中摩尔斯点码表中嘀(·)和嗒 (-)长度最多没有超过4。
但是如果还要加上欧洲语种中的ü,ö,ä...,以及0-9的阿拉伯数字和标点符号,30个状态明显不够用,可增加至5位二元编码(62个状态)

至此,我们就可以对照摩尔斯电码表,在A地点的电报机上按出“嘀嘀嗒嗒”的声音,通过电缆把电流传输到几十公里以外的B点,B点的接收器收到“嘀嘀嗒嗒”,对照摩尔斯电码表就能解读内容。

摩尔斯这个人本来是搞美术的,在美国还颇有名气,所以他设计的摩尔斯电码在写法上多多少少流露着艺术气息,不仅如此,他的(·)和 (-)的发音时值和音乐中单附点音符的发音时值极为相似。这种音符几乎出现在已知的所有乐谱上,所以,使用摩斯电码发出的电报声很有节奏感,既让人心情愉悦,又容易识别。

8793674-b6fcab825652f020 8793674-cadc1b37b7edb512

摩尔斯电码随后引起了军方的关注,并在美国南北战争期间(1861~1865年)首次使用摩尔斯电码传递情报,当时的传输介质还是电线,也就是有线传输,局限性很大,想要通信必须要架设线路;同时也发现了电报容易被敌方截获的弊端,在战时以及在战后一直在改良加密方法,产生了加密电报的雏形。

摩尔斯电码的称呼逐渐变成了摩尔斯密码,加密电报的应用在二战时达到巅峰。

到了19世纪90年代,各地仍然要经过电线用来传送电报。尼古拉·特斯拉等科学家在这个时候开始研究以无线电发送电报。1895年,意大利人马可尼首次成功收发无线电电报。4年后,即1899年,他成功进行英国至法国之间的传送。1902年首次以无线电进行横越大西洋的通讯。

有确凿证据证明,马可尼和他背后的财团(包含爱迪生)利用卑劣的手段夺得特斯拉“无线电”专利。

8793674-ba3d62c6d2538d58

电线换成了天线,电报终于能飞了。

1936年, 也就是英国加入二战前夕,艾伦·图灵提出了一种抽象的计算模型——图灵机。

现代计算机使用的模型继承自艾伦·图灵发明的图灵机模型,图灵机就是使用的二元编码,不知道是不是受摩尔斯电码的启发,发明目的是为了证明一个数学命题到底能不能够被证明,通俗说,就是通过对该命题进行大量的模拟计算,看看最终能不能得到真或假。

8793674-69b0d6020f6bdd9a

非常直观的CPU,看看运算器,控制器,存储器在哪

1939年9月1日纳粹德国入侵波兰,英法对德宣战,图灵机的研究暂时中断,直到战后才得以继续,不过也没持续多久,图灵就吃半个毒苹果自杀了。

辟谣:苹果公司的logo和图灵咬下的半个苹果没有半毛钱关系,乔布斯本人澄清。

布莱切利园就是在这个时候成为了英国最重要的加密电报破译基地,又称“X电台”。这个小圆子里聚集了当时英国最聪明的一批人,这其中就包括艾伦·图灵,堪称史上最强大的“黑客”阵容。

8793674-752b3d5bc429ffd8 8793674-5fba7a1d1e4a9e43

布莱切利园的两位核心人物。
图灵8号小屋,(计算机科学之父,人工智能之父),对计算机科学做出了决定性的贡献
魏齐曼6号小屋,开创了互联网,通讯量分析(大数据),云端技术(云存储)的先河

魏齐曼:鲜为人知的人物,遭到英美联手封杀,原因是认为其撰写的《6号小屋的故事》是泄密,抑郁而终。《模仿游戏》中有个叫休·亚历山大的人帮助图灵改造炸弹机,原型就是魏齐曼。

他们的任务,就是截获电报,破解电报,然后共享给同盟国,当然只是部分共享。

艾伦·图灵仿造1938年的波兰解密机炸弹机(Bomba)设计了新的炸弹机(Bombe),新的炸弹机是对图灵机模型的一次实践,戈登·魏齐曼对其进行了改良。战时成功破译恩尼格玛密码机(又叫英格玛密码机,能够破译一部分还要归功于英国情报部门在U型潜艇上缴获的密码机和密码本),致使大西洋战场局势发生大逆转。

8793674-bee973783c8ed96c

电流首先从电池①流到双向开关②,再流到接线板③。接线板的作用是将键盘②与固定接口④连接起来。接下来,电流会流到固定接口④,然后流经3个(德国防卫军版)或4个(德国海军M4版和德国国防军情报局版)转子⑤,之后进入反射器⑥。反射器将电流从另一条线路向反方向导出,电流会再一次通过转子⑤和固定接口④,之后到达插孔S,又通过一条电线⑧流到插孔D,最后通过另一个双向开关⑨去点亮显示灯。

明确:
恩尼格码密码机,既不是打字机,也不是电报机,所以他没打字和发报的功能,操作员需要用笔和纸记录下密码机上显示的加密后的字母,然后再转换成摩斯电码,最后使用电报机发送出去。
接收方需要和发送方有相同密码机,相同的的转子、接线设置才能解密(对称加密),每个拥有恩尼格码的军事单位每个月都会收到所在上级的密码本,该密码本印刻了接下来一个月每天需要使用的转子、接线的配置。
密码本使用人力传递,即使盟军偶尔缴获了密码本,也只能使用最多一个月。

加密:
密码机的机械零件和电子线路就是算法,或者直接说密码机本身就是算法,而转子,和接线板的组合序列就是密钥,很明显,对于一台密码机,算法只有一个,但是有多少秘钥?
我们来算一算,以图中恩尼格码为准:

它共有5个转子,每个转子解构都不相同且都有26个拉丁字母,选取其中的3个转子使用,
接线板也有26个拉丁字母,最多能插10条连接线,每条连接线连接2个字母,已实现对调。
① 5选3,且转子结构各不相同,择有 5 * 4 * 3 = 60 种;
② 每个转子有26个拉丁字母,择有 26 * 26 * 26 = 17576种;
③ 接线板最多插10条线,且有26个拉丁字母,(实际应用一般都是把10条线插满),得:
C(20, 26) * C(2, 20) * C(2, 18) * C(2, 16) *C(2, 14) * C(2, 12) * C(2, 10) * C(2, 8) *C(2, 6) * C(2, 4) * C(2, 2)/ A(10)
或者
A(26) / A(10) / A(6) / 2^10
= 150738274937250种;

结果为 60 * 17576 * 150738274937250 = 158962555217826350000 约等于1.5万亿亿个秘钥。

这意味着,盟军截获一份电报后,需要确定是什么型号的密码机加密的(确定算法),
这个比较容易。
还要确定这封电报是用 1.5万亿亿个秘钥中的哪个秘钥加的密。并且要在一天内完成,
因为德军每天都会更换秘钥。战机转瞬即逝,如果你破译了10天前的密电,也没多大意义了。
在那个只靠好记性和烂笔头的年代,如果没有图灵的自动化计算机-炸弹机,这是不可能完成的任务。
(机器破解前还需要人工缩小检索范围)

战时也参与了Colossus巨人计算机的研制,目的为了破译洛仑兹密码机(这种密码机用于德军最高统帅部,属于恩尼格玛的升级版),英军代号“金枪鱼”,直到二战结束前夕才研制完成。利用这台机器,盟军不但破译了大量重要情报,还利用假电报成功欺骗了轴心国著名将领埃尔温·隆美尔,直接导致大西洋壁垒在盟军登陆诺曼底时被彻底击溃,缩短了战争时间。
8793674-bdf05108a8dd7d7d

结论:
1.称呼为摩尔斯电码或者摩尔斯密码都没有错。
2.战争是编码衍生出加密编码的重要催化器。
3.加密的本质也是编码,不过这种编码产生的目的是增加解码成本,而我们称呼的编码的目的是降低解码成本。

补充说明:

编码的鼻祖,文字。

布莱叶盲文

8793674-c32e0b1acb7cb01b

布莱叶6点盲文也是使用2元编码,他的每一位使用凸出的点(有利于盲人用手感知)或平滑的点来表示2种可选状态,一共6位,所以他能表示的状态总数为 2 * 2 * 2 * 2 * 2 * 2 = 2^6 = 64 种状态。
图中黑色为凸起的点,灰色为平滑的点(画出来是为了让6点更直观)。
但是实际上6点盲文可以表示更多的状态,原因是同一个码点可能会根据上下文的不同具有不同的含义,比如“ble”如果不被用作单词的一部分使用时,那他后面跟着的 原本代表A-J的码点会当做数字定义,A=>1, B=>2, C=>3 .....J=>0。

布莱叶6点盲文非常直观的向我们解释了文字的编码本质,但是这还不够,我们需要更多证据。

在上小学的时候,黑板上老师写了“blue”这个词,后面跟着汉语翻译“蓝色”。我就很诧异,为什么“blue”代表“蓝色”,而不代表“裤衩”呢?这个问题困扰了我好久,直到我看到了《编码的奥秘》其中一段才豁然开朗。

在《百年孤独》一书的开篇,马尔克斯回忆了一个时代,那时“世界一片混沌,许多事物没有名字。为了加以区别才给事物各个命名。”这些名字都是随意的,没有什么原因说明为什么不把猫称为狗或不把狗称为猫。可以说英语词汇就是一种编码。

现在的人对英语应该耳熟能详,但是把英语词汇当成一种编码你可能从没想过, 英语词汇由26个拉丁字母组成,字母是英语中的最基本单位,不可再分,他有点像数学中的质数,化学变化中的原子(原子是不能再分的一种粒子),或者生物中细胞(组成生物的基本单位),以上的这些通过不同的排列与组合,生成新的一种上层事物,而上层通过排列组合又能得到上上层事物。【基本组成单位随着人类探索一直在更新,每次更新都是一次重要的认知升级】

字母组成单词,单词组成句子,句子组成文章,文章中同一个句子位置的变化会表达不同的含义,我们称之为上下文

英语是编码,那我们的汉字是不是呢?

英语有他们的基本组成单位,咱们汉字也有字根

js
字根(集合)= { 部首,笔画 } 部首(组成)= 笔画 + 笔画 汉字(组成)= 笔画 | 笔画 + 笔画 | 笔画 + 部首 | 部首 + 部首
8793674-5377a3dc433dea08

丿 + 丨 = 亻
一 + 丨 = 十
亻 + 十 = 什

通过各种特定的组合来制定我们的汉字文字系统,这本身也是一种编码系统,可以把笔画约等同于英文字母。

到这可以总结一下编码的定义:

编码是信息从一种形式或格式转换为另一种形式的过程。解码,是编码的逆过程。