替换式密码,又名取代加密法,是密码学中按规律将文字加密的一种方式。替换式密码中可以用不同字母数为一单元,例如每一个或两个字母为一单元,然后再作加密。密文接收者解密时需用原加密方式解码才可取得原文本。由于拼音文字中字的组成为有限的字母,以英语为例只有26个字母,组成可能的单元数较少,因此使用替换式密码相对较为容易,而且亦可使用简单机械进行加密;相反,非拼音文字如中文则因单元数非常大难以使用一般加密方式,必需建立密码本,然后逐字替换。更何况某些非拼音文字中字字皆由不同大小的字根来组字,较难转换,因此使用替换式密码的示例比较少。1
简易替换密码简易替换加密是一种以特定方式改变字母表上字母顺序,并以此顺序书写的加密方式。这样一张改变了字母次序的字母表即为‘替换表’。替换表可以以偏移或逆转(分别为凯撒密码和阿特巴希密码(英语:Atbash))或更复杂方式构造,此时称之为‘混合表’。传统上会先把一个关键词写在字母表最前面,再删去重复字母,这样就能得到一个混合表。
例子使用混合表系统,关键字为“zebras”:
明文为ABCDEFGHIJKLMNOPQRSTUVWXYZ;密文为ZEBRASCDFGHIJKLMNOPQTUVWXY。
明文为:flee at once. we are discovered;加密结果为:SIAA ZQ LKBA. VA ZOA RFPBLUAOAR。
传统上,密文会省略标点符号和空格,同时会有一固定长度的单位,以避免传输错误和变相显示明文中单词的边界。这些单位被称为“组”(英语:groups),有时叫“组数”(英语:groupcount)(即组的数量),并使其作为一额外检查。通常都会使用五个字母为一组,然后使用电报传送消息:
SIAAZ QLKBA VAZOA RFPBL UAOAR
如果该段明文的长度不能被五整除,将需要在最后用“NULL”补齐。这些空字符可以是任何字符,因为解密后可以看出是明显的废话(如ORANG EOOOO),所以接收器可以很容易地发现并将其丢弃。如若接收发现密文的长度不能被五整除,就可以得知传输出错,并要求重新发送。
简易替换密码有时不一定要替换至另一字母,例如在猪圈密码中,密文由格子的符号组成。
这些功能增加的安全性与以前其实相差不大,因为基本上所有奇怪的符号最后都会转换成A-Z字母。有时销售人员会在他们的名单和目录中使用非常简单的加密法:用字母来代替数字。
本文(数字):1234567890;加密字母:MAKEPROFIT。
例子:MAT代表120。
安全性简易替换密码的缺点是字母表中的最后几个字母(其中大多是低使用频率)往往留在最后。加强的办法是在加密后再做一次纵栏式移调,但很多时也没有这样做。
尽管加密用到的密钥可能性很大(26! ≈2^88.4 ,若88位元),但要破解单表加密却异常容易。只要提供有合理长度的密文,密码分析就能通过频率分布(英语:Frequency distribution)的分析推断最常见的单元的意义,即频率分析。这使破解者可用剔除法,把有个单元的意思解出来,见一个破解的例子。在某些情况下,可以从它们的字母的格局来破解,例如“attract”和“osseous”是英语中仅有的“ABBCADB”模式的“根”,即如遇见有简易替换密码的密文中出现“ABBCADB”,即可猜测其为“attract”或“osseous”。康乐及报纸拼图等包含着不少这种加密法。
按照英语的唯一解距离(英语:Unicity distance),密文平均最少需要27.6个字母才能破解混合表简易替换密码。而在正常情况下,假设遇到的是新排列方式,但通常都需要约50个字母(当中有些密文可以用得比较少)。然而,当密文有极平坦的频率分布,密文长度的需求可能越来越大。同时,加密者可以添加空字符来造成平坦的频率分布。
另外,有另一种方法来“伪造”频率分布,名为漏字文。顾名思义,这些文章会有意避免使用某个或某几个特定字母。如果漏掉的是E,那么若然继续以正常的频率分析(估计最高频率者为E)就不可能找出真正的明文。
谐音替换法早期的加密中,为增加替换式密码应付频率分析攻击的强度,有时会采用“谐音”来改变明文字母频率。在这种加密算法中,明文字母可以映射到多个密文符号。通常情况下,频率最高的明文符号(如E)会比低使用频率的字母(如X)有更多的谐音符号,使频率分布更为平坦,让分析更困难。1
但亦因此,只是字母之间互相替换就会造成不够分配,从而有了好几种不同的解决方法。其中最简单的方式可以算是用1-0共10个数字作为某些字母的替换。另一种方法则是将现有的字母分开成原字母配以简单的变化、大写、小写、上下倒转的字母、镜像文字(左右倒转)等。虽然更为艺术化,却不代表一定更安全,其中一些谐音替换法全部使用新发明的奇特符号来代表字母。
一种有趣的变化名为命名密码法(英语:nomenclator)。此加密法有许多不同的版本,之间的区别来自其前缀。而该前缀来自宣读来访贵宾称号的公职人员名字。这种密码结合一个小型密码本(英语:Codebook)组成一个大型的谐音替换表。在此密码中,常用单词会按密码本加密,余下字母则按另一本密码本加密,两者符号最后在密文中混起来,以减低简易替换密码中被破解的风险。路易十四所使用的密码是罗西诺尔家族(英语:Rossignols)创立的伟大密码,该密码直至法国王室废止后百年才被破解。
15世纪早期至18世纪后期,命名密码是外交文件及间谍最常使用的加密,然而其中大多数仍然使用加密性能较差的命名密码。虽然由十六世纪中叶开始政府情报机构的密码分析员就破解部分命名密码法,但使用者通常的反应仅仅是加大谐音替换表。十八世纪后期,谐音替换系统开始消亡之时,一些命名密码已有高达5万个符号。
然而,并非所有命名密码法都已被破解。直到今天,仍然不时有新的命名密码被破解的新闻。
比尔密码是另一个谐音替换法的例子。这个故事指在1819年至1821年期间由一个加密文本来隐藏美国独立宣言中所述的宝藏。在这里,每个密文字符由一个数字替换。数字代表着独立宣言中第几个字的第一个字母。独立宣言中许多字的首字母都是一样的,而密文数字能是其中任何一个,例如正文中第二和第六个字都是“I”开头,即“I”既可以是2,又可以是6。而解读仅仅就是把密文中的数字(如代数X),放到独立宣言中查找(第X个字的首字母)。
斯塔尔则描述了另一个谐音替换密码,其密码是第一次尝试在电脑的数据库上加密。在斯塔尔的方法中,无论是明文还是密文都是以二进制字符串存储,因此谐音的数量可以非常大,使得频率分析比平常更为困难。
书本式加密(英语:Book cipher)与散列板都是谐音替换密码的一种。
多表替换加密在1467年,多表替换密码由莱昂·巴蒂斯塔·阿尔伯蒂以圆碟的形式首次描述。约翰尼斯·特里特米乌斯所著的《隐写术》(古希腊文:Steganographia)中介绍了一种表格(古希腊文:tableau)(见下;15世纪已完成但很久以后才出版)。1563年,乔瓦尼·巴蒂斯塔·德拉波尔塔(英语:Giovanni_Battista_della_Porta)在《书写中的隐蔽字符》(古希腊文:De FurtivisLiterarum Notis)描述了一个更复杂的混合字母版本。2
在一个多表替换密码中,会使用多个字母作为密码。为了加快加密或解密速度,所有的字母通常写在一张表格上,密码学上称作tableau。这种表格通常是26×26,因为这样才能放下全部26个英文字母。填充表格及选择下次使用的字母的方法,就是不同多字母替换密码之间的定义。多字母替换密码比单字母更难打破,因为其替换可能性多,密文要较长才可。
其中最著名的一种为吉奥万·巴蒂斯塔·贝拉索于1585年推出的维吉尼亚密码。它于1863年之前一直未被破解。法国人称它作“不能破译的密码”(法语:le chiffre indéchiffrable)。(此密码曾被误以为由布莱斯·德·维吉尼亚所创,所以才叫作维吉尼亚密码。)
维吉尼亚密码中,表格的第一行只需直接填上26个字母,然后以下每一行的字母都是向左偏移一格。(这叫作表格横移,数学上每一列同余26。)要用这种密码需要使用一个关键字来作为密钥。关键字每次用完就再次重复。假设关键字是“CAT”,明文的第一个字由“C”加密,第二个字由“A”加密,第三个则由“T”加密,然后再回到C加密,一直重复。然后按照右边的密码表加密,例如BALL用CAT作关键字时会加密至DAEN,可见即使是同一个“L”亦会加密至另一个字母。现实中,维吉尼亚密码的关键字非常长。
1863年,弗里德里希·卡西斯基(英语:FriedrichKasiski)少校发明了一种方法(在克里米亚战争前已由查尔斯·巴贝奇秘密并独立地发明),使得可以计算维吉尼亚密码中关键字的长度。这种方法需要较长的密文,因为其运作依靠找出常见的字(如THE)使用相同关键字(如ABC)的数量,因此,极短的密文难以用此办法找出。
因此,即使在今天,如果在表格中使用混合表加密,或关键字是随机的,维吉尼亚密码理论上亦难以破解。但由于实际上很难用到这些方法,维吉尼亚密码的使用越来越少。
其他著名的多字母替换加密包括:
格兰示菲特密码 - 与维吉尼亚密码相似,但由于整个密码只使用10个单元,因此关键字长度有限,很容易被破解。博福特密码 - 这实际上就是维吉尼亚密码,除“tabula”改为向后偏移一格,数学上是等式为:密文=键-明文。博福特密码属于对等加密,即加密算法与解密算法相同。自动密钥密码 - 它的密钥开头是一个关键词,之后则是明文的重复,以避免周期函数。运动密钥密码,关键词从某些文章或名句中取出,因此可以非常长。
现代的流密码中可以看出,现代的多表替换加密都努力改进流密钥,使其尽可能的长及不可预知。
表格式替换加密在表格式替换密码中,明文不再单独替换某个字母,而是一次过替换较大的字母单元(通常为一对字母)。第一个优点是频率分布比单个字母时更平坦(虽然实际上并不平坦,因为在日常语言中,“TH”就远远比“XQ”常见)。其次,其产生的大量的符号,相应地需要更多的密文来进行高效的字母频率分析。3
为了替换每“对”字母,将需要共676个符号(26^2 = 676 )。在之前说过的《书写中的隐蔽字符》一书中,德拉波尔塔提出了这样一个系统:用一个20 x 20的表格(意大利或拉丁文字中的20个字母。),其中填上400个特别的字形。然而,该系统实为不切实际,更有可能从来没有实际使用过。
最早的实用表格式替换密码是查尔斯·惠斯登(英语:CharlesWheatstone)爵士于1854年所创的波雷费密码。在此密码中,5×5的方格中填满了混合字母(两个字母,通常I和J并排,即I等于J)。明文中每两个字母为一单元,通常这个单元会在表上组成一个四方形(单元内容占其中两个角),然后取另外两角为密文。当单元内容在同一列或同一行时(即无法组成四方形),同列者密文为明文往右偏移一格;同行者密文为明文往下偏移一格。单元中两者为同字母者于该单之前添加X(或Q)(即其后全体往后偏移一格)。波雷费密码于第二次波耳战争开始直到第二次世界大战为止一直用于军事用途。
在1901年,费利克斯·第利斯塔(英语:Felix_Delastelle)推出了其他一些实际可用的表格式替换加密,包括二分密码(英语:Bifid_cipher)、四方密码及三分密码。
莱斯特·S·希尔(英语:Lester S. Hill)于1929年发明了希尔密码,它是一种表格式替换加密。希尔密码可以使用线性代数来结合拥有非常多字母的单元。每个字母被视为二十六进制的数字:A = 0,B = 1,依此类推。(在某些变种中,会添加3个额外符号,将基底变成一个质数。)一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果同余26。注意用作加密的矩阵(即密匙),否则就不可能解码。只有矩阵的行列式和26互质,才是可逆的。
因为希尔密码完全建基于线性关系上,它会很容易受到己知明文攻击(英语:Known-plaintext attack),因此,有时它会结合一些非线性步骤来减少被击破的机会。
机械替换加密第一次世界大战时期开始广泛使用的电脑(某些政府约在20世纪50至60年代开始使;其他组织在十年或更后,1975年前则未有个人使用的纪录)使得多字母替换密码透过机械实现广泛应用。几位发明家于同一时间有着类似的想法,1919年间已有四次关于旋转盘(英语:Rotor machine)的专利申请。其中最重要并著名的可算是德意志国防军于1930年代所用的恩尼格玛密码机。同时期盟军亦有其加密系统:美国的Sigaba(英语:SIGABA)及英国的Typex(英语:Typex)。
它们的相似之处在于它们都使用机械式旋转盘来加密。由于不止一个旋转盘的组成密文,如果每个字皆配一符号,符号用量将高于天文数字。然而,这些机器的早期版本极易被破解。信号情报服务处的威廉F.弗里德曼威廉·F·弗里德曼(英语:William F.Friedman)于早期就发现了赫本旋转器(英语:Hebern_Rotor_Machine)的漏洞;政府密码学校(英语:GC%26CS)的第利温·诺克斯(英语:Dillwyn Knox)在第二次世界大战前就破解了恩尼格玛密码机中没有接线板的版本。布莱切利园的分析员在后期才能破解恩尼格玛密码机的军用版本,其灵感来自波兰数学家马里安·雷耶夫斯基。
SIGABA与Typex加密的讯息民间则至今没有被破解的消息。
一次性密码本一次性密码本是一种颇特别的替换密码。它由约瑟夫·马宾(英语:Joseph Mauborgne)于第一次世界大战后期建立。克劳德·夏农约在第二次世界大战期间,在数学上证明它的保密性牢不可破,其过程于1940年末首次出版。在常见的做法中,一次性密码本可以被称为一个单次替换密码。通常情况下,明文字母将以某种方式(通常为逻辑异或)与关键字组合(而不是替换掉)。4
一次性密码本在大多数情况下都是不切实际或难以使用,因为它需要关键字跟明文一样(或更)长、“完全”随机、只能使用一次,更要保证除了发送者和接收者之外其它所有人都不知道。当这些条件有一项没有执行,甚至只是极其轻微的违反,一次性密码本便再也不是坚不可摧,甚至一触即溃。美国曾于第二次世界大战期间用非随机的一次性密码本加密讯息,再将其送往苏联。美国的密码学家于40年代开始就能破解极少数一次性密码本。(见VENONA计划(英语:Venonaproject))
古巴危机后,莫斯科-华盛顿热线中开始使用一次性密码本来加密讯息。
现代替换加密上述的替换式密码,尤其那些是只需使用铅笔和纸张的手动加密密码,都不再经常使用。然而,即使到了今天,替换加密的概念仍在进步。从一个够新奇的角度来看,现代位元导向式的分组密码(如资料加密标准及高阶加密标准)仍可视为使用大量二进制字母的替换加密。此外,分组密码通常包含较小的替换表,名为S-box(英语:S-box),其同时包含逻辑异或算法。参见替换网络(英语:Substitution-permutation_network)。
顺序替换暗码ROT5、ROT13、ROT18、ROT47 编码是一种简单的码元位置顺序替换暗码。此类编码具有可逆性,可以自我解密,主要用于应对快速浏览,或者是机器的读取,而不让其理解其意。
ROT5 是 rotate by 5 places 的简写,意思是旋转5个位置,其它皆同。下面分别说说它们的编码方式:
ROT5:只对数字进行编码,用当前数字往前数的第5个数字替换当前数字,例如当前为0,编码后变成5,当前为1,编码后变成6,以此类推顺序循环。
ROT13:只对字母进行编码,用当前字母往前数的第13个字母替换当前字母,例如当前为A,编码后变成N,当前为B,编码后变成O,以此类推顺序循环。
ROT18:这是一个异类,本来没有,它是将ROT5和ROT13组合在一起,为了好称呼,将其命名为ROT18。
ROT47:对数字、字母、常用符号进行编码,按照它们的ASCII值进行位置替换,用当前字符ASCII值往前数的第47位对应字符替换当前字符,例如当前为小写字母z,编码后变成大写字母K,当前为数字0,编码后变成符号_。用于ROT47编码的字符其ASCII值范围是33-126,具体可参考ASCII编码。
本词条内容贡献者为:
王慧维 - 副研究员 - 西南大学