由于“摘要”算法加密的数据仅仅能作为一种身份验证的凭据使用,如果我们要对整个文档数据进行加密,则不能采用这种“不可逆”的算法,因此"密钥"算法(Key Encoding)的概念被提出。此类算法通过一个被称为“密钥”的凭据进行数据加密处理,接收方通过加密时使用的“密钥”字符串进行解密,即双方持有的"密钥"相同(对称)。如果接收方不能提供正确的“密钥”,则解密出来的就不是原来的数据。

以上是“对称密钥”的概念,“非对称密钥”就是加密和解密文件的密钥不一样。用于加密的是“公钥”(Public Key),而用于解密的是“私钥”(Private Key),公钥是可以公开的,而私钥则不能公开。这种算法规定,对方给你发送数据前,可以用你的"公钥"加密后再发给你,但是这个“公钥”也无法解开它自己加密的数据,即加密过程是单向的,这样即使数据被中途拦截,入侵者也无法对其进行破解。当文件到达自己的计算机后,可以用自己的"私钥"解密,而且只有对应的私钥才可以解密用相应用户的公钥加密的文件。这就是"非对称密钥"加密算法,也称为“公共密钥算法”,这两者均建立在PKI验证体系结构上。

基于“对称密钥”的加密算法有DES、TripleDES、RC2、RC4、RC5和Blowfish等;基于"非对称密钥"的加密算法有RSA、Diffie-Hellman等。

1.DES算法

DES(Data Encryption Standard,数据加密标准)是最早、最著名的保密密钥或对称密钥加密算法。它是由IBM公司在20世纪70年代发展起来的,美国国家标准局于1977年公布把它作为非机要部门使用的数据加密标准。30多年来,它一直活跃在国际保密通信的舞台上,扮演了十分重要的角色。

目前在国内,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN的加密传输、IC卡与POS间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。

DES是一个分组加密算法,它以64位为分组对数据加密。同时DES也是一个对称算法:加密和解密用的是同一个算法。它的密匙长度是56位(因为每个字节的第8位都用作奇偶校验),密钥可以是任意的56位的数,而且可以任意时候改变。其中有极少量的数被认为是弱密钥,但是很容易避开他们,所以其保密性依赖于密钥。

DES算法具有极高的安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度是每秒钟检测一百万个密钥,则它搜索完全部密钥就需要将近2285年的时间,可见这是难以实现的。当然,随着科学技术的发展,当出现超高速计算机后,还可以考虑把DES密钥的长度再增长一些,以此来达到更高的保密程度。

DES算法的入口参数有3个:Key、Data、Mode。其中Key为8个字节,共64位,是DES算法的工作密钥;Data也为8个字节,64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。如Mode为加密,则用Key 去对数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据在公共通信网中传输的安全性和可靠性。通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融交易网络的流行做法。

DES算法的工作原理为:DES对64位的明文分组进行操作,通过一个初始置换将明文分成左半部分和右半部分,然后进行16轮完全相同的运算,最后经过一个末置换便得到64位密文。每一轮的运算包含扩展置换、S盒代换、P盒置换和两次异或运算,另外每一轮中还有一个轮密钥(子密钥)。具体过程如下:DES对一个64位的明文分组(m)进行加密操作,m经过一个初始的P置换成m0,将m0明文分成左半部分和右半部分m0=(L0,R0),各32位长。然后进行16轮完全相同的运算,这些运算被称为函数f,在运算过程中数据与密匙结合。在每一轮中,密匙位移位,然后再从密匙的56位中选出48位。通过一个扩展置换将数据的右半部分扩展成48位,并通过一个异或操作替代成新的32位数据。这4步运算构成了函数f。然后,通过另一个异或运算,函数f的输出与左半部分结合,其结果成为新的右半部分,原来的右半部分成为新的左半部分,这就是S盒代换。经过16轮这样的转换后,左、右半部分再合在一起经过一个末置换,这样就完成了整个加密过程。

DES加密和解密唯一的不同是密匙的次序相反。如果各轮加密密匙分别是K1、K2、K3…K16,那么解密密匙就是K16、K15、K14…K1。

目前在DES算法中,采用最多的还是更复杂、更安全的3DES(TripleDES),是DES加密算法的一种模式。3DES使用3条64位的密钥对数据进行3次加密,密码强度是168位(3×56)。3DES是DES向AES过渡的加密算法(1999年,NIST将3DES指定为过渡的加密标准)。它以DES为基本模块,通过组合分组方法设计出分组加密算法。

2.RC算法

RC系列算法是由大名鼎鼎的RSA三人组设计的密钥长度可变的流加密算法,其中最流行的是RC4算法。RC系列算法可以使用2048位的密钥,但该算法的速度却可以达到DES加密的10倍左右,所以受到用户的广泛欢迎和普遍采用。

RC4算法的原理包括初始化算法和伪随机子密码生成算法两大部分。在初始化的过程中,密钥的主要功能是将一个256字节的初始数簇进行随机搅乱,不同的数簇在经过伪随机子密码生成算法的处理后可以得到不同的子密钥序列,得到的子密钥序列和明文进行异或运算(XOR)后,得到密文。

由于RC4算法加密采用的是异或,所以一旦子密钥序列出现了重复,密文就有可能被破解。

3.RSA算法

RSA算法也是RSA三人设计组设计的,是目前最流行的公钥密码算法。它使用长度可以变化的密钥,是第一个既能用于数据加密,也能用于数字签名的算法。

RSA算法的原理如下:

(1)随机选择两个大质数p和q,p不等于q,计算N=pq。

(2)选择一个大于1、小于N的自然数e,e必须与(p-1)(q-1)互素。

(3)用公式d×e = 1(mod(p-1)(q-1))计算出d。

(4)销毁p和q。

最终得到的N就是"公钥",d就是"私钥",发送方使用N去加密数据,接收方只有使用d才能解开数据内容。

RSA的安全性依赖于大数分解,小于1024位的N已经被证明是不安全的。而且由于RSA算法进行的都是大数计算,使得RSA最快的情况也比DES慢一倍以上,这是RSA最大的缺陷。因此,通常只能用于加密少量数据或者加密密钥,但RSA仍然不失为一种高强度的算法。