密码——智慧长河里的明珠
一提到密码,我们会想起什么?
是账号条码下方的一排小黑点,还是密码锁上一排杂乱无章的数字,亦或是电报发报员手底流淌出的“滴滴”声?密码在当今的生活中扮演了重要的角色,它保护我们的账号和信息安全,并作为一门实用的学科,留给世人无尽的可能去探索。
时光永是流失,日月依旧穿梭,密码作为一种人类文明智慧的象征,从来不会因为什么变革而失去光泽。接下来我们便以历史长河为线,以密码经典为珠,纵览密码发展的沿革,对其大概的内容框架有一个初步的了解。
由于生产力在历史上有较大的几个变革时期,随之而来的是人们的思想的解放以及密码形式多样化变化的几个节点。密码的发展历程大致经历了两个阶段:古典密码和近现代密码。古典密码从最简单的工具上探索加密的方式,在这个阶段产生的经典密码的难度也是处于初级的、较为简单的阶段;近代密码则进入了计算机阶段,复杂程度大大提升了;到了现代文明,密码逐渐发展成为一门科学,“密码学”也逐渐进入大众的视野。密码从此广泛地应用在了人们的生活中,并承担了重要的责任。接下来,就让我们从古典密码开始,解开密码的神秘面纱吧。
古典密码
1.1国外密码的起源
1.1.1古埃及
人类文明刚刚形成的公元前2000年,作为四大文明古国之一的古埃及就有了密码的影子。贵族克努姆霍特普二世的墓碑上有一段不同于我们已知的埃及象形文字的“字符”,根据以往的经验推测,这段“字符”应该是记载了在阿梅连希第二法老王朝供职期间,克努姆霍特普二世所建立的功勋。通过研究发现,这些“字符”实际上是由一位擅长书写的人,将普通的象形文字变形处理之后,铭刻于墓碑上的。经过处理的文字,巧妙地将信息进行了隐藏,所以从本质上来讲,这也是一种“密码”人。们推测,这是为了赋予铭文以庄严和权威,才将文字进行“加密”。可惜的是,这种具体的演化方式已经失传,现如今我们也无法还原当时人们这种巧妙的智慧了。
1.1.2古希腊
scytale密码
公元前400年,斯巴达人发明了“塞塔式密码”。他们把长条纸螺旋形地斜绕在一个多棱棒上,让纸条被多棱棒分割成一个个的类似格子一样的区域,沿着这个区域,将文字沿棒的水平方向从左到右书写,写一个字旋转一下,换一个区域。写完一行再另起一行从左到右写,这样一来,本来是完整通顺的一句话,就被机械地分割开了。将信息写完后,解下来的纸条上的文字消息杂乱无章、无法理解,这就将原来的信息转换成了密文。只把展开后的纸条传递出去,只有解密人将纸条绕在另一个同等尺寸的多棱棒上后,才能看到原始的消息。
这种加密的方式只与加密工具有关,即多棱棒的尺寸决定了译文的准确程度。其实,上述过程中的多棱棒也可用木棍代替:将纸条缠在一根粗细均匀的木棍上,沿着木棍的长径书写文字,这样文字信息便被间隔开了。将纸条解下后,解密人需要找到一根粗细相同的木棍才能破译信息。相比较于“多棱棒”式的加密方式,这种“木棍”式似乎更容易理解。
所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。
例如:YOU ARE BEAUTIFUL 将这么一句话用栅栏密码的方式加密时,首先将三个单词之间的空格去掉,变成:YOUAREBEAUTIFUI。再将这一段话的字母两两分组:YO UA RE BE AU TI FU I。再将每组的第一个字母和第二个字母单独拿出来,变成两组:YURBATFI OAEEUIU。这样一来,加密就完成啦。在解密的时候,需要将这两段字母分开,将前后两段交叉着拼在一起,形似栅栏一般,所以称之为“栅栏密码”。
在最开始的时候,“栅栏密码”仅仅适用于英文字母,而在这种方法传入中国以后,同样“入乡随俗”,应用在了汉语的拼音上。同时,栅栏密码的变换方式还是非常多的。比如,将原来信息的字母分成每三个一组,或是将第二个字母组成的一大组字母放在第一组的前面,这样信息相当于被进一步加密了。
“塞塔式密码”与“栅栏密码”虽然都属于比较简单比较古典的密码,但解密起来也是十分困难的,尤其是对于没有学习过这方面知识的人来说,面对一团杂乱无章的字母,通常都是一头雾水。
1.1.3古罗马
八世纪,罗马教徒为了传播新教,创立了“圣经密码”。
可能有的小伙伴已经听说过“圣经密码”,它其中解密出的好多事件一一被证实,为它戴上了一件恐怖与神秘的面纱。“圣经密码”也因此广为人知。
“圣经密码”的原理是:从圣经第一字母开始,找寻一种可能跳跃序列,从1、2、3 个字母,依序到跳过数千个字母,看能拼出什么字,然后再从第2个字母开始,周而复始。一直到圣经最后一个字母。这种方法看似有些笨拙,但在好多密码被找出后,我们才发觉,圣经中居然隐藏了这么多信息。同时,这些信息居然还能完美地隐藏在一本完整的著作里,更是让人瞠目结舌。随着人们的不断探究,破译《圣经》的历程也在不断推进,众多历史事件被一一验证,不管是巧合还是其他神秘的原因,“圣经密码”是一件值得我们去探究的新领域。
1.1.4经典西方古典密码举例
中世纪末,西班牙的青年男女为摆脱封建阶级制度的束缚,追求平等自由的恋爱,采取了种种密信的通信方式,产生了各种原始密码;公元8~9世纪,阿拉伯人发明密码分析,以用来破译密码。随着文明的进步,密码在各个地区有了萌芽的态势,由此引发出的一系列加密以及读码的方法也层出不穷。在介绍密码的历史的同时,我更希望能够通过介绍几个著名的典例,来激起大家的学习兴趣。因此,下面是我选出具体讲述的几个经典的原始密码。
1.1.4.1猪舍密码
猪舍密码已流传百年,它将26个英文字母放到固定的格子中,进而以格子的形状来代替字母。这就相当于上面的古埃及密码一般,只是通过了一个具体的规则,将文字变形加密了。实例图如下。
从上面的图形来看,“猪舍密码”通过使用一种特定的图形将文字具象化,用图形来代替字母。在加密信息的时候,如果解密人不知道各个图形所代表的意思,读码的时候便会异常困难。
例如,若要表示字母T,便可用“>”表示。上述图二所表达的信息分别是:x marks The spot。这样一来,上面乱七八糟的一串图形,是不是就变得十分明了了呢?
但另一方面,由于这种加密方法太过经典,已经广为人知;而且图形的变化单一,导致加密的程度较浅,这种密码已不常用了。
1.1.4.2棋盘密码
棋盘密码是一种比较古老而且容易应用的一种加密信息的方式。使用棋盘密码进行加密时,首先将26个字母填入一个表格中,再给这个表格添上横列竖列的编号。就如同在一个坐标中一样,给某一个点加上横纵坐标,就可以直接用坐标的数字代替这个点(字母)了。
例如,“a”的编号为“1,1”,则“b”的编号就是“1,2”。如果我们要将以下信息加密:
明文:battle on Sunday
密文:121144443115034330434533141154
其中0代表空格。
1.1.4.3凯撒(Ceasar)密码
据说在罗马帝国时期,凯撒大帝曾经设计过一种简单的位移密码,用于战时通讯。这种加密的方式就是将明文的字母按照字母表的顺序,往后依次地推相同位数的字母,用后来得到的字母代替原来信息中的,就可以得到加密的密文了。而解密的过程正好和加密的过程相反。
例如,将battle on Sunday 中各个字母往后推五个字母,就变成了:wvoogz gi Npivt
由于这种加密方式是将每个字母往后推几个字符,所以这种方式也被成为“凯撒位移”。
1.1.4.4圆盘密码
时代不断发展,人们对凯撒密码进一步改善后发现:将字母按照不同的顺序进行移动就可以提高破解的难度,增加信息的保密程度。这种加密的方式类似于前面提到的“圣经密码”,破解的关键是找出每一个位移之间的规律。比如说,第一个字母要向后推一个字符,第二个字母要向后推两个字符,第三个字母要推三个……,那么它们之间的规律便是n(n代表这个字母在信息中的位置)。
15世纪佛罗伦萨人Alberti发明圆盘密码就是这种典型的利用单表置换的方法加密的方法。其中的“规律”便体现在了两个圆盘之间的半径大小中。
如图在两个同心圆盘上,内盘按不同(杂乱)的顺序填好字母或数字,而外盘按照一定顺序填好字母或数字,转动圆盘就可以找到字母的置换方法,很方便的进行信息的加密与解密。
凯撒密码与圆盘密码本质都是一样的,都属于单表置换。所谓单表即一个明文字母对应的密文字母是确定的,截获者可以分析对字母出现的频率,对密码体制进行有效的攻击。与单表置换相对应的是多表置换。相对单表代换来说,多表代换密码的破译要难得多。多表代换密码又分为非周期多表代换密码和周期多表代换密码。非周期多表代换密码,对每个明文字母都采用不同的代换表(或密钥),称作一次一密密码,这是一种在理论上唯一不可破的密码。这种密码可以完全隐蔽明文的特点,但由于需要的密钥量和明文消息长度相同而难于广泛使用。为了减少密钥量,在实际应用当中多采用周期多表代换密码。
Alberti的圆盘理论是古典密码学的主要代表之一, 在粘土圆盘的表面刻上带有空格的字母, 成为人类最初的加密方式, 这种方式至今还无人能破解。
1.1.4.5将字母重新排序
此种加密的方法即是将我们要传达的信息填到特定的表格中,再按照表格竖行的顺序将字母发出。首先,将要表达的信息写出来,去掉每个单词间的空格,这时候一句话就变成了一串字母;接下来,将这些字母依次填到一个设定好了的表格中,例如下表(5*9)的表格;然后,将含有信息的那串数字从表格的第一行开始从左到右填入,这样信息就会变得杂乱无章了;当然,我们在发送信息的时候绝对不能将表格直接发出去,因为此时加密的程度实在太小,而且稍微仔细研究就能发现信息。怎么办呢?这种方法的关键就是利用一个规则的表格,将信息“不规则化”。经过表格信息的填入,我们不难发现每一列里的字母都会有一定的排列了。此时,我们再将表格中的字母按照列的顺序抄下来,排成一组组杂乱无章的字母,再将这几组字母发出去,便完成了信息的加密。
例如,信息的内容是:Iwill see you in Lincoln park tomorrow afternoon将这段文字输入下面的表格
I | W | I | L | L |
S | E | E | Y | O |
U | I | N | L | I |
N | C | O | L | N |
P | A | R | K | T |
O | M | O | R | R |
O | W | A | F | T |
E | R | N | O | O |
N |
那么下一步发送出去的内容即变成了 ISUNP OOENW EICAM WRIEN OROAN LYLLK RFOLO INTRT O 看到这串密文,不知道你是什么感想呢?是不是和原来的信息相比,如同脱胎换骨了一般呢?接收信息的人在收到这串密文之后,只需画出一个一样规格的表格,再将密文竖着填进去,再横向读出来,便可以轻而易举地得到信息了;而对于不知道表格规格的人来说,这封密文便像天书一般。从这个小小的加密方式中我们就可以深刻地体会先人们的智慧了。
1.1.4.6关键词存在的加密方式
关键词,是加密和解密过程中至关重要的一个部分。
什么是关键词?关键词就如同1.1.4.2中加密时所用的表格规规格。所有的解密过程都是围绕关键词展开、或是由关键词开启的。它可能是解密的依据(如同上述表格),也可能是解密的规则(如下所述)。
还是1.1.4.5的加密方式,但是我们这次引入了一个关键词:medicinal。接下来,我们为这个单词中各个字母按字母表顺序进行编号:843526917(例如,a这个字母在26英文字母表中排在第一位上,那么它的标号就为1,b的编号为2,c的编号为3…以此类推,如果有重复的就以第一个保留,后面的舍弃),共九个数字。所以我们列出一个有九列的表格,第一行为关键词转译过来的编号,将上述信息从第二行开始从左至右依次填入。得到如下表格:
8 | 4 | 3 | 5 | 2 | 6 | 9 | 1 | 7 |
I | W | I | L | L | S | E | E | Y |
O | U | I | N | L | I | N | C | O |
L | N | P | A | R | K | T | O | M |
O | R | R | O | W | A | F | T | E |
R | N | O | O | N |
接下来就是体现关键词作用的步骤了。按照第一行数字的顺序(1.2.3.4.5.6.7.8.9),将一列一列的字母写出。例如上表中,编号1下方一列的字母为ECOT,编号2下方的字母为LLRWN……这样再将所有的字母写出,便会得到一串更加混乱的字母:ECOTLLRWNIIPROWUNRNLNAOOSIKAYOMEIOLORENTF 再将这串字母五个一组发出:
ECOTL LRWNI IPROW UNRNL NAOOS IKAYO MEIOL ORENT F
便完成了这次加密。
这样的加密方式看起来更加保险,因为在表格的基础上,从左到右的读码顺序又被关键词进一步加密了。关键词的不确定性将此种方法的加密程度又推上了一个台阶。但随之而来还有一个新的问题:关键词如何被传递到信息接收者的手里?这个问题的出现就可能引出:关键词被加密,将关键词解密后还要经过第二次解密的过程才能得到信息的情况。
1.1.4.7反破译的加密方式
译码人在破译密码时最常用的方法是频率分析法。所谓频率分析法,便是指译码人在看到一串加密后的文字时,首先会根据一些字符出现的频率,来推测其在加密前代表的含义。例如,我们在加密后用“1”这个数字代表了“a”,用“5”这个数字代表了“e”,那么按照英文中各个字母出现的频率,“e”是频率最高的字母,所以密文中“5”的出现频率也是最高的。这时译码人可能就会将“5”代表“e”这一条信息猜出,甚至进而得出所有信息的加密方式。这便是频率分析法。
因此,我们在保证信息安全时,可以通过一些手段给译码人制造一些假象,破坏频率分析法。例如,可以用多个符号来代替常用的字母,还可以加入一些没有意义的符号作为空符。具体的做法是在关键词的后面再加上几个其它的符号,然后将剩下的字母移到常用字母(a,e,o,t)的下一行对应处。例如下表中,第一行是26英文字母表中各个字母的顺序,第二行以GODTIME作为关键词将其依次填入前7个格子中;因为a、e、o、t是四个字母,所以GODTIME后面加入1.2.3.4四个数字作为补充。填完这些后,第二行剩余的空格以F开头(GODTIME的最后一个字母是E,E的后面一个字母是F),按照英文字母表的顺序填完剩余的空格(注意将关键词中出现的字母去掉,第二行不要出现重复的字母)。第二行完成以后,因为其中填入了四个数字所以便剩余Z、A、B、C四个字母没被填过,所以便将它们放在第三行中分别对应第一行a、e、o、t的地方。
a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z |
G | O | D | T | I | M | E | 1 | 2 | 3 | 4 | F | H | J | K | L | N | P | Q | R | S | U | V | W | X | Y |
Z | A | B | C |
这样一来,常用词的对应密码变成了两个,例如我们在表达“THE”这个单词时就可以有四种表现方式了“R1I”、“R1A”、“C1I”、“C1A”。这就大大提高了破译密码的难度。
虽说此种方式可以在一定程度上扰乱译码人的视听,但是译码人还是可以通过经常出现的且连在一起的两个字母,或是连在一起的重复字母而有所发现。那么,有没有一种方法可以用两个乃至多个字母来代表信息中的字母呢?由此想法,我们的先人们想出了将多个字母表结合到一起进行加密的方法。
1.1.4.8维吉尼亚密码
为了提高密码的破译的难度,人们发明了一种多表置换的密码,像上面1.1.4.4里面所提到的那样,多表置换使加密的程度更加复杂,即一个明文字母可以表示为多个密文字母。多表密码加密算法结果将使得对单表置换用的简单频率分析方法失效,其中维吉尼亚密码就是一种典型的加密方法。
人们在单一凯撒密码的基础上扩展出多表密码,称为“维吉尼亚”密码。该方法最早记录在吉奥万?巴蒂斯塔?贝拉索吉奥万( Giovan Battista Bellaso)于1553年所著的书《吉奥万·巴蒂斯塔·贝拉索先生的密码》里。
维吉尼亚密码是使用一个词组(语句)作为密钥(关键词又称密钥),词组中每一个字母都作为移位替换密码密钥确定一个替换表。维吉尼亚密码循环的使用每一个替换表完成明文字母到密文字母的变换,最后所得到的密文字母序列即为加密得到的密文。
下图便是维吉那正方形:
K
a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | |
A | B | C | D | E | F | G | H | I | G | K | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | |
B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B |
C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C |
D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D |
E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E |
F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F |
G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G |
H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H |
I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I |
J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J |
K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K |
L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L |
M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M |
N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N |
O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P |
Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q |
R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R |
S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S |
T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J |
实际上,字母表很简单,就是将26个字母写成一个正方形,依次用了26种凯撒移位。而它的复杂之处就在于每个密码字母都可能代表26个原始字母,所以很难破译。
现在,我们来看一下如何使用这种密码。
首先,我们还是需要一个关键词。还以MEDICINCAL为关键词,Iwill see you in Lincoln park tomorrow afternoon为信息。我们需要将关键词重复的写在信息的上方:
MEDICINALMEDICINALMEDICINALMEDICINALMEDIC
iwillseeyouinlincolnparktomorrowafternoon
下面我们开始对信息进行加密。信息的第一个字母为i,它所对应的关键词字母是M,那么我们在维吉那正方形中的最左边一列中找到“M”,然后在它所在的横行中找到与“i”对应的字母“V”。所以加密后的第一个字母为“V”。依次类推,将信息中的字母全部替代掉,就可以得到一封完整的密码信了。从加密的方式来看,关键词越长,加密的复杂性越高。同时,如果我们将关键词进行二次加密,则破译难度将会更大。
很多年以来,维吉尼亚密码都被认为是不可破解的,但查尔斯?巴贝奇(Charles Babbage),一个独立的英国富人在19世纪50年代向人们展示了事实并非如此。而在另一方面,巴贝奇为世人所熟知还在于其在计算机科学领域的卓越贡献。他通过寻找重复的字母段破解了这个密码系统。下面就是他破解的具体过程。
维吉尼亚密码的优势在于,这种密码被假定为它将不同位置的字母进行不同形式的加密。比如同一段文字中的“THE” 可能在前面表现为“UPK”,但在后面则被表现为“BNF”。但是,第一个和第三个“THE”都会被编码为“UPK”。第一个“THE”中的“T”会用“B”来进行编码,而第三个“THE”中的“T”也同样是用“B”来编码。发生这种情况是因为第三个“THE”是排在第一个“THE”后面第21个字母,而3字密钥BIG会在重复7次之后又回到了最开始。在任何比密钥要长得多的加密信息中,都会不可避免地出现类似这样的重复。而一个解密者应该如何才能揭示加密文件的真正面目呢?比如,如果加密文字“UPK”出现了两次,第一个"U"到下一个"U"会数21个字母,这样一来,巴贝奇就可以推断出密钥的长度是21的整除数。或者换种说法,他可以推断出21是密钥的倍数。如果获得了足够多类似的线索,巴贝奇就可以知道密钥的确切长度。一旦他知道了密钥长度,他就可以对加密信息进行日常频率分析。这样,就来到了我们上述提到的频率分析法了,然后经过精密的计算,巴贝奇便得出了维吉尼亚密码的解密方法了。
从巴贝奇的解密过程来看,我们可以得出结论:一个优秀的解密人不仅要有敏锐的观察力、丰富的联想能力以及高超的数学能力,对于古典密码学习和见识的经验也是十分重要的。
1.2中国古代密码起源
看过了西方古典的密码简述,我们接下来将目光转向古老的东方文明。在几千年前的中国,我们的祖先亦有着超凡的智慧。下面,我们就来看一下中国古代都有哪些令人惊叹的“密码艺术”
1.2.1阴符
首先是用于古代战争的“阴符”。据《太公六韬》所载,其由姜尚(即姜子牙,公元前1128年—公元前1015年)发明,距今已有3000多年的历史了。
关于“阴符”的来源,是源于一场惊险的战争。相传商纣王末年,在姜太公的辅佐下,周氏由弱变强。但局势依然动荡,叛军四起。有一次姜子牙带领军队外出时,周军指挥大营被叛兵包围,情况危急。姜太公欲令信使突围,回朝搬兵。但由于当时通讯不便,他亦没有明显的信物;怕信使遗忘机密,又怕周文王不认识信使,耽误军务大事,于是就将自己珍爱的鱼竿折成数节,每节长短不一,各代表一件军机,令信使牢记,不得外传。信使几经周折,逃过了敌方的搜捕,回到朝中。周文王将几节鱼竿合在一起,亲自检验,周文王辨认出是姜太公的心爱之物,便得到信息,相信了信使的话,亲率大军到事发地点,解了姜太公之危。事后,姜太公拿着那几节使他转危为安的鱼竿,灵光一现。他将鱼竿传信的办法加以改进,便发明了“阴符”。
一套阴符包括尺寸不等,形状各异的符,每只符都表示特定的含义,而阴符的形状和表达的意思是事先约定好的,所以收信人在接到发信人的阴符后,可以明白其意思。
最初的“阴符”是竹制的,后又改用木片、铜片等。“阴符”上无文字,无图案,传“符”人不知“符”中含义,即使被俘,叛变投敌,敌人也难以知道“符”的内容。
下面是部分阴符的规格。
大胜克敌之符,长一尺;
破军擒将之符,长九寸;
降城得邑之符,长八寸;
却敌报远之符,长七寸;
警众坚守之符,长六寸;
请粮益兵之符,长五寸;
败军亡将之符,长四寸;
失利亡士之符,长三寸。
1.2.2阴书
所谓“阴书”,就是把一封竖写的秘密文书横截成3段,派出3个人各执一段,于不同时间、不同路线分别出发,先后送给收件者。收件者收齐了3段文件才能悉知秘密文书的全部内容。万一送件途中某一发送者被敌方截获,敌方也难以解读文书的全部内容。
阴书由阴符演变而来,能比阴符传递更具体的消息,是古代通信中另一种保守秘密的方法,相传也是由姜子牙发明。
据《六韬·龙韬·阴书》记载,武王问姜太公:“如果我要率领军队深入敌国境内,根据敌情进行灵活的机动来谋求出其不意的胜利。事情繁杂,我要想给远方的军队传递信息,用阴符难以说明问题;彼此相距又十分遥远,言语难通。在这种情况下应该怎么办?”
姜太公回答道:“所有密谋大计在传递时,都应当用阴书,而不用阴符。国君用阴书向主将传达指示,主将用阴书向国君请示问题,这种阴书都是一合而再离、三发而一知的。所谓一合而再离,就是把一封书信分为三个部分;所谓三发而一知,就是派三个人送信,每人只是其中的一部分,相互参差,即使送信的人也不知道书信里完整的内容,这就叫阴书。”如此一来,即使一个信使被敌方抓捕或是叛变,都不用担心军情泄露。
1.2.3字验
字验是宋代军事通信保密之法。以旧诗为载体的军事通讯“密码”。即战前制定军中常有之事四十余条,如请箭、请弓、请粮料、请添兵、请移营、被贼围、战不胜、将士叛等;选旧诗四十字,不得重字,每字依次配一条,作为暗号。在使用时,就以暗号代替具体的事件。其字号由主将战前临时编排,限少数将领掌握,不得漏入军中。如果发生改变,就以将领最新颁布的为准。
字验之法可以随时按需要更动,具有相当的灵活性,它不但能保证情报落入敌手之后不致泄密,而且即使通讯人中途变节,情报也能确保安然无恙。
在三国时期,曹操平汉中时,欲进兵,怕马超拒守。欲收兵,又恐蜀兵耻笑,心中犹豫不决。就在这个时候,庖官进鸡汤,曹擦看见碗中的鸡肋,沉思不语。这时有人入账,请示曹操夜间的口令,曹操随口答道:“鸡肋!”这时,曹军一谋士杨修见令传鸡肋,便让随行军士收拾行装,准备归程。其余的将士们便问杨修,何以得知魏王要回师,杨修说:“从今夜口令,便知魏王退兵之心已决。鸡肋,食之无味,弃之可惜。今进不能胜,退恐人笑,在此无益,不如早归。魏王班师就在这几日,故早准备行装,以免临行慌乱。”曹操听说后大怒,以扰乱军心为由处死了杨修。这便是“杨修之死”的故事。其中,曹操下达的“鸡肋”口令,究竟是有撤军的意思还只是随口一说,我们不得而知,但从这个故事中我们便可以看出,“夜间口令”在三国时期的军事中已经被广泛使用了,而且为保证军情不被泄密,通常是由将领直接下令的,且更换的频率是非常高的。
1.2.4反切码
“反切码”是著名的抗倭将领、军事家戚继光发明的,最初依然是用于军事方面。“反切码”这个名字源自反切拼音。何谓反切拼音?即用两个字为另一个字注音,取第一个字的声母和第二个字的韵母,进行拼音,例如:第一个字为“山”,那么信息中第一个字拼音的声母即为“sh”;第二字为“洗”,则信息中第一个的韵母为“i”。这样我们便可以得出第一个的读音是“shi”,则推测可能的字就可以了。这种加密的方式在当时被称为最难破解的“密电码”。
戚继光专门编了两首诗歌,作为“密码本”:一首是:“柳边求气低,波他争日时。莺蒙语出喜,打掌与君知”;另一首是:“春花香,秋山开,嘉宾欢歌须金杯,孤灯光辉烧银缸。之东郊,过西桥,鸡声催初天,奇梅歪遮沟。”
这两首诗歌是反切码全部秘密所在。取前一首中的前20个字的声母,依次分别编号1-20;取后一首36字韵母,顺序编号1-36。再将当时福州方言字音的八种声调,也按顺序编上号码1-8,形成完整的“反切码”体系。其使用方法是:如送回的情报上的密码有一串是5-25-2,对照声母编号5是“低”字,韵母歌编号25是“西”字,两字的声母和韵母合到一起了是di,对照声调是2,就可以切射出“敌”字。此外,戚继光编写了一本《八音字义便览》,作为训练情报人员的专门教材。
戚继光的密码编写技术,无疑在当时是很实用很科学的,主要体现在:一是作为声母韵母的诗词本身就是保密的,没有获知其内容根本无法破译;二是反切方法也是保密的,不懂得反切法的技术对敌方来说也是无法获知所传输内容的。
1.2.5析字法
古人将汉字的构造方法分析、归纳为“六书”,即象形、指事、会意、形声、转注、假借。据此,将汉字分为音、形、义3个方面。汉语传统修辞学根据这一原理,创制了“析字格”这种游戏式的隐语。
如《三国演义》有民谣道:“千里草,何青青;十日卜,不得生。”其实就是说董卓作恶多端,人人痛恨,因为“千里草”为“董”,“十日卜”为“卓”。
又如:公元683年(唐弘道元年),唐高宗死后唐中宗即位。武则天以皇太后名义临朝称帝,不到两个月又废唐中宗,立第四子李旦(唐睿宗)为皇帝,但朝政大事均由自己专断。因此,引起大臣裴炎、徐敬业和骆宾王等人的强烈反对。于是,徐敬业聚兵10万人,于扬州起兵,反抗武则天统治。裴炎为徐敬业作内应,欲以析字手段为其传递秘密信息。后因有人告密,裴炎被捕,其未发出的密信落到武则天手中。这封密信上只有“青鵝”二字,群臣对此大惑不解。最后,还是武则天破解了“青鵝”的秘密:“青”字拆开来就是“十二月”;而“鵝”字拆开来就是“我自与”。密信的意思是让徐敬业、骆宾王等率兵于12月进发,裴炎在内部接应。“青鵝”破译后,裴炎遂被杀,接着,武则天派兵击败了徐敬业和骆宾王的武装反抗。
这两个都是经典的“析字法”密码典例。“析字法”是与汉字的结构密切相关的一类加密方法,极具中华传统文化的特色。通常,加密信息的过程都十分精妙,能解出其中缘由的人都有极高的文学修养。我们在正月十五猜灯谜的过程中,有一类灯谜就是利用了此种方式进行设迷的。
1.2.6隐语法
隐语也称暗语,是把秘密信息变换成字面上有一定意义,但与该信息完全无关的话语。就如同用“蜡烛”二字代表“苍蝇”的含义一般,是一种沿用时间很长,应用范围很广的自然语言保密方法。
《左传·宣公十二年》记载,春秋时楚子欲攻打萧国,萧国实力较为弱小,萧国大夫还无社恐怕自己在战争中受到牵连,便在战前向楚国大夫申叔展求救。申叔展为避免对话被闲人偷听,便用隐语问还无社:“你有麦粷吗?”,还无社答:“没有。”申叔展又问:“你有山鞠穷吗?”还无社仍答:“没有。”在这里,麦粷和山鞠穷是两种防治风温的中草药,申叔展用这两种药名做隐语,暗指水坑水井,暗示还无社在战斗中身藏水井里。申叔展见还无社没有领会隐语的含义,便进一步暗示:“你得了风湿病怎么办?”还无社这才将隐语与水井联系起来,明白了申叔展的意思。次日,萧国战败,申叔展救出了藏匿在废水井中的还无社。
而我们接触到的最著名的隐语,可能就是《林海雪原》中东北山匪间用的“黑话”了。他们之间用的词语都让旁人摸不着头脑,但却逐渐发展成为彼此间交流的一种独特“语言”。
1.2.7藏头诗、藏尾诗、漏格诗及绘画
我国古代早有以藏头诗、藏尾诗、漏格诗及绘画等形式,将要表达的真正意思或“密语”隐藏在诗文或画卷中特定位置的记载。这种方式在现如今也常常被应用。一般人通常只注意诗或画的表面意境,而不会去注意或很难发现隐藏其中的“话外之音”。
如《水浒传》中梁山为了拉卢俊义入伙,“智多星”吴用和宋江便生出一段“吴用智赚玉麒麟”的故事来,利用卢俊义正为躲避“血光之灾”的惶恐心理,将其逼上梁山。他写了四句卦歌:
芦花丛中一扁舟,
俊杰俄从此地游。
义士若能知此理,
反躬难逃可无忧。
其中暗藏“卢俊义反”四字。结果,这首诗成了官府治罪的证据,密信的官员竟以此为证据逮捕卢俊义,最终把卢俊义“逼”上了梁山。
在现代的影视作品中,更广为人知的是唐伯虎写的藏头诗:“我爱秋香”:
我画蓝江水悠悠,
爱晚亭上枫叶愁。
秋月溶溶照佛寺,
香烟袅袅绕经楼。
一首文采不斐的写景诗,细看居然表达了深深的情谊。同样,这件佳事也为密码神秘的面纱里增添了浪漫的色彩。
看过了古典密码里古人的智慧,接下来就跟随历史的脚步,来看一下生产力急速发展后,近代的密码又呈现出什么样的形态了吧。
密码形成一门新的学科是在20世纪70年代,这是受生产力蓬勃发展刺激和推动的结果。直接导致密码进行快速变革的,便是计算机出现以及广泛应用了。计算机和电子学时代的到来给密码设计者带来了前所未有的自由,他们可以轻易地摆脱原先用铅笔和纸进行手工设计时易犯的错误,也不用再面对用电子机械方式实现的密码机的高额费用。总之,利用电子计算机可以设计出更为复杂的密码系统。然而,快速电子计算机一方面为加密技术提供了新的概念和工具,另一方面也给破译者提供了有力武器。
2.1密码学与二战
在二十世纪二十年代,人们发明了各种机械加密设备用来自动处理加密。大多数是基于转轮的概念。1918年美国人E.H.Hebern造出了第一台转轮机,它是基于一台用有线连接改造的早期打字机来产生单字母表替代的,输出是通过原始的亮灯式指示。Arthur Scherbius于1919年设计出了历史上最著名的密码机—德国的Enigma机,。在二次世界大战期间, Enigma曾作为德国陆、海、空三军较高级密码机。Enigma机使用了3个正规轮和1个反射轮,通过密码机在战争中传递信号,有效地实现了指挥远处作战的目的。由于密码机编制出的密码具有极大的随机性,且极易变化,这使得科技相对落后的英军从1942年2月到12月都没能解读出德国潜艇发出的信号。英军也因此屡遭重创。
转轮密码机的使用虽然大大提高了密码加密速度,但由于密钥量有限,到二战中后期时,引出了一场关于加密与破译的对抗。首先是波兰人利用德军电报中前几个字母的重复出现,破解了早期的Enigma密码机,而后又将破译的方法告诉了法国人和英国人。英国人在计算机理论之父——图灵的带领下,通过寻找德国人在密钥选择上的失误,并成功夺取德军的部分密码本,获得密钥,以及进行选择明文攻击等等手段,破解出相当多非常重要的德军情报。密码机的破译,使得二战提前结束,相当于拯救了1000万人的性命。
另一方面,计算机和电子学时代的到来使得美国在1942年制造出了世界上第一台计算机。计算机与密码机相比,具有更快的计算速度,更复杂的算法。美国利用计算机轻松地破译了日本的紫密密码,使日本在中途岛海战中一败涂地。1943年,美国在计算机的帮助下,取得了战时情报,得知山本五十六将于4月18日乘中型轰炸机,由6架战斗机护航,到中途岛视察。罗斯福总统亲自做出决定截击山本,山本乘坐的飞机在去往中途岛的路上被美军击毁,山本坠机身亡,日本海军从此一蹶不振。综合两件关键性事件,可以说密码学的发展直接影响了二战的战局。
2.2现代密码学发展中的著作
1949年Shannon发表的《保密系统的信息理论》一文为私钥密码系统建立了理论基础,从此使密码学成为了一门科学。该学科里最完整的非技术性著作是Kahn编著的《破译者》。这本书回溯了密码学的历史。内容包括从大约源于4000多年前埃及人的原始的和有限的使用。
直到二十世纪两次世界大战中密码都所扮演着关键的角色。Kahn的著作完成于1963年,覆盖了历史上对当时密码学科的发展最为重要的方面。它的意义在于它不仅记述了1967年之前密码学发展的历史,而且使许多不知道密码学的人了解了密码学。
密码学历史上最突出的发展乃是1976年Diffie和Hellman发表的《密码学的新方向》一文。他们首次证明了在发送端和接收端无密钥传输的保密通信是可能的,从而开创了公钥密码学的新纪元。这篇论文引入了公钥密码学的革命性概念,并提供了一种密钥交换的创造性的方法,其安全性是基于离散对数问题的困难性。虽然在当时两位作者并没有提供公钥加密方案的实例。
2.3密码学斗争的隐蔽性
自从密码的发展进入近现代以来,密码编码和密码破译的斗争是一种特殊形式的斗争,这种斗争的一个重要特点是它的隐蔽性。无论是使用密码的一方,还是破译密码的一方,他们的工作都是在十分秘密地进行。特别是,对于他们的工作的最新进展更是严格地保密。当一方改进了自己的密码编码方法时,他不会公开所取得的这种进展;当另一方破译了对方的密码时,他也不会轻易地泄露破译的成果和使用破译所取得的情报,以便能长期地获取情报并取得更有价值的信息。所以,密码战线上的斗争是一种无形的,不分空间和时间的,隐蔽的战争。无数历史事实证明,战争的胜负在很大程度上依靠密码保密的成败。
2.4摩斯密码
摩斯密码作为一种著名有代表性的密码,相信很多人都对它比较熟悉。下面我将先从定义开始为大家介绍。
2.4.1摩斯密码的定义
摩斯密码又称摩尔斯电码,是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。它发明于1837年,发明者有争议,是美国人塞缪尔莫尔斯或者艾尔菲德·维尔。摩尔斯电码是一种早期的数字化通信形式,但是它不同于现代只使用零和一两种状态的二进制代码,它的代码包括五种:点、划、点和划之间的停顿、每个词之间中等的停顿以及句子之间长的停顿。
2.4.2摩斯密码的使用规则
摩尔斯码在早期无线电上举足轻重,是每个无线电通讯者所须必知的。由于通讯号技术的进步,各国已于1999年停止使用摩斯密码,但由于它所占的频宽最少,又具一种技术及艺术的特性,在实际生活中依然有着广泛的应用。它由两种基本信号和不同的间隔时间组成:短促的点信号“.”,读“滴”(Di);保持一定时间的长信号“—”,读“嗒”(Da)。间隔时间:当表示为“滴”的时候,持续时间为一个时间单位1t;当表示为“嗒”的时候,持续时间为三个时间单位3t;在“滴”和“嗒”之间的空格时间为一个时间单位1t;在表达的字符与字符间,持续时间为三个时间单位3t;而在字与字间,间隔的时间单位为7t。1837年的摩尔斯电码是一些表示数字的点和划。数字对应单词,需要查找一本代码表才能知道每个词对应的数。因此只用一个电键可以敲击出点、划以及中间的停顿。
摩尔斯发明了电报之后,希望自己的这项技术能够有更大的发展空间。但他缺乏相关的专门技术,于是他与艾尔菲德?维尔签定了一个协议,让他帮自己制造更加实用的设备。艾尔菲德构思了一个方案,通过点、划和中间的停顿,可以让每个字符和标点符号彼此独立地发送出去。他们达成一致,同意把这种标识不同符号的方案放到摩尔斯的专利中。这就形成了现在我们所熟知的美式摩尔斯电码,它被用来传送了世界上第一条电报。
这种代码可以有多种多样的形式。它可以是电报电线里的电子脉冲,也可以是一种机械的或视觉的信号(比如闪光),亦或是可以控制的有规律的声音。比如在电影《星际穿越》里,父亲与女儿在超越时间的条件下联系时,便是用一块机械表有规则的滴答声来作为信息的载体。
2.4.3摩斯电码的分类
摩斯密码做电子脉冲的形式时,可以分做两类:美式电码和现代电码。
2.4.3.1.美式摩斯电码
作为一种实际上已经绝迹的电码,美式摩尔斯电码使用不太一样的点、划和独特地间隔来表示数字、字符和特殊符号(如下图所示)。这种摩尔斯电码的设计主要是针对地面电报务员通过电报电线传输的,而非通过无线电波。
这种古老的、交错的电码是为了配合电报务员接听方式而设计的。就像我们在抗战剧中看到的画面一般,电台的发报员手底滴滴的声音便是在使用这种美式电码最为信息载体的。这种电码不像现在可以从扬声器或者耳机中听到电码的音调,你只能从这些最早期的电报机的一个机械发生装置听到嗒嗒的声音,甚至是从发送电键(这种电键在不发送信号时被设置为被动模式,负责发声)接听。
这些报务员大多是为铁路或以后的西联电传等服务。像那时的许多年轻人一样,十几岁的爱迪生就是这样一名话务员。
2.4.3.2现代国际摩斯电码
1848年,Friedrich Clemens Gerke发明了现代国际摩尔斯电码,其首先被用在德国的汉堡和库克斯港之间的电报通信。1865年之后在少量修改之后由国际电报大会在巴黎统一标准化,后来由国际电信联盟(ITU)统一定名为国际摩尔斯电码。这样一来,摩斯电码得以在全球范围内推广。
在今天,虽然国际摩斯电码已经有了质量更高的替代品,但其依然被使用着,虽然这几乎完全成为了业余无线电爱好者的专利。在一些国家,业余无线电的一些波段仍然只为发送摩尔斯电码信号而预留。
因为摩尔斯电码只依靠一个平稳的不变调的无线电信号,所以它的无线电通讯设备比起其它方式的更简单。并 且它能在高噪声、低信号的环境中使用,这就凸显了其在战争时期广泛应用的优势。同时,由于其使用一套统一的编码语言,因此可以帮助两个母语不同,在话务通讯时会遇到巨大困难的操作者之间进行沟通。
在美国,为了获得联邦通信委员会(FCC)颁发的允许使用高频波段的业余无线电证书,必须通过每分钟五个单词(WPM)的摩尔斯码发送和接收测试,这个规定一直延续到到1991年。1999年以前,达到20WPM的熟练水平才能获得较高级别的业余无线电证书(额外类);1999年12月13日,FCC把额外类的这项要求降低到了13WPM。
2003年世界无线电通信大会做出决定,允许各国在业余无线电执照管理中自己任选是否对摩尔斯电码进行要求。虽然在美国和加拿大还有书面上的要求,但在一些其他国家正准备彻底去除这个要求。
熟练的爱好者和军事报务员常常可以接收(抄报)40WPM以上速度的摩尔斯码。虽然传统发报电键仍有许多爱好者在使用,但半自动和全自动的电子电键在今天使用越来越广泛。计算机软件也经常被用来生成和解码摩尔斯码电波信号。
2.4.4摩斯电码的应用举例
单单对摩斯电码的历史进行简略的讲述,我们可能对其的印象还不够深。下面我们来通过几个具体的例子来认识一下摩斯电码究竟是如何工作的。
1.摩斯密码编码简单清晰,二义性小,编码主要是由两个字符表示:"."、"-",一长一短,这在很多情况下应用很多,比如发送求救信号。电影《风声》中就是采用在衣服上缝出摩尔密码,将消息传播出去。
2.在利用摩尔密码灯光求救的时候,定义:灯光长亮为"-",灯光短亮为".",那么就可以通过手电筒的开关来发送各种信息,例如求救信息。如果灯光是按照“短亮暗短亮暗短亮暗长亮暗长亮暗长亮暗短亮暗短亮暗短亮”这个规律来显示的话那么它就意味是求救信号SOS。
这是因为,SOS的摩尔编码为:··· --- ··· ,按照上面的规定即可进行灯光编码。这个编码其实非常简单,三短、三长、三短。这是一种野外营救或者求救时用到的常识,在特殊情况下有关键作用。
3.除了灯光之外,利用声音(两种区别的声音)也可以发出求救信号。这种求救方式是我们都应该进行了解的,也许在必要的时候就可以派上用场。例如,可以用一长一短的两种声音来代替“点”与“短线”,同样可以达到传递信息的目的。
2.4.5常用的特殊符号
对于新手来讲,直接应用摩斯电码进行交流是一件比较困难的事情。其实在通讯方面,摩斯电码的应用是有许多特殊而直接的符号的,它们通常代表独特的含义。
AR:·—·—·(停止,消息结束)
AS:·—···(等待)
K:—·—(邀请发射信号)(一般跟随AR,表示“该你了”)
SK:···—·—(终止,联络结束)
BT:—···—(分隔符)