数据加密是所有数据安全技术的核心,在计算机网络环境下很难做到对敏感性数据的隔离,较现实的方法是设法做到即使攻击者获得了数据,但仍无法理解其包含的意义,以便达到保密的目的。
加密技术是一种主动的信息安全防范措施,其原理是利用一定的加密算法,将明文转换成为无意义的密文,阻止非法用户理解原始数据,从而确保数据的保密性。在数据传输过程中,在发送端将数据变换成某种难以理解的形式,并在接收端进行反变换,以恢复数据的原样,如图4-1所示。
图4-1 数据加密/解密
变换前的数据称为明文,变换后的数据称为密文。数据经加密模块加密后变成密文在网络中传输,由接收端的解密模块进行解密,还原成明文。
明文变为密文的过程称为加密,由密文还原为明文的过程称为解密,加密和解密的规则称为密码算法。在加密和解密的过程中,由加密者和解密者使用的加解密可变参数叫做密钥。
密钥是一串参与加密的字符串,算法在密钥的控制下进行操作。对应不同的密钥,相同的算法和相同的明文可以产生完全不同的密文,从而密钥可以充分地发挥的加密算法的作用。
加密/解密的关键是:加密/解密算法的提出和加密/解密模块的实现。
加密算法早已被人们使用了数千年,它有各种形式:从简单的替换密码到较复杂的构造方式。最简单的形式之一就是代换密码,所谓代换密码,就是用一个(或一组)字符代替另一个(或一组)字符,代替后的各字符保持原来位置。对密文进行逆替换就可恢复出明文。显然,这种字符的映射关系就是对应该算法的密钥,而选择不同的密钥(不同的字符映射关系)将会产生不同的密文。
(1)凯撒密码。
凯撒密码是一种单表代替密码。所谓单表代替密码就是明文的一个字符用相应的一个密文字符代替。加密过程中是从明文字母表到密文字母表的一一映射。例如将A、B、C、…、Z分别对应Q、D、P、…、C,这样,明文MAN对应的密文就是JQB,如图4-2所示。
图4-2 凯撒密码
凯撒密码的每一个明文字符都由其右边第3个(模26)字符代替(A由D代替,B由E代替,W由Z代替,X由A代替,Y由B代替,Z由C代替)。
单表代替密码是很容易破译的,因为它没有把明文的不同字母的出现频率掩盖起来。可以使用统计攻击。
令26个字母分别对应于整数0~25,a=0,b=1,……,y=24,z=25。
凯撒加密变换实际上是:
c≡(m + k) mod 26
其中m是明文对应的数据,c是与明文对应的密文数据,k是加密用的参数,叫密钥。
(2)维吉尼亚密码。
维吉尼亚密码(Vigenere)是一种典型的多表密码,多表代替密码有多个单字母密钥,每一个密钥被用来加密一个明文字母。第一个密钥加密明文的第一个字母,第二个密钥加密明文的第二个字母等。在所有的密钥用完后,密钥又再循环使用,若有10个单个字母密钥,那么每隔10个字母的明文都被同一密钥加密,这叫做密码的周期。在经典密码学中,密码周期越长越难破译,但现在使用计算机就能够轻易破译具有很长周期的代替密码。
维吉尼亚密码方法如下:
设密钥k=k1k2…kn,明文M=m1m2…mn,加密变换Ek(M)=c1c2…cn。其中:
ci≡( mi + ki) mod 26,i=1,2,…,n。
例如:明文为SUWURONG,密钥为COM,加密过程如下:
明文对应的数字为:18 20 22 20 17 14 13 6
密钥对应的数字为:2 14 12 2 14 12 2 14
相加变换后为:20 8 8 22 5 0 15 20
密文为:U I I W F A P U
多表密码加密算法结果使得对单表置换用的简单频率分析方法失效。
传统的加密算法具有设计简单的特点,曾经得到大量的使用。但它们的一个主要弱点是算法和密钥密切相关。攻击者可以根据字母的统计和语言学知识,相对容易破译密文,尤其是在计算机技术高度发展的今天,可以充分利用计算机进行密文分析。
对称密钥加密体制又被称为私钥加密体制,就是加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加/解密密钥是相同的。这些算法也叫秘密密钥算法或单密钥算法,它要求发送者和接收者在安全通信之前,约定一个密钥,即信息的发送方和接收方用一个密钥去加密和解密数据。它的最大优势是加/解密速度快,适合于对大数据量进行加密,但密钥管理困难。它的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加/解密。
使用对称加密技术将简化加密的处理,每个参与方都不必彼此研究和交换专用设备的加密算法,而是采用相同的加密算法并只交换共享的专用密钥。如果进行通信的双方能够确保专用密钥在密钥交换阶段未曾泄露,那么机密性和报文完整性就可以通过使用对称加密方法对机密信息进行加密以及通过随报文一起发送报文摘要或报文散列值来实现。
上面介绍的凯撒密码和维吉尼亚密码等传统加密算法,都属于对称密码算法。序列密码(流密码)与分组密码是目前使用较多的对称密码算法。
序列密码一直是军方和政府使用的主要密码技术之一,它的主要原理是:通过伪随机序列发生器产生性能优良的伪随机序列,使用该序列加密信息流,逐比特加密,得到密文序列,所以,序列密码算法的安全强度完全决定于伪随机序列的好坏。伪随机序列发生器是指输入真随机的较短的密钥(种子)通过某种复杂的运算产生大量的伪随机位流。
序列密码算法将明文逐位转换成密文。该算法最简单的应用如图4-3所示。密钥流发生器输出一系列比特流:K1,K2,K3,……,Ki。密钥流跟明文比特流P1,P2,P3,……,Pi,进行异或运算产生密文比特流。
C i =Pi⊕K i
在解密端,密文流与完全相同的密钥流异或运算恢复明文流。
P i =C i⊕K i
对于一个序列,如果对所有的i总有Ki+p=Ki,则序列是以p为周期的,满足条件的最小的p称为序列周期。密钥流发生器产生的序列周期应该足够的长,如250。
基于移位寄存器的序列密码应用也十分广泛。一个反馈移位寄存器由两部分组成:移位寄存器和反馈函数。移位寄存器的长度用位表示,如果是n位长,称为n位移位寄存器。移位寄存器每次向右移动一位,新的最左边的位根据反馈函数计算得到,移位寄存器输出的位是最低位。
图4-3 序列密码
产生好的序列密码的主要途径之一就是利用移位寄存器产生伪随机序列,典型方法有:
· 反馈移位寄存器。采用非线性反馈函数产生大周期的非线性序列。
· 利用线性移位寄存器序列加非线性前馈函数,产生前馈序列。
· 钟控序列。利用一个寄存器序列作为时钟控制另一寄存器序列(或自己控制自己)来产生钟控序列,这种序列具有较大的线性复杂度。
分组密码即对固定长度的一组明文进行加密的算法。它将明文按一定的位长分组,明文组和密钥组经过加密运算得到密文组。解密时密文组和密钥组经过解密运算(加密运算的逆运算)还原成明文组。
分组密码的特点是:密钥可以在一定时间内固定,不必每次变换,因此给密钥配发带来了方便。但是,由于分组密码存在着密文传输错误在明文中扩散的问题,因此在信道质量较差的情况下无法使用。
由于分组密码具有速度快、易于标准化和便于软硬件实现等特点,因此它通常是信息与网络安全中实现数据加密、数字签名、认证及密钥管理的核心体制,它在计算机通信和信息系统安全领域有着最广泛的应用。
著名的分组密码包括出自IBM被美国政府正式采纳的数据加密算法(Data Encryption Algorithm,DEA),由Xuejia Lai和James L. Massey在苏黎世的ETH开发的国际数据加密算法IDEA(International Data Encryption Algorithm),由比利时的Joan Daemen和Vincent Rijmen提交并被美国国家标准和技术研究所(US National Institute of Standards and Technology,NIST)选为美国高级加密标准(AES)的Rijndael。下面简要介绍DES和AES加密标准。
(1)DES加密标准。
DES(Data Encryption Standard,数据加密标准)是由IBM公司研制的一种加密算法DEA,美国国家标准局于1977年公布,并把它作为非机要部门使用的数据加密标准。
DES是一个分组加密算法,以64位为分组对数据加密。同时DES也是一个对称算法:加密和解密用的是同一个算法。它的密钥长度是56位(因为每个第8位都用作奇偶校验),密钥可以是任意的56位的数,而且可以在任意时候改变,其保密性依赖于密钥。
DES对64(bit)位的明文分组M进行操作,M经过一个初始置换IP置换成m0,将m0明文分成左半部分和右半部分m0=(L0,R0),各32位长。然后进行16轮完全相同的运算,这些运算被称为函数f,在运算过程中数据与密钥结合。经过16轮后,左、右半部分合在一起经过一个末置换,这样就完成了。
在每一轮中,密钥位移位,然后再从密钥的56位中选出48位。通过一个扩展置换将数据的右半部分扩展成48位,并通过一个异或操作替代成新的32位数据,再将其置换一次。这四步运算构成了函数f。然后,通过另一个异或运算,函数f的输出与左半部分结合,其结果成为新的右半部分,原来的右半部分成为新的左半部分。将该操作重复16次,就实现了加密操作,如图4-4所示。
图4-4 DES算法示意图
DES解密和加密使用相同的算法,唯一的不同是密钥的次序相反。如果各轮加密密钥分别是K1 K2 K3…K16,那么解密密钥就是K16 K15 K14…K1。
(2)AES加密标准。
AES是美国NIST旨在取代DES的新一代的加密标准。NIST对AES候选算法的基本要求是:对称分组密码体制;密钥长度支持128、192、256位;明文分组长度128位;算法应易于各种硬件和软件实现。1998年NIST开始AES第一轮征集、分析、测试,共产生了l5个候选算法。1999年3月完成了第二轮AES的分析、测试。1999年8月NIST公布了五种算法(MARS、RC6、Rijndae、Serpent、Twofish)成为候选算法。最后,Rijndael算法在成为高级加密标准(AES)的竞争中取得成功,于2000年10月被NIST宣布成为取代DES的新一代的数据加密标准,即AES。Rijndael作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点。AES设计有三个密钥长度:128、192、256位,相对而言,AES的128位密钥比DES的56位密钥强1021倍。
AES算法是一种迭代分组密码算法,它的输入分组、输出分组以及加/解密过程中的中间分组都是128位。密钥的长度K为128、192或256位。加密时,首先将输入的128位数据排成4×4的字节矩阵,然后根据不同的密钥长度,进行10(128位密钥)、12(192位密钥)或14(256位密钥)轮的运算。其基本的流程如图4-5所示。
图4-5 AES算法示意图
非对称密钥加密体制又被称为公开密钥加密体制,是由Whitfield Diffie和Martin Hellman 在1976年提出。其加密机制是,每个人拥有一对密钥,一个称为公开密钥(Public Key,PK),另一个称为秘密密钥(Secret Key,SK),这两个密钥是数学相关的。公开密钥是公开信息,秘密密钥由用户自己保存。在这种体制中,加密和解密使用不同的密钥,因此,发送者和接收者不再需要共享一个密钥(在对称密钥加密体制中,发送者和接收者必需共享一个密钥),即在通信的全部过程中不需要传送秘密密钥。
公开密钥算法的主要特点如下:
· 用加密密钥PK对明文A加密后得到密文,再用解密密钥SK对密文解密,即可恢复出明文A。
· 加密密钥不能用来解密。
· 用PK加密的信息只能用SK解密。
· 从已知的PK不可能推导出SK。或者说,由PK推导出SK在计算上是不可能的。
· 加密和解密的运算可以对调。
在非对称加密体系中,密钥被分解为一对。这对密钥中的任何一把都可作为公开密钥(加密密钥)通过非保密方式向他人公开,而另一把则作为私用密钥(解密密钥)加以保存。私用密钥只能由生成密钥对的贸易方掌握,公开密钥可广泛发布。
该方案实现信息交换的过程是:贸易方甲生成一对密钥并将其中的一把作为公开密钥向其他贸易方公开;得到该公开密钥的贸易方乙使用该密钥对信息进行加密后再发送给贸易方甲;贸易方甲再用自己保存的另一把专用密钥对加密信息进行解密。
公开密钥算法在运算速度上比对称密钥加密算法慢,因此在实际应用中,对称密钥算法主要用于产生数字签名、数字信封而并不直接对大量的应用数据进行加密。
RSA公钥密码体制是1978年由美国麻省理工学院Rivest、Shamir和Adleman三位教授提出的基于数论的双钥密码体制。该体制既可用于加密、又可用于数字签名,易懂且易实现,是目前仍然安全并且逐步被广泛应用的一种体制。国际上一些标准化组织均已接受RSA体制作为标准。Internet中所采用的PGP(Pretty Good Privacy)也将RSA作为传送会话密钥和数字签名的标准算法。
在RSA中,公开密钥和私人密钥是一对大素数(100~200位十进制数或更大)的函数。从一个公开密钥和密文中恢复出明文的难度等价于分解两个大素数之积。
RSA涉及到的数学知识比较复杂,下面简要地介绍RSA的基本原理。
(1)密钥的产生。选取两个互异的大素数p、q(为获得最大程度的安全性,两数的长度不一样)。计算乘积:n=P×q,然后随机选取加密密钥(公开密钥)e,使e和(p-1)(q-1)互素。最后利用初等数论中的欧拉(Euler)定理,计算解密密钥(私人密钥)d,以满足
ed = 1 mod (p-1)(q-1)
则:
d = e-1mod {(p-1) (q-1)}
注意:d和n也互素。e和n是公开密钥,d是私人密钥。当不再需要两个素数p和q时,应该将其舍弃,但绝不可泄密。
(2)加解密过程。对消息m进行加密时,首先将它分成比n小的数据分组,即p和q为100位的素数时,n将有200位,每个消息分组mi 应小于200位长。加密后的密文c,将由相同长度的分组ci组成。
对mi 的加密过程是:ci=mie(mod n)
对ci 的解密过程是:mi= cid(mod n)
(3)签名验证。对消息m进行数字签名时,发送方利用其私人密钥d对m加以签名得到签名文S:
签名:S=D(m)=md(mod n)
并将m与签名文S发送给接收方。接收方收到m与S后,利用发送方的公开密钥e进行验证:
验证:E(S)=Se=m’ (mod n)
若m=m’,则验证正确,否则验证失败。由于任何人均可利用发送方的公开密钥进行验证,且只有发送方利用其私人密钥来产生S,因此,当发送方和接收方发生争论时,公正的第三者(如法院)可以做出公正的判断。
在RSA体制中,加密密钥和解密密钥互异、分离。加密密钥可以通过非保密信道向他人公开,例如可以把加密密钥按电话本的形式列出。如果某用户想要与另一用户进行保密通信,只需从公钥库中查找对方所使用的加密密钥进行加密。而按特定要求选择的解密密钥则由用户秘密保存。秘密保存的密钥量减少,这就使得密钥分配更加方便,便于密钥管理,可以满足互不相识的人之间进行商贸活动时的保密性要求,特别适合于Internet等计算机网络的应用环境。