您好,欢迎访问三七文档
PGP邮件安全方案PGP简介PGP(PrettyGoodPrivacy),是一个基于RSA公匙加密体系的邮件加密软件。可以用它对邮件保密以防止非授权者阅读,它还能对邮件加上数字签名从而使收信人可以确认邮件的发送者,并能确信邮件没有被篡改。可以提供一种安全的通讯方式,而事先并不需要任何保密的渠道用来传递密匙。采用了一种RSA和传统加密的杂合算法,用于数字签名的邮件文摘算法,加密前压缩等,还有一个良好的人机工程设计。功能强大,有很快的速度。源代码是免费的。实际上PGP的功能还包括:PGP可以用来加密文件,还可以用PGP代替Uncode生成RADIX64格式(就是MIME的BASE64格式)的编码文件。PGP的历史PGP的创始人是美国的PhilpZimmerman。他的创造性在于他把RSA公匙体系的方便和传统加密体系的高速度结合起来,并且在数字签名和密匙认证管理机制上有巧妙的设计。因此PGP成为几乎最流行的公匙加密软件包。PGP服务分析1、认证2、机密性3、压缩4、E-MAIL兼容性5、分段和重组1、认证(1)发送者创建消息(2)发送者使用SHA-1算法产生消息的160位hash代码(3)发送者采用RSA算法,使用发送者的私钥对hash代码进行加密,然后将结果附加在消息的头部(4)接收者使用RSA算法和发送者的公钥解密和恢复hash代码(5)接收者为消息产生一个新的hash代码,并且与解密后的hash代码进行比较,如果两者匹配,那么消息就是可信的。分离签名(分离签名与相应的消息分开保存和传输)尽管通常情况都会把签名附加在相应的消息或者文件中,但也支持分离签名。分离签名的用途如:(1)用户可能希望维护一份发送或者接收消息的单独签名日志(2)可执行程序的分离签名能够检测后续的病毒感染(3)当有多个当事人必须签名文档的时候。2、机密性(1)发送者产生一条消息,并为该消息产生一个用作会话密钥的随机的128位数字(2)使用会话密钥和可靠的算法加密消息(3)使用接收者的公钥和RSA算法加密会话密钥,并且把结果附加到消息的头部(4)接收者使用自己的私钥和RSA算法解密和恢复会话密钥(5)使用会话密钥解密消息3、机密性和认证对同一条消息可以使用两种服务(1)为明文产生签名并把结果附加到消息的头部。(2)使用IDEA或3DES等加密明文消息和签名的连接,并使用RSA加密会话密钥4、压缩对于EMAIL传输和文件保存来说,压缩有利于节省空间。压缩的时机:PGP在签名后加密前压缩消息在压缩前产生签名的原因:(1)签名未压缩的消息更加可取,可以通过保存未压缩的消息的签名来实现将来的验证。(2)压缩算法的不确定性,会影响hash函数和签名的实现在压缩后加密消息的原因:提高密密码的安全性因为压缩后的消息与最初的明文相比具更少的冗余,所以密码分析就会更困难。5、E-MAIL兼容性因为邮件系统只允许使用包含ASCII文本的数据块,为了满足这个限制,PGP支持将未加工的8位二进制流转换为可打印的ASCII字符流。用于实现这一转换的方案就是radix-64转换。注意:radix-64算法不管消息的内容是什么,只是盲目地把输入流转换为radix-64格式,即使输入的恰巧是ASCII文本。如果是签名而没加密的消息,对整个数据块实现转换,对不经意的观察者来说,输出是不可读的,能提供某种程序的机密性。这就使接收消息的人可以在不使用PGP的情况下就能读取消息。但接收者要验证签名必须使用PGP。6、分段和重组E-MAIL应用通常都受限于最大消息的长度,因此发送者必须把任何比这个值长的消息分成更小的段,单独地传送每一段。为了满足这个限制,PGP自动地将过大的消息细分为几个足够小的段,并通过邮件传输。在所有其他操作执行完后,PGP对消息进行分段。在接收端,PGP必须剥去所有E-MAIL头,并在执行radix64之前进行重组,以获得整个原来的数据块。PGP的四种服务(认证、机密性、压缩、EMAIL兼容性)间的关系密钥与密钥环PGP使用了4种类型的密钥:一次性会话密钥、公钥、私和基于口令短语的对称密钥用户可以拥有多个公钥/私钥对。(1)用户可以时常改变密钥对(2)用户可以在给定的时间内拥有多个密钥对以便与不同组的通讯者进行交互(3)用户可以通过限制每个密钥能够加密的数据量来提高安全性因此:用户与公钥之间不是一一对应的关系解决:每个PGP实体必须维护一份由自己的公钥/私钥对组成的文件,以及由相应的通信者的公钥组成的文件。引入密钥标识符。PGP为每个公钥分配一个密钥ID,并且这个密钥ID在用户ID内是唯一的。PGP数字签名也需要密钥ID,因为:发送者可能使用大量私钥中的一个来加密消息摘要,所以接收者必须知道需要使用哪个公钥。相应地,消息的数字签名部分包含所需公钥的64位密钥ID,当接收者接收到消息时,验证该密钥ID与他所知道的这个发送者的某个公钥对应,然后继续验证签名。PGP消息消息构件:文件名,时间戳,数据签名构件:时间戳,消息摘要,消息摘要的头两个八位字节,发送者公钥的密钥ID会话密钥构件:接收者公钥的密钥ID,会话密钥Ks密钥证书它一般包含以下内容:密钥内容(用长达百位的大数字表示的密钥)密钥类型(表示该密钥为公钥还是私钥)密钥长度(密钥的长度,以二进制位表示)密钥编号(用以唯一标识该密钥)创建时间用户标识(密钥创建人的信息,如姓名、电子邮件等)密钥指纹(为128位的数字,是密钥内容的提要表示密钥唯一的特征)中介人签名(中介人的数字签名,声明该密钥及其所有者的真实性,包括中介人的密钥编号和标识信息)密钥环PGP把公钥和私钥存放在密钥环(KEYR)文件中。PGP提供有效的算法查找用户需要的密钥。PGP在每个节点上提供一对数据结构,一个用于存储该节点所拥有的公钥/私钥对;一个用于存储所知道的另一个节点上的其他用户的公钥,分别称这两个数据结构为私钥环和公钥环。PGP把公钥和私钥存放在密钥环(KEYR)文件中。PGP提供有效的算法(用户ID或者密钥ID进行索引)查找用户需要的密钥。尽管只在创建和拥有密钥对的机器上保存私钥环,而且只有该机器上的用户能够访问这些密钥对,但是要尽可能地保证私钥的安全,不把私钥本身存储在密钥环里,而是使用CAST128(或者IDEA,或者3DES)加密密钥。PGP在多处需要用到口令,它主要起到保护私钥的作用。由于私钥太长且无规律,所以难以记忆。PGP把它用口令加密后存入密钥环,这样用户可以用易记的口令--口令短语,间接使用私钥。私钥环的管理(1)用户选择用于加密私钥的口令。(2)当系统使用RSA产生新的公钥/私钥对时,系统向用户请求口令短语,使用SHA1从口令短语中产生160位的hash代码,然后丢弃该口令短语。(3)系统使用CAST-128加密私钥,并把128位的hash代码用作密钥,然后丢弃hash代码,并且在私钥环中保存加密后的私钥。当用户访问私钥环以检索私钥时,必须提供口令短语。PGP将检索加密后的私钥,产生口令短语的hash代码,然后使用CAST-128和hash代码解密私钥。PGP的每个私钥都由一个相应的口令短语加密。PGP主要在3处需要用户输入口令:需要解开受到的加密信息时,PGP需要用户输入口令,取出私钥解密信息。当用户需要为文件或信息签字时,用户输入口令,取出私钥加密。对磁盘上的文件进行传统加密时,需要用户输入口令。发送消息的PGP实体执行步骤:(1)签名(2)加密接收消息的PGP实体执行步骤:(1)解密消息(2)认证消息公钥的管理(1)物理在从B处得到密钥(2)通过电话验证密钥(3)从双方都信任的个体D处获得B的公钥(4)从可信的认证机构CA获得B的公钥信用的使用把具有不同人签名的自己的公匙收集在一起,发送到公共场合,这样可以希望大部分人至少认识其中一个人,从而间接认证了你的公匙。同样你签了朋友的公匙后应该寄回给他,这样就可以让他可以通过你被你的其他朋友所认证。PGP会自动为你找出你拿到的公匙中有哪些是你的朋友介绍来的,那些是你朋友的朋友介绍来的,哪些则是朋友的朋友的朋友介绍的……它会帮你把它们分为不同的信任级别,让你参考决定对它们的信任程度。你可以指定某人有几层转介公匙的能力,这种能力是随着认证的传递而递减的。转介认证机制具有传递性。PGP的作者PhilZimmermann说过一句话:“信赖不具有传递性;我有个我相信决不撒谎的朋友。可是他是个认定总统决不撒谎的傻瓜,可很显然我并不认为总统决不撒谎。”使用LZ77算法压缩数据LZ压缩算法是最有影响力的动态数据压缩算法之一,LZ是其发明者J.Ziv和A.Lempel姓氏的缩写。他们在1977年发表题为《顺序数据压缩的一个通用算法》的论文,提出了被后人称为LZ77的算法。当前个人计算机用户的主流压缩工具如ARJ,PKZip,WinZip,LHArc,RAR,GZip,Compress等几乎都采用LZ77变种算法。LZ77算法是一种动态的字典编码,又称为“滑动窗口压缩”,该算法将一个虚拟的,可以跟随压缩进程滑动的窗口作为词典,要压缩的字符串如果在该窗口中出现,则输出其出现的位置和长度,如图所示。该算法具体流程如下:1)从当前压缩位置开始,考察未编码的数据,试图在滑动窗口中找出最长的匹配字符串,如果找到,则进行步骤2),否则进行步骤3)。2)输出三元符号组(off,len,c),其中off为窗口中匹配字符串相对窗口边界的偏移,len为可匹配的长度,c为下一个未编码字符。然后将窗口向后滑动len+1个字符,继续步骤1)。3)输出三元符号组(0,0,c)。其中c为下一个未编码字符。然后将窗口向后滑动1个字符,继续步骤1)。LZ压缩算法示意图假设窗口的大小为10个字符,我们刚编码过的10个字符是aabcdebdca,即将编码的字符为cdafcacdab。容易看出,可以和要编码字符匹配的最长串为cd(off=3,len=2),cd的下一个未编码字符为a,我们输出三元组(3,2,a),并将窗口向后滑动3个字符,窗口中的内容为cdebdcacda。下一个要编码字符f在窗口中没有匹配,因此输出三元组(0,0,f),同时窗口向后滑动1个字符,其中内容变为debdcacdaf。要编码的cacda在窗口中存在(off=4,len=5),其后的字符为b,因此输出(4,5,b)。这样,我们将可以匹配的字符串都变成了指向窗口内的指针,并由此完成了对上述数据的压缩。解压缩的过程十分简单,只要我们向压缩时那样维护好滑动的窗口,随着三元组的不断输入,我们在窗口中找到相应的匹配串,缀上后继字符c输出(如果off和len都为0则只输出后继字符c),即可还原出原始数据。Radix-64转换Radix-64转换编码技术:将任意二进制输入映射为可打印的字符输出。映射方案:对二进制输入的处理以3个字节的数据块为单位,24位块中每6位集合映射成一个字符。每个24位输入都扩展成为32位输出。6位值字符编码6位值字符编码6位值字符编码6位值字符编码0123456789101112131415ABCDEFGHIJKLMNOP16171819202122232425262728293031QRSTUVWXYZabcdef32333435363738394041424344454647ghijklmnopqrstuv48495051525354555657585960616263(pad)wxyz0123456789+/=radix-64编码012345670000000100100011010001010110011100000^@^PSP0@P.p10001^A^Q!1AQaq20010^B^R2BRbr30011^C^S#3CScs40100^D^T$4DTdt50101^E^U%5EUeu60110^F^V&6FVfv70111^
本文标题:PGP邮件安全方案
链接地址:https://www.777doc.com/doc-4515504 .html