巨人机:第一台可编程电子计算机

ABC之后,历史仍未安排ENIAC出场。1943年,电子时期的第2个重要角色诞生在图灵所处的布莱切利。

研制背景

1941年6月,意识到谜机可能已被破解的德军启用了一种复杂度更高的加密系统,并且这一次英国没能拿到相应的机器,布莱切利的密码学们要和一个完全未知的强大敌人抗争。在听闻德国人用一种海鱼的名字称呼这套系统后,布莱切利也给它起了个绰号——“金枪鱼”。

1941年8月,“金枪鱼”的操作员由于一时疏忽将同一条信息发送了两遍,尽管两条密文并不一样,但经验丰富的布莱切利在截获之后立马意识到它们指向同一条明文。这个小小的马脚,被这里绝顶聪明的密码学家们牢牢抓住,真可谓一叶知秋,他们据此精准地推测出“金枪鱼”的组成结构和工作原理。它包括12个谜机那样的转轮,每个转轮的旋转模式各不相同,每个转轮上导电触点的数量也不一样,导电触点可以在接通和断开两个状态之间切换,使用前可改变各触点的状态和转轮的起始位置。

30022-5b3f6ffb186d3425.jpg
金枪鱼(图片来自维基百科)
30022-6c52e00068442f49.jpg
金枪鱼转轮导电触点特写(图片来自维基百科)

和谜机的字符级加密不同,“金枪鱼”进行的是编码级加密,当时的电传打字机使用的ITA2码制(国际电报字母表第2号)用5位二进制对单个字符进行编码,“金枪鱼”将这些二进制位与特定的二进制密钥进行异或运算后生成密文。异或是一种特别的逻辑运算,它是可逆的,明文和密钥异或之后生成密文,反之,密文和密钥异或之后又可以得到明文,这就是“金枪鱼”加密和解密的基本原理。

ITA2秘钥密文
000
011
101
110

破解“金枪鱼”,不仅要猜出转轮上所有导电触点的通断状态,还要猜出各转轮的起始位置,其组合数量之巨,不仅远远超出了人力处理的能力范围,也令炸弹机这类机电设备束手无策。布莱切利急需一种更高速的解密机器,电子管方案成为不二之选。

研制电子计算机的重任落在了位于伦敦西北角的邮局研究站身上,该研究站有着丰富的电子通信经验,在布莱切利的部分密码学家对电子管的可靠性还抱有疑虑的时候,邮局研究站的工程师早已对电子管的大规模应用驾轻就熟。1943年2月,在图灵的推荐下,来自研究站的托马斯·弗劳尔斯(Thomas Harold Flowers)扛起这面大旗,在布莱切利一部分人“等机器造好战争怕是早就结束了”的冷嘲热讽中,带领50人的团队仅用了11个月就完成了第一台原型。1944年1月,当这台包含了1500~1600个电子管的“庞然大物”来到布莱切利,密码学家们被深深震撼了,它比他们之前使用过的任何计算设备都庞大得多,因而被形象地称为巨人机(Colossus)。

30022-ab920ee42f7e1adf.jpg
托马斯·哈罗德·弗劳尔斯(Thomas Harold Flowers),1905-1998,英国工程师。(图片来自维基百科)

组成结构与工作原理

巨人机有二型,1943年的一型为Mark 1,其建造过程中,弗劳尔斯就已经开始了第二型Mark 2的设计。Mark 2包含2400个电子管,速度更快,功能更强,截止欧洲胜利日(1945年5月8日)共建有10台之多。可惜的是,出于保密考虑,这11台机器连同其图纸都在60年代被下令焚毁,如今我们在布莱切利的英国国家计算博物馆所能见到的,是后人在1992~2008年耗时16年重建的复制品。

30022-203bfb6a85bffdc1.png
巨人机Mark 2复制品(原图来自维基百科)

巨人机使用穿孔纸带输入密文,纸带每行有5个孔位,对应ITA2中的5位二进制。纸带长约61米,穿孔25000行。共设有两个纸带支架,在一条纸带工作的时候,操作人员可以准备好下一条纸带,交替使用,节省纸带更换时间。由于机器内部没有数据存储模块,纸带的头尾相接,形成环状,以便循环读取。纸带的读取速度十分惊人——每秒5000行[1],工作时发出湍急的流水声,纸带上的孔洞以近44公里的时速飞驰。这得益于光电技术的应用,在纸带的一侧安装一个灯,另一侧安装5个并排的光电探测器[2],一个探测器负责盯住一个孔位。当灯光穿过某个孔洞,其对应的光电探测器就能迅速发出电流脉冲,产生二进制信号1;当灯光被未穿孔的孔位遮挡,对应的探测器就产生二进制信号0。

巨人机基于图灵方法[3],用电路模拟“金枪鱼”的转轮位置及其导电触点的通断状态。密文流入机器后,经过一系列以异或为主,与、或、非为辅的逻辑运算,最终由电动打字机输出结果。这个结果当然不可能就是明文,而是各种统计数据,比如某个字符出现的次数,或者某些数值满足某种逻辑条件的次数,有点像现在的数据挖掘。机器内有5个电子计数器,可同时统计5项数据。密码学家根据统计结果找到密文中暗藏的线索,调整机器程序,得到新的统计结果后继续分析,如此往复,一步步逼近最终的正确答案。

巨人机的可编程性是靠开关、旋钮和接插线板实现的。其开关可以上下拨动,分别接通两个不同的功能线路,多数开关还可以被拨到中间,使两个线路都断开;其旋钮用于置数,10个位置依次对应0~9,10条数值线路像10位英俊的绅士围绕着旋钮女士,一齐向她伸出求舞之手,而旋钮总会牵手他们中的一位。

巨人机的编程本质上是一组选择,选择每个开关和旋钮的位置,选择接插线板上每个导电孔的通断。这些选择对象分布于多块操控面板之上,下面按从右至左的顺序简单介绍一下它们的功能。

30022-9867433c4d650e9f.png
范围设置面板,包含3组旋钮(每个旋钮有10个位置),每组可以设置一个4位十进制数。其中2组用于设置纸带的读取范围(起止位置分别用4位十进制数表示),当使用者比较关注纸带上的某一段密文时,可以让机器循环读取这一段,而不是整条纸带。
30022-eab448dfa4591af1.png
信号选择面板,包含16个开关,可以对输入信号进行筛选,比如选择使用哪一个支架上的纸带,又比如选择将数据本身还是数据的变化量(图灵方法需要的参数)传送给逻辑运算单元。
30022-1c36d7e47b810049.png
统计设置面板,包含191个开关,左上区域5列黑色开关用于指定需要统计的字符,右上区域5列灰色开关用于指定每个统计值所对应的计数器,左下区域5列红色开关可以设置统计多个字符出现的次数总和,右下区域5列红色开关用于指定这些总和统计值所对应的计数器。
30022-8f70b66754f9bdc3.png
触点设置面板,为接插线面板,包含10行槽位。第1、3、5、7、9行用于设置“金枪鱼”某5个转轮上导电触点的通断状态,1个槽位对应1个触点;第2、4、6、8、10行用于更复杂的模式。
30022-14c6e869a180abd0.png
转轮设置面板,为接插线面板,包含12行槽位,用于设置“金枪鱼”12个转轮的起始位置,以第几个触点作为起始位置就在第几个槽位插上插头。
30022-e9d6d9ab27f95b30.png
主控面板,包含40个开关,有6种颜色,用于设置机器的各种运作方式,比如设定“金枪鱼”转轮在什么条件下旋转。
30022-51ba922082f499bc.png
状态显示面板,包含上下2组小灯泡。上侧一组包含10行小灯泡,用于显示5个计数器的当前值(每2行对应1个计数器);下侧一组包含12行小灯泡,用于显示“金枪鱼”12个转轮的当前位置,它们可能是静止的,也可能不断变化,取决于主控面板的设置。
30022-f9f46b1b7027b507.png
阈值设置面板,包含20个旋钮和5个开关。机器的统计量很大,为便于分析,可以设定统计值高于或低于某个阈值时才通过打字机输出。每个计数器对应4个旋钮(阈值表示为4位十进制数)和1个开关(选择“大于”还是“小于”)。

可见,巨人机的使用十分灵活而复杂,需要两名操作人员协作完成。布莱切利雇佣了当时皇家海军女子勤务队的成员操作机器,而密码学家则专注于算法设计和结果分析。

后话

1944年6月1日,第一台Mark 2巨人机正式交付,如期赶上了重大的诺曼底登陆战役。德军万万没有想到,他们引以为傲的机电式“金枪鱼”,面对的是领先了一个时代的电子计算机。巨人机不负众望破解了德军密码,为战役的最终胜利做出了不可磨灭的贡献。

由于涉密,巨人机的知名度比ABC更低,其存在直到70年代中期才公开。1983年,78岁的弗劳尔斯专门撰写了一篇论文——《巨人机的设计》,他发现自己已经很难记起机器的许多细节,在采访了当时团队中一部分幸存的工程师后才得以写成。连建造者的记忆都在淡却,更别提后人粗浅的了解了。

巨人机是世界上第一台可编程计算机,但它是专用的,不具有图灵完备性。但一位旧金山大学的教授于2009年证明,将10台巨人机以某种方式组合之后可以达到图灵完备。但这种证明其实意义并不大,巨人机本身是为完成特定任务而设计的,弗劳尔斯也承认在建造它时从没想过现代计算机是什么模样的,甚至还没听说过有用“computer”来称呼机器的做法。

尽管如此,巨人机对电子计算的探索十分成功,为英国战后的计算机研制做好准备。

参考文献


  1. 测试时,工程师们发现纸的韧度最多可支撑每秒9700行的读取速度。

  2. 光电探测器可以有多种类型,比如光敏电阻(电阻值遇光照迅速减小)和光电管(类似电子管,只是激发阴极电子的不是热而是光),都是基于光电效应实现的。

  3. 由于图灵极高的历史地位,有些文献会误认为巨人机是图灵的作品,其实图灵并没有直接参与巨人机的建造,只是机器的实现用到了他的图灵方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值