4.2.5对称加密与非对称加密
1.对称加密
对称加密是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为“对称密码”)。因此,通信双方都必须获得这把钥匙,并保持钥匙的秘密。
单钥密码系统的安全性依赖于以下两个因素:
(1)加密算法必须是足够强的,仅仅基于密文本身去解密信息在实践上是不可能的。
(2)加密方法的安全性依赖于密钥的秘密性,而不是算法的秘密性,因此,我们没有必要确保算法的秘密性(事实上,现实中使用的很多单钥密码系统的算法都是公开的)。但是,我们一定要保证密钥的秘密性。
DES(Data Encryption Standard)和Triple DES是对称加密的两种实现。DES和Triple DES算法基本一致,只是Triple DES算法提供的Key位数更多,加密可靠性更高。
DES使用的密钥Key为8字节,初始向量IV也是8字节。Triple DES使用24字节的Key,初始向量IV也是8字节。两种算法都是以8字节为一个块进行加密,一个数据块一个数据块地加密,一个8字节的明文加密后的密文也是8字节。如果明文长度不为8字节的整数倍,添加值为0的字节凑满8字节整数倍。所以,加密后的密文长度一定为8字节的整数倍。加密、解密过程如图4.1所示。

图4.1 加密与解密过程示意
2.非对称加密之RSA加密和解密
RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。
RSA算法是1977年由Ron Rivest、Adi Shamirh和Len Adleman在美国麻省理工学院开发的。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此,可以将乘积公开作为加密密钥。RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。
RSA是被研究得最广泛的公钥算法,从提出到现在已经四十多年,经历了各种攻击的考验,逐渐为人们接受,普遍认为它是目前最优秀的公钥方案之一。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价,即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。
RSA的缺点主要有以下几点:
(1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。
(2)分组长度太大,为保证安全性,n至少也要600位,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET(Secure Electronic Transaction)协议中要求CA采用2 048位长的密钥,其他实体使用1024位的密钥。
(3)RSA密钥长度随着保密级别的提高,增加很快。