ABC之后,历史仍未安排ENIAC出场。1943年,电子时期的第2个重要角色诞生在图灵所处的布莱切利。
1941年6月,意识到谜机可能已被破解的德军启用了一种复杂度更高的加密系统,并且这一次英国没能拿到相应的机器,布莱切利的密码学们要和一个完全未知的强大敌人抗争。在听闻德国人用一种海鱼的名字称呼这套系统后,布莱切利也给它起了个绰号——“金枪鱼”。
1941年8月,“金枪鱼”的操作员由于一时疏忽将同一条信息发送了两遍,尽管两条密文并不一样,但经验丰富的布莱切利在截获之后立马意识到它们指向同一条明文。这个小小的马脚,被这里绝顶聪明的密码学家们牢牢抓住,真可谓一叶知秋,他们据此精准地推测出“金枪鱼”的组成结构和工作原理。它包括12个谜机那样的转轮,每个转轮的旋转模式各不相同,每个转轮上导电触点的数量也不一样,导电触点可以在接通和断开两个状态之间切换,使用前可改变各触点的状态和转轮的起始位置。
和谜机的字符级加密不同,“金枪鱼”进行的是编码级加密,当时的电传打字机使用的ITA2码制(国际电报字母表第2号)用5位二进制对单个字符进行编码,“金枪鱼”将这些二进制位与特定的二进制密钥进行异或运算后生成密文。异或是一种特别的逻辑运算,它是可逆的,明文和密钥异或之后生成密文,反之,密文和密钥异或之后又可以得到明文,这就是“金枪鱼”加密和解密的基本原理。
ITA2 | 秘钥 | 密文 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
破解“金枪鱼”,不仅要猜出转轮上所有导电触点的通断状态,还要猜出各转轮的起始位置,其组合数量之巨,不仅远远超出了人力处理的能力范围,也令炸弹机这类机电设备束手无策。布莱切利急需一种更高速的解密机器,电子管方案成为不二之选。
研制电子计算机的重任落在了位于伦敦西北角的邮局研究站身上,该研究站有着丰富的电子通信经验,在布莱切利的部分密码学家对电子管的可靠性还抱有疑虑的时候,邮局研究站的工程师早已对电子管的大规模应用驾轻就熟。1943年2月,在图灵的推荐下,来自研究站的托马斯·弗劳尔斯(Thomas Harold Flowers)扛起这面大旗,在布莱切利一部分人“等机器造好战争怕是早就结束了”的冷嘲热讽中,带领50人的团队仅用了11个月就完成了第一台原型。1944年1月,当这台包含了1500~1600个电子管的“庞然大物”来到布莱切利,密码学家们被深深震撼了,它比他们之前使用过的任何计算设备都庞大得多,因而被形象地称为巨人机(Colossus)。
巨人机有二型,1943年的一型为Mark 1,其建造过程中,弗劳尔斯就已经开始了第二型Mark 2的设计。Mark 2包含2400个电子管,速度更快,功能更强,截止欧洲胜利日(1945年5月8日)共建有10台之多。可惜的是,出于保密考虑,这11台机器连同其图纸都在60年代被下令焚毁,如今我们在布莱切利的英国国家计算博物馆所能见到的,是后人在1992~2008年耗时16年重建的复制品。
巨人机使用穿孔纸带输入密文,纸带每行有5个孔位,对应ITA2中的5位二进制。纸带长约61米,穿孔25000行。共设有两个纸带支架,在一条纸带工作的时候,操作人员可以准备好下一条纸带,交替使用,节省纸带更换时间。由于机器内部没有数据存储模块,纸带的头尾相接,形成环状,以便循环读取。纸带的读取速度十分惊人——每秒5000行[1],工作时发出湍急的流水声,纸带上的孔洞以近44公里的时速飞驰。这得益于光电技术的应用,在纸带的一侧安装一个灯,另一侧安装5个并排的光电探测器[2],一个探测器负责盯住一个孔位。当灯光穿过某个孔洞,其对应的光电探测器就能迅速发出电流脉冲,产生二进制信号1;当灯光被未穿孔的孔位遮挡,对应的探测器就产生二进制信号0。
巨人机基于图灵方法[3],用电路模拟“金枪鱼”的转轮位置及其导电触点的通断状态。密文流入机器后,经过一系列以异或为主,与、或、非为辅的逻辑运算,最终由电动打字机输出结果。这个结果当然不可能就是明文,而是各种统计数据,比如某个字符出现的次数,或者某些数值满足某种逻辑条件的次数,有点像现在的数据挖掘。机器内有5个电子计数器,可同时统计5项数据。密码学家根据统计结果找到密文中暗藏的线索,调整机器程序,得到新的统计结果后继续分析,如此往复,一步步逼近最终的正确答案。
巨人机的可编程性是靠开关、旋钮和接插线板实现的。其开关可以上下拨动,分别接通两个不同的功能线路,多数开关还可以被拨到中间,使两个线路都断开;其旋钮用于置数,10个位置依次对应0~9,10条数值线路像10位英俊的绅士围绕着旋钮女士,一齐向她伸出求舞之手,而旋钮总会牵手他们中的一位。
巨人机的编程本质上是一组选择,选择每个开关和旋钮的位置,选择接插线板上每个导电孔的通断。这些选择对象分布于多块操控面板之上,下面按从右至左的顺序简单介绍一下它们的功能。
可见,巨人机的使用十分灵活而复杂,需要两名操作人员协作完成。布莱切利雇佣了当时皇家海军女子勤务队的成员操作机器,而密码学家则专注于算法设计和结果分析。
1944年6月1日,第一台Mark 2巨人机正式交付,如期赶上了重大的诺曼底登陆战役。德军万万没有想到,他们引以为傲的机电式“金枪鱼”,面对的是领先了一个时代的电子计算机。巨人机不负众望破解了德军密码,为战役的最终胜利做出了不可磨灭的贡献。
由于涉密,巨人机的知名度比ABC更低,其存在直到70年代中期才公开。1983年,78岁的弗劳尔斯专门撰写了一篇论文——《巨人机的设计》,他发现自己已经很难记起机器的许多细节,在采访了当时团队中一部分幸存的工程师后才得以写成。连建造者的记忆都在淡却,更别提后人粗浅的了解了。
巨人机是世界上第一台可编程计算机,但它是专用的,不具有图灵完备性。但一位旧金山大学的教授于2009年证明,将10台巨人机以某种方式组合之后可以达到图灵完备。但这种证明其实意义并不大,巨人机本身是为完成特定任务而设计的,弗劳尔斯也承认在建造它时从没想过现代计算机是什么模样的,甚至还没听说过有用“computer”来称呼机器的做法。
尽管如此,巨人机对电子计算的探索十分成功,为英国战后的计算机研制做好准备。
测试时,工程师们发现纸的韧度最多可支撑每秒9700行的读取速度。 ↩
光电探测器可以有多种类型,比如光敏电阻(电阻值遇光照迅速减小)和光电管(类似电子管,只是激发阴极电子的不是热而是光),都是基于光电效应实现的。 ↩
由于图灵极高的历史地位,有些文献会误认为巨人机是图灵的作品,其实图灵并没有直接参与巨人机的建造,只是机器的实现用到了他的图灵方法。 ↩