PGP工作原理及其安全体制
摘要:介绍了PGP的工作原理和流程,同时对PGP独特的密钥管理体制的安全应用进行了详细分析。
关键词:PGP(Pretty Good Privacy) 证书 密钥环
现代信息社会里,当电子邮件广受欢迎的同时,其安全性问题也很突出。实际上,电子邮件的传递过程是邮件在网络上反复复制的过程,其网络传输路径不确定,很容易遭到不明身份者的窃取、篡改、冒用甚至恶意破坏,给收发双方带来麻烦。进行信息加密,保障电子邮件的传输安全已经成为广大E-mail用户的迫切要求。PGP的出现与应用很好地解决了电子邮件的安全传输问题。将传统的对称性加密与公开密钥方法结合起来,兼备了两者的优点。PGP提供了一种机密性和鉴别的服务,支持1024位的公开密钥与128位的传统加密算法,可以用于军事目的,完全能够满足电子邮件对于安全性能的要求。
1 操作描述
PGP的实际操作由五种服务组成:鉴别、机密性、电子邮件的兼容性、压缩、分段和重装。
1.1 鉴别
如图1。步骤如下:
(1)发送者创建报文;
(2)发送者使用SHA-1生成报文的160bit散列代码(邮件文摘);
(3)发送者使用自己的私有密钥,采用RSA算法对散列代码进行加密,串接在报文的前面;
(4)接收者使用发送者的公开密钥,采用RSA解密和恢复散列代码;
(5)接收者为报文生成新的散列代码,并与被解密的散列代码相比较。如果两者匹配,则报文作为已鉴别的报文而接收。
另外,签名是可以分离的。例如法律合同,需要多方签名,每个人的签名是独立的,因而可以仅应用到文档上。否则,签名将只能递归使用,第二个签名对文档的第一个签名进行签名,依此类推。
图1
1.2 机密性
在PGP中,每个常规密钥只使用一次,即对每个报文生成新的128bit的随机数。为了保护密钥,使用接收者的公开密钥对它进行加密。图2显示了这一步骤,描述如下:
(1)发送者生成报文和用作该报文会话密钥的128bit随机数;
(2)发送者采用CAST-128加密算法,使用会话密钥对报文进行加密。也可使用IDEA或3DES;
(3)发送者采用RSA算法,使用接收者的公开密钥对会话密钥进行加密,并附加到报文前面;
(4)接收者采用RSA算法,使用自己的私有密钥解密和恢复会话密钥;
(5)接收者使用会话密钥解密报文。
除了使用RSA算法加密外,PGP还提供了DiffieHellman的变体EIGamal算法。
1.3 常规加密和公开密钥结合的好处
(1)常规加密和公开密钥加密相结合使用比直接使用RSA或E1Gamal要快得多。
(2)使用公开密钥算法解决了会话密钥分配问题。
(3)由于电子邮件的存储转发特性,使用握手协议来保证双方具有相同会话密钥的方法是不现实的,而使用一次性的常规密钥加强了已经是很强的常规加密方法。
1.4 机密性与鉴别
如图3所示,对报文可以同时使用两个服务。首先为明文生成签名并附加到报文首部;然后使用CAST-128(或IDEA、3DES)对明文报文和签名进行加密,再使用RSA(或E1Gamal)对会话密钥进行加密。在这里要注意次序,如果先加密再签名的话,别人可以将签名去掉后签上自己的签名,从而篡改签名。
图2
1.5 电子邮件的兼容性
当使用PGP时,至少传输报文的一部分需要加密,因此部分或全部的结果报文由任意8bit字节流组成。但由于很多的电子邮件系统只允许使用由ASCII正文组成的块,所以PGP提供了radix-64(就是MIME的BASE 64格式)转换方案,将原始二进制流转化为可打印的ASCII字符。
1.6 压缩
PGP在加密前进行预压缩处理,PGP内核使用PKZIP算法压缩加密前的明文。一方面对电子邮件而言,压缩后再经过radix-64编码有可能比明文更短,这就节省了网络传输的时间和存储空间;另一方面,明文经过压缩,实际上相当于经过一次变换,对明文攻击的抵御能力更强。
1.7 分段和重装
电子邮件设施经常受限于最大报文长度(50000个)八位组的限制。分段是在所有其他的处理(包括radix-64转换)完成后才进行的,因此,会话密钥部分和签名部分只在第一个报文段的开始位置出现一次。在接收端,PGP必须剥掉所在的电子邮件首部,并且重新装配成原来的完整的分组。
2 加密密钥和密钥环
2.1 会话密钥的生成
PGP的会话密钥是个随机数,它是基于ANSI X.917的算法由随机数生成器产生的。随机数生成器从用户敲键盘的时间间隔上取得随机数种子。对于磁盘上的randseed.bin文件是采用和邮件同样强度的加密。这有效地防止了他人从randseed.bin文件中分析出实际加密密钥的规律。
2.2 密钥标志符
允许用户拥有多个公开/私有密钥对:(1)不时改变密钥对;(2)同一时刻,多个密钥对在不同的通信组交互。所以用户和他们的密钥对之间不存在一一对应关系。假设A给B发信,B就不知道用哪个私钥和哪个公钥认证。因此,PGP给每个用户公钥指定一个密钥ID,这在用户ID中可能是唯一的。它由公钥的最低64bit组成(Kua mod 2 64),这个长度足以使密钥ID重复概率非常小。
2.3 密钥环
密钥需要以一种系统化的方法来存储和组织,以便有效和高效地使用。PGP在每个结点提供一对数据结构,一个是存储该结点年月的公开/私有密钥对(私有密钥环);另一个是存储该结点知道的其他所有用户的公开密钥。相应地,这些数据结构被称为私有密钥环和公开密钥环。
3 公开密钥管理
3.1 公开密钥管理机制
一个成熟的加密体系必然要有一个成熟的密钥管理机制配磁。公钥体制的提出就是为了解决传统加密体系的密钥分配过程不安全、不方便的缺点。例如网络黑客们常用的手段之一就是“监听”,通过网络传送的密钥很容易被截获。对PGP来说,公钥本来就是要公开,就没有防监听的问题。但公钥的发布仍然可能存在安全性问题,例如公钥被篡改(public key tampering),使得使用公钥与公钥持有人的公钥不一致。这在公钥密码体系中是很严重的安全问题。因此必须帮助用户确信使用的公钥是与他通信的对方的公钥。
图3