1.对称与非对称密钥加密比较
非对称密钥加密(用接收方的公钥进行加密)解决了密钥协定与密钥交换问题,但并没有解决实际安全结构中的所有问题。具体地说,对称与非对称密钥加密还有其他一些差别,各有所长。下表总结一下这些技术的实际用法:
特征 | 对称密钥加密 | 非对称密钥加密 |
加密/解密使用的密钥 | 加密/解密使用的密钥相同 | 加密/解密使用的密钥不相同 |
加密/解密速度 | 很快 | 慢 |
得到的密文长度 | 通常等于或者小于明文长度 | 大于明文长度 |
密钥协定与密钥交换 | 大问题 | 没问题 |
所需密钥数与消息交换参与者个数的关系 | 大约为参与者个数的平方,因此伸缩性不好 | 等于参与者个数,因此伸缩性好 |
用法 | 主要用于加密/解密(保密性),不能用于数字签名(完整性与不可抵赖检查) | 可以用于加密/解密(保密性)和用于数字签名(完整性与不可抵赖检查) |
上表显示了对称与非对称密钥加密各有所长,也都有需要改进的问题。非对称密钥加密解决了伸缩性和密钥协定与密钥交换问题,但速度慢,而且产生比对称密钥加密更大的密文块,因此使用的密钥比对称密钥加密大,算法更复杂。
2.两种加密机制的组合
组合这两种加密机制,要达到下列目标:
(1)解决方案完全安全。
(2)加密/解密速度要快。
(3)生成的密文长度要小。
(4)伸缩性要好,不能引入更多的复杂性。
(5)要解决密钥发布问题。
在实际中,对称与非对称密钥加密结合起来,提供了相当高效的安全方案,工作如下,这里假设A是发送方,B是接收方。
(1)A的计算机利用DES、IDEA与RC5之类的对称密钥加密算法加密明文消息(PT),产生密文消息(CT),如下图所示:
这个操作使用的密钥(K1)称为一次性对称密钥,用完即丢弃。
(2)用对称密钥加密明文(PT)。现在要把一次性对称密钥(K1)发送给服务器,使服务器能够解密密文(CT),恢复明文消息(PT)。这又到密钥交换问题了,这里要用一个新的概念,A要去第一步的一次性对称密钥(K1),用B的公钥(K2)加密K1。这个过程称为对称密钥的密钥包装,如下图所示:
我们可以看到对称密钥K1放在逻辑箱中,用B的公钥(K2)封起来。
(3)现在,A要密文CT和已加密的对称密钥一起放在数字信封(digital envelope)中,如下图所示:
(4)这时A将数字信封(包含密文T)和用B的公钥包装的对称密钥(K1)用基础传输机制(网络)发送给B,如下图所示:
这里没有显示数字信封的概念,假设数字信封包含两个项目。
(5)B接收并打开数字信封,B打开信封后,收到密文CT和用B的公钥包装的对称密钥(K1),如下图所示:
(6)B可以用A所用的非对称密钥算法和自己的私钥(K3)解密逻辑盒,其中包含B的公钥包装的对称密钥(K1),如下图所示:
这样,这个过程的输出是一次性对称密钥K1。
(7)最后,B用A所用的对称密钥算法对称密钥K1解密密文(CT),这个过程得到明文PT,如下图所示:
这个基于数字信封的过程之所以有效,原因如下:
(a)首先,用对称密钥加密算法和一次性会话密钥(K1)加密明文(PT)。对称密钥加密算法速度快,得到的密文(CT)通常比原先的明文(PT)小。如果这时使用非对称密钥加密算法,则速度很慢,对大块明文更是如此。另外,输出密文(CT)也会比原先的明文(PT)大。
(b)用B的公钥包装的对称密钥(K1),由于K1长度小(通常是56或者64位),因此这个非对称密钥加密过程不会用太长时间,得到的加密密钥不会占用太大空间。
(c)这个机制解决了密钥交换问题,同时不失对称密钥加密算法和非对称密钥加密算法的长处。
但是还有问题没有解决。B怎么知道A用了哪种对称或非对称密钥加密算法?B要知道这个信息之后才能用相同算法进行相应解密。实际上,A发送给B的数字信封包含这个信息。
在实际中对称与非对称密钥加密算法就是这样结合使用的。数字信封是相当有效的技术,可以从发送方向接收方传输消息,达到保密性。