通过电报的发展史,就能看清编码与加密的大概,那么就从摩尔斯电码开始吧。
摩尔斯电码(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点的接收器收到“嘀嘀嗒嗒”,对照摩尔斯电码表就能解读内容。
摩尔斯这个人本来是搞美术的,在美国还颇有名气,所以他设计的摩尔斯电码在写法上多多少少流露着艺术气息,不仅如此,他的(·)和 (-)的发音时值和音乐中单附点音符的发音时值极为相似。这种音符几乎出现在已知的所有乐谱上,所以,使用摩斯电码发出的电报声很有节奏感,既让人心情愉悦,又容易识别。
摩尔斯电码随后引起了军方的关注,并在美国南北战争期间(1861~1865年)首次使用摩尔斯电码传递情报,当时的传输介质还是电线,也就是有线传输,局限性很大,想要通信必须要架设线路;同时也发现了电报容易被敌方截获的弊端,在战时以及在战后一直在改良加密方法,产生了加密电报的雏形。
摩尔斯电码的称呼逐渐变成了摩尔斯密码,加密电报的应用在二战时达到巅峰。
到了19世纪90年代,各地仍然要经过电线用来传送电报。尼古拉·特斯拉等科学家在这个时候开始研究以无线电发送电报。1895年,意大利人马可尼首次成功收发无线电电报。4年后,即1899年,他成功进行英国至法国之间的传送。1902年首次以无线电进行横越大西洋的通讯。
马可尼劳苦功高,但是他背后的财团(包含爱迪生)利用卑劣的手段夺得特斯拉专利这个事是板上钉钉的,(虽然美国之后又把专利判给了特斯拉,但是其中猫腻,你自己品吧)资本和资本家本身并不恶略,但是一群资本家欺负一个只想着改变世界的科学家就显得有些操蛋了,他们就像钢铁侠的大爷奥巴代一样:“你以为你想出来的点子就是你的? ” 你大爷永远是你大爷。
电线换成了天线,电报终于能飞了。
这个被称为“最接近神的男人”对电报的贡献还不止如此,他还在直流电的基础上发明了交流电,使电的传输距离大大增加,因为交流电能用变压器,直流电在当时那个年代实现不了增压,就是在现在,想增压也很麻烦,直流电发明之前,电报的长距离传输需要使用续电器,所以使用有线电报的人可以省几个续电器了。
后人有诗赞曰:特斯拉,你电的不错。
1936年, 也就是英国加入二战前夕,艾伦·图灵提出了一种抽象的计算模型——图灵机
现代计算机使用的模型继承自艾伦·图灵发明的图灵机模型,图灵机就是使用的二元编码,不知道是不是受摩尔斯电码的启发,发明目的是为了证明一个数学命题到底能不能够被证明,通俗说,就是通过对该命题进行大量的模拟计算,看看最终能不能得到真或假。
1939年9月1日纳粹德国入侵波兰,英法对德宣战。
布莱切利园就是在这个时候成为了英国最重要的加密电报破译基地,又称“X电台”。这个小圆子里聚集了当时英国最聪明的一批人,这其中就包括艾伦·图灵,堪称史上最强大的“黑客”阵容。
他们的任务,就是截获电报,破解电报,然后共享给同盟国,当然只是部分共享。
图灵机的研究暂时中断,直到战后才得以继续,不过也没持续多久,图灵就吃半个毒苹果自杀了。
布莱切利园的两位核心人物。
图灵8号小屋,(计算机科学之父,人工智能之父),对计算机科学做出了决定性的贡献
魏齐曼6号小屋,开创了互联网,通讯量分析(大数据),云端技术(云存储)的先河辟谣:苹果公司的logo和图灵咬下的半个苹果没有半毛钱关系,乔布斯本人澄清。
魏齐曼:鲜为人知的人物,遭到英美联手封杀,原因是认为其撰写的《6号小屋的故事》是泄密,抑郁而终。《模仿游戏》中有个叫休·亚历山大的人帮助图灵改造炸弹机,事实是魏齐曼帮助图灵改造的。
关于图灵大神好玩的事
在剑桥大学是一个衣着随便、不打领带的著名教授,妇孺皆知的怪才。
患过敏性鼻炎,遇花粉流鼻涕不止-所以戴防毒面具骑车上班,招摇过市,成为剑桥大学的一大奇观。
自行车掉链不修理-发现链条总是踏到一定的圈数时下滑,骑车时特别留心计算,能做到在链条下滑前一刹那戛然停车。后来在脚踏板旁装了一个小巧的机械计数器,到圈数时就停,歇口气换换脑子,再重新运动起来。
怕英国失败把积蓄换成银子埋藏起来,二战后却忘了埋藏处。
艾伦·图灵仿造1938年的波兰解密机炸弹机(Bomba)设计了新的炸弹机(Bombe),新的炸弹机是对图灵机模型的一次实践,戈登·魏齐曼对其进行了改良。战时成功破译恩尼格玛密码机(又叫英格玛密码机,能够破译一部分还要归功于英国情报部门在U型潜艇上缴获的密码机和密码本),致使大西洋战场局势发生大逆转。
电流首先从电池①流到双向开关②,再流到接线板③。接线板的作用是将键盘②与固定接口④连接起来。接下来,电流会流到固定接口④,然后流经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天前的密电,也没多大意义了。
在那个只靠好记性和烂笔头的年代,如果没有图灵的自动化计算机-炸弹机,这是不可能完成的任务。
(机器破解前还需要人工缩小检索范围)
//组合
function C(m, n = m){
let s = 1;
for(let i = 0; i < m; i++){
s *= (n - i) / (m - i)
}
return s
}
//排列
function A(m, n = m){
let s = 1;
for(let i = 0; i < m; i++){
s *= n - i
}
return s
}
战时也参与了Colossus巨人计算机的研制,目的为了破译洛仑兹密码机(这种密码机用于德军最高统帅部,属于恩尼格玛的升级版),英军代号“金枪鱼”,直到二战结束前夕才研制完成。利用这台机器,盟军不但破译了大量重要情报,还利用假电报成功欺骗了轴心国认为的最后一颗救命稻草,沙漠之狐-埃尔温·隆美尔,直接导致大西洋壁垒在盟军登陆诺曼底时被彻底击溃,缩短了战争时间。
结论:
1.称呼为摩尔斯电码或者摩尔斯密码都没有错。
2.战争是编码衍生出加密编码的重要催化器。
3.加密的本质也是编码,不过这种编码产生的目的是增加解码成本,而我们称呼的编码的目的是降低解码成本。
补充说明:
编码的鼻祖,文字。
布莱叶盲文
同样,布莱叶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个拉丁字母组成,字母是英语中的最基本单位,不可再分,他有点像数学中的质数,化学变化中的原子(原子是不能再分的一种粒子),或者生物中细胞(组成生物的基本单位),以上的这些通过不同的排列与组合,生成新的一种上层事物,而上层通过排列组合又能得到上上层事物。【基本组成单位随着人类探索一直在更新,每次更新都是一次重要的认知升级】
字母组成单词,单词组成句子,句子组成文章,文章中同一个句子位置的变化会表达不同的含义,我们称之为上下文。
最常用的英语词汇长度在8位左右,这个8位能代表多少种状态?
26 * 26 * 26 * 26 * 26 * 26 * 26 * 26 = 26^8 = 208827064576 。2千亿。这还没算其他位数的呢。《牛津英语词典》第二版中有171476个仍在使用的单词词条,按照这个数量,我们分析下需要多少位能表示全整本词典。
26^1 + 26^2 + 26^3 + 26^4 = 475254, 明显4位的英文组合就能表示全所有英语词汇,怎么最常用的英语词汇长度就在8位了呢,更甚者你搞出来下面这位爷是几个意思?
pneumonoultramicroscopicsilicovolcanoconiosis 肺尘病,矽肺病
发音为[ˈnju:mənəuˌʌltrəˌmaikrəsˈkɔpikˈsilikəvɔlˈkeinəkoʊnɪ'oʊsis]外国友人该抱怨了,你们的biangbiang面的biang又是几个意思呢?
好了,大家都半斤八两,谁也不说谁了,握爪言和一下。
英语是编码,那我们的汉字是不是呢?
英语有他们的基本组成单位,咱们汉字也有字根啊,
字根(集合)= { 部首,笔画 }
部首(组成)= 笔画 + 笔画
汉字(组成)= 笔画 | 笔画 + 笔画 | 笔画 + 部首 | 部首 + 部首
丿 + 丨 = 亻
一 + 丨 = 十
亻 + 十 = 什通过各种特定的组合来制定我们的汉字文字系统,这本身也是一种编码系统,可以把笔画约等同于英文字母。
到这应该总结一下编码的定义是什么
编码是信息从一种形式或格式转换为另一种形式的过程。解码,是编码的逆过程。
这个过程使用一个数学概念也适用,那就是映射。
映射:指两个元素的集之间元素相互“对应”的关系,公式为 f(a) = b
文字的演化过程:从形象的映射逐渐发展成抽象的映射。
为什么?
人们需要更加简洁的文字来映射事物,象形文字很难做到书写统一,因为说它是画画可能比说他是文字更贴切,但更重要的是,形象的映射无法满足人们日益增长的情感表达需求。
抽象:
1.抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。
2.隐藏了一些不必要的细节,或者简单的概括本质。
3.抽象的反面是形象,从形象去理解抽象似乎更容易。
4.我国古代哲学时常提到的一个字“悟”应该就是理解抽象的一种方式。
我们的汉字应该是形象的映射与抽象的映射共存的产物。
有人可能说英文字母由拉丁字母演化而来,拉丁字母从一开始就是抽象的,怎么能说所有的文字都是从象形开始呢?
拉丁字母并不是欧洲语系的鼻祖。
古埃及的圣书体 => 古埃及的僧侣体 => 古代及的世俗体 => 腓尼基字母 => 希腊字母 => 拉丁字母(罗马字母)
所以啊,英文字母的老祖宗也是埃及人的象形文字,而且现在有一种说法是,我国发现的甲骨文就是由古埃及传过来的,算了,这种事还是交给专业人士去考古吧。