【1】古典密码1、置换密码置换密码将明文中的字母顺序重新排列,但字母本身不变,由此形成密文。
换句话说,明文与密文所使用的字母相同,只是它们的排列顺序不同。
我们可以将明文按矩阵的方式逐行写出,然后再按列读出,并将它们排成一排作为密文,列的阶就是该算法的密钥。
在实际应用中,人们常常用某一单词作为密钥,按照单词中各字母在字母表中的出现顺序排序,用这个数字序列作为列的阶。
【例1】我们以coat作为密钥,则它们的出现顺序为2、3、1、4,对明文“attack postoffice”的加密过程见图1:图1 对明文“attack postoffice”的加密过程按照阶数由小到大,逐列读出各字母,所得密文为:t p o c a c s f t k t i a o f e.对于这种列变换类型的置换密码,密码分析很容易进行:将密文逐行排列在矩阵中,并依次改变行的位置,然后按列读出,就可得到有意义的明文。
为了提高它的安全性,可以按同样的方法执行多次置换。
例如对上述密文再执行一次置换,就可得到原明文的二次置换密文:o s t f t a t a p c k o c f i e还有一种置换密码采用周期性换位。
对于周期为r的置换密码,首先将明文分成若干组,每组含有r个元素,然后对每一组都按前述算法执行一次置换,最后得到密文。
【例2】一周期为4的换位密码,密钥及密文同上例,加密过程如图2:图2 周期性换位密码2、 替代密码单表替代密码对明文中的所有字母都用一个固定的明文字母表到密文字母表的映射。
换句话说,对于明文,相应的密文为=。
下面介绍几种简单的替代密码。
1. 加法密码在加法密码中,映射规则可表示为,其中k为密钥,加密算法就是。
例如,我们可以将英文的26个字母分别对应于整数0~25,则n=26,对应关系如表加法密码也称为移位密码,凯撒密码就是k=3的加法密码。
【例1】取密钥k=9,明文为“attackpostoffice”,则转换为密文的过程如下:首先将其转化为数字序列:0 19 19 0 2 10 15 14 18 19 14 5 5 8 2 4然后每个数值加9,并做模26运算,得到以下序列:9 2 2 9 11 19 24 23 1 2 23 14 14 17 11 13再将其转化为英文字母,可得密文:jccjltyxbcxoorln.2.乘法密码乘法密码的映射规则可表示为,其中k为密钥,加密算法就是。
【例2】密钥及明文同上例,采用乘法密码后的密文为:appasmfwgpwttusk.乘法密码有时也叫做采样密码。
3.仿射密码同时运用加法密码和乘法密码,就构成了仿射密码。
可以表示为:其中(k0, k1)为密钥,加密算法可表示为。
解密算法是加密算法的逆变换,为例子从略。
4.多项式密码仿照仿射密码,我们可以构造出更复杂的多项式密码:,其中,。
上述三种密码都可以看作是多项式密码的特例。
5.密钥短语密码密钥短语密码是对上述各密码算法的改造,基本思想是任意选一短语作为密钥,去掉该密钥中的重复字母,并将它们依次写在明文字母表下,然后将明文字母表中从未在密钥短语中出现的字母依次写在该短语的后面,从而构造出一对明文、密文对应表。
【例3】取密钥短语为good worker,去掉重复字母,得godwrke,构造明/密文对照表如下:明文表: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 w r k e a b c f h i j l m n p q s t u v x y z;那么对于上例明文,其密文为:gssgdfmlqslkkbdr。
由上例可以发现,采用以上方法,若密钥短语选择不合适,会造成大部分的密文字母与明文字母一致的现象,使得保密程度下降。
我们可以结合置换密码的思想予以改进。
【例4】密钥短语同上,我们可以构造矩阵:g o d w r k ea b c f h i jl m n p q s tu v 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;密文表:g a l u o b m v d c n x w f p y r h q z k i s e j t。
在单表替代密码中,对于多项式密码及其特例,由于它们的密钥量比较小,可以利用穷举攻击进行破译,尤其在计算机的帮助下,破译起来可以说是轻而易举。
而对于密钥短语替代密码,密文字母表本质上是明文字母表的一种排列,若字母表中有n个字母,可能的密文字母表是n!种。
若n较大,即使有计算机的帮助,穷举攻击也是不大现实的。
即便如此,密码分析者利用统计分析方法,仍能迅速地攻破。
下面我们简单地介绍一下统计分析攻击的基本思路。
任何自然语言都有其固有的统计规律性,如果明文语言的统计规律在密文中有所反应,则密码分析者就可以通过分析明文和密文的统计规律而破译密码。
比如,人们分析了英语的单字母、双字母及三字母的统计特性:1、英文字母频度分类:极高频度字母:e次高频度字母:t a o i n s h r中等频度字母:d l u c m低频度字母:p f y w g b v次低频度字母:j k q x z2、频度高的双字母组:th he in er an re ed on es st en at to nt ha nd ou ea ng as or ti is et it ar te se hi of3、频度高的三字母组:the ing and her ere ent tha nth was eth for dth hat she ion int his sth ers ver4、……当密码分析者要对截获的密文进行分析时,首先统计密文中的字母出现频率,并与明文字母统计表比较。
例如在英文中,字母e的出现频率远远高于其它的字母,所以若一密文字母出现频率极高,我们就可以断定该密文的对应明文是e。
进一步比较密文和明文的其它统计数据及分布模式,就可以确定出密钥,进而攻破单表替代密码。
举例从略。
【2】对称密码1、DES 算法原理1977年,DES 成为一个标准,以后每五年进行一次再验证,这通常在12月份进行。
所有的美国联邦机构和其他处理信息的组织为了各自的利益都必须使用DES (用于非机密文档)。
在非政府公司中,DES 也得到了广泛的使用。
这个算法基于IBM 的LUCIFER 系统,该系统使用128位的密钥。
通常,密钥越长,系统越安全。
DES 使用64位密钥;但是其中8位用于错误检测,因此实际上从安全性角度看DES 是个56位的密钥系统。
由于该加密系统以64位的二进制数据为一组进行加密,因此它也被称为分组密码。
DES 的安全性取决于密钥的保密,而不是算法的保密。
通过密钥的长度可以进一步增强安全性,因为存在着7亿亿(70,000,000,000,000,000)种可能的密钥;因此推断密钥的可能性很小,足以保护大部分分布式环境。
当然,随着普通PC 的能力持续提高,连续搜索密钥和破译代码的能力也成比例的提高。
该加密算法有三个阶段,在图1中进行了描述。
解密是通过逆序执行这三个阶段来实现的,包括逆序使用阶段2中所提到的密钥分组(从K16到K1)。
图1 DES的三个阶段DES 阶段1:初始置换DES的第一阶段包括64位分组的置换,改变每个分组中位的顺序。
术语置换使用其严格的数学意义;只改变了顺序。
在下面的表格中具体给出了这个置换(参见Detail Box 1.1)。
这64位数据现在被分成两半:L0(左半部分)和R0(右半部分)。
下标0说明是原始的数据。
在DES算法第二阶段的每次循环后,这些下标加1。
Detail Box 1.1 DES置换表1中描述了这个表格,DES标准使用这个表格来进行初始置换[NIST77]。
因此,在置换后的第1位是置换前的第58位。
在置换后的第2位是置换前的第50位。
置换后数据的最后一位在最初是明文中的第7个数据位。
表1 DES初始置换 [NIST77]DES 阶段2: 移位(重复16次)第二阶段包括一种根据密钥,并且依赖于表格的算法。
这种操作通常被称为数据移位。
这个算法要重复16次,但由于每次移位都使用密钥的不同子分组,因此每次移位的操作各不相同。
密钥的子分组由另一组表格和表格的移位算法来确定。
在每次循环以后,L(左半部分)和R(右半部分)的下标依次加一,用来表示每个阶段,如图1所示。
第16次循环的结果被称为预输出,并传送到第3阶段。
[NIST77]中列有这些表格和各种算法。
DES阶段 3: 逆序置换DES的最后一个阶段包括64位分组的置换,改变每个分组中位的顺序,这与第1阶段的操作类似,只是前后者使用不同的表格。
在下面的表格中具体给出了这个置换(参见Detail Box 1.2)。
这次置换的输出结果就是密文。
Detail Box 1.2 DES 逆序置换表2中描述了这个表格,DES标准使用这个表格来进行最后的逆序置换[NIST77]。
因此,在置换后的第1位是预输出的第40位。
在置换后的第2位是预输出的第8位。
而密文的最后一位是预输出的第25个数据位。
表2 DES 逆序置换[NIST77]DES算法流程DES的算法是对称的,既可用于加密又可用于解密。
图2是它的算法粗框图。
其具体运算过程有如下七步。
2、AES算法原理2000年10月,NIST(美国国家标准和技术协会)宣布通过从15种侯选算法中选出的一项新的密钥加密标准。
新的标准将会代替密钥长度变的太短的旧的DES算法。
Rijndael 被选中成为将来的AES。
Rijndael这个名字是从它的两个发明者Rijmen和Daemen的名字得来的。
这个加密体系是一种分组加密方法,因为信息的内容是以128位长度的分组为加密单元的。
加密密钥长度有128,192或256位多种选择。
DES加密的分组长度是64比特,而密钥长度只有64比特。
三重DES加密的分组长度通常是64比特,而密钥长度是112比特。
图1: AES 迭代图1描述了AES的操作模式。
首先密钥K0和待加密信息按位相与。
然后所有要加密的分组都用一个函数F进行迭代计算,计算用的子密钥是由一个密钥扩展函数产生的,初始的密钥是主密钥。
对于AES 函数F要迭代10次。
图2描述的是加密过程中函数F是如何被迭代的。
一个128位的分组转换成16个字节,作为下面处理的输入。
首先,每一个字节分别经过替换函数S的处理,然后,用第二个置换函数P对16个字节进行处理。
然后这个结果就和密钥扩展函数产生的子密钥进行位与。
密钥Ki是用密钥扩展函数从第K(i-1)轮的子密钥和第K0的密钥得到的。
图3描述了密钥扩展函数。