Pretty Good Pryvacy(PGP),从其创始人Zimmermann在1991年发布它的第一个版本以来,到如今也算有相当长的历史了。这其中,它的经历曲折而结局又皆大欢喜,与美国政府之间几年马拉松式的诉讼,赢得最终的胜利,推出其修订版本,到最后于2002年从其老东家Network Associates公司中把所有的股份与资产都回购过来,所有的这一切,都发生在这个原本只是用来帮助用户安全地在BBS系统上发表信息的毫不起眼的小软件身上。
在经历了所有的这一切后,它自身的加密功能却被完整地保留下来了――不管是那些狂热的少年电脑黑客声称在某种程度上在对其进行破解,到美国政府强迫Zimmermannn植入一个后门在该软件中。跟S/MIME一起,PGP作为美国标准技术研究院(NIST,National Institute of Standards and Technology)唯一认可使用的两个电子邮件加密系统之一,它已得到了用户的广泛关注与认同。
然而,不管这一切的技术发展与终端用户的好评如何,还是有许多的用户和公司却还是拒绝使用PGP或其他的加密方法来保证他们电子邮件的安全。
这又是为什么呢?多个不同因素的共同作用妨碍了大多数普通的因特网用户和数量不少的公司用户进入到电子邮件加密系统的世界。在这些影响的因素中,最主要的一个就是加密系统在使用上比较复杂,对一个家庭用户特别是对那些操作计算机并不是很熟练的初级用户来说,这样的加密系统看上去在设置和使用方面都太复杂了。而且那些专业术语如“公钥”、“私钥”和“数字签名”等对这样的用户来说他们根本就不知道是怎么一回事,这些晦涩的专业词汇只适合于那些专家与高级用户。
本文从内容上可以分成两大部分,第一部分主要向大家介绍PGP Universal产品的背景,并全面地把这款产品和PGP详细介绍给各位读者。而第二部分的内容会介绍PGP Universal详细的技术资料,并来检验一下这款产品在商业环境下是表现得怎样的。由于文章很长,实际的发表将分为多篇,下面先让我们了解一下PGP的含义和由来。
一、PGP软件及加密算法
PGP是目前最流行的一种加密软件,它是一个基于RSA公钥加密体系的邮件加密软件。我们可以用它对邮件保密以防止非授权者阅读,它还能对用户的邮件加上数字签名,从而使收信人可以确信发信人的身份。它让用户可以安全地和从未见过的人们通信,事先并不需要任何保密措施的来传递密钥,因为它采用了非对称的“公钥”和“私钥”加密体系。
但PGP不是一种完全的非对称加密体系,它是个混合加密算法,它是由一个对称加密算法(IDEA)、一个非对称加密算法(RSA)、一个单向散列算法(MD5)以及一个随机数产生器(从用户击键频率产生伪随机数序列的种子)组成的,每种算法都是PGP不可分割的组成部分,PGP之所以得到流行,得到大家的认可,最主要的一半是它集中的几种加密算法的优点,使它们彼此得到互补。
我们知道采用“公钥”和“私钥”加密体系最大的安全性问题就是公开的“公钥”可能被人篡改,影响文件的解密,虽然PGP也采用这一加密体系,并且所有“公钥”和“私钥”都可以由用户自己产生,不需要专门的认证机构,但它却有一个比较完善的密钥管理体制,所以它的另一半优点就体现在PGP独特的密钥管理体制上。
在现代社会里,电子邮件和网络上的文件传输已经成为生活的一部分。邮件的安全问题也就突出了,大家都知道在互联网上传输的数据是不加密的。如果用户不保护自己的信息,第三者就会轻易获得用户的隐私。还有一个问题就是信息认证,如何让收信人确信邮件没有被第三者篡改,就需要使用数字签名技术。
RSA公钥体系的特点使它非常适合用来满足上述两个要求:保密性(privacy)和公证性(authentication)。PGP的创始人是美国的Phil Zimmermann,他的创造性在于他把RSA公钥体系的方便和传统加密体系高度结合起来,并且在数字签名和密钥认证管理机制上有巧妙的设计。
RSA(Rivest-Shamir-Adleman)算法是基于大数不可能被质因数分解假设的公钥体系。简单地说就是找两个很大的质数。一个对外公开,一个不告诉任何人。公开的一个称为“公钥”,另一个叫“私钥”(Prblic key & Secret key or Private key)。这两个密钥是互补的,也就是说用公钥加密的密文只可以用私钥解密,反过来也一样。
假设Alice要寄信给Bob,他们互相知道对方的公钥。Alice就用Bob的公钥加密邮件寄出,Bob收到后就可以用自己的私钥解密出Alice的原文。由于别人不知道Bob的私钥,所以即使是Alice本人也无法解密那封信,这就解决了信件保密的问题。另一方面,由于每个人都知道Bob的公钥,他们都可以给Bob发信,那么Bob怎么确信来信是不是Alice的,这就是数字签名的必要性,用数字签名来确认发信的身份。
PGP的数字签名是利用一个叫“邮件文摘”的功能,“邮件文摘”(message digest),简单地讲就是对一封邮件用某种算法算出一个最能体现这封邮件特征的数来,一旦邮件有任何改变这个数都会发生变化,那么这个数加上用户的名字(实际上在用户的密钥里)和日期等等,就可以作为一个签名了,确切地说PGP是用一个128位的二进制数作为"邮件文摘"的,用来产生它的算法就是MD5(Message Digest 5。MD5的提出者是Ron Rirest,PGP中使用的代码是由Colin Plumb 编写的MD5,MD5是一种单向散列算法,它不像校验码,是一份替代的邮件并且与原件具有同样的MD5特征值。
PGP给邮件加密和签名的过程是这样的:首先Alice用自己的私钥将上述的128位值加密,附加在邮件后,再用Bob的公钥将整个邮件加密(要注意这里的次序,如果先加密再签名的话,别人可以将签名去掉后签上自己的签名,从而篡改了签名)。这样这份密文被Bob收到以后,Bob用自己的私钥将邮件解密,得到Alice的原文和签名,Bob的PGP也从原文计算出一个128位的特征值来和用Alice的公钥解密签名所得到的数进行比较,如果符合就说明这份邮件确实是Alice寄来的。这样两个安全性要求都得到了满足。
复制本页网址和标题,发送给你QQ/Msn的好友一起分享
上一篇:openssl之BIO系列之10---BIO链的定位操作
下一篇:RSA算法基础 实践