第七章安全通信与交易协议7.1PGPPGP(PrettyGoodPrivacy)主要是由PhilZimmermann开发的网络应用过程,能为电子邮件系统和文件存储应用过程提供认证业务和保密业务。PhilZimmermann所做的工作主要有:(1)选择了最好的密码算法作为系统组件。(2)将密码算法集成于与操作系统和处理器独立、且其命令集易于使用的通常目的的应用程序。(3)使得其软件包和源代码等文档可通过因特网、公告板或其他商用网络免费使用。(4)用户可与公司建立协议,以获取完全兼容的、低成本的商用版本。PGP被广为使用的原因有:(1)世界各地都可免费使用的几种版本也都可用于各种平台,包括DOS、WINDOWS、UNIX、Macintosh。此外,商用版可满足而家用以支持自己的产品。(2)所用算法具合很高的安全件,其软件包中的公钥加密算法有RSA、DSS、ElGamal,单钥算法有CAST—128、IDEA、三重DES、杂凑算法足SHA。(3)适用范围极为广泛,从公司到个人都可使用,公司可用它做为加密的标准方案,个人可用它和世界各地安全通信。(4)它的开发未受任何政府组织和标准化组织的控制。下面分别介绍PGP的运行方式、密钥的产生和存储以及公钥的管理。7.1.1运行方式PGP有5种业务:认证性、保密性、压缩、电子邮件的兼容性、分段。表7.1是这5种业务的总结。其中CAST—128是由加拿大CarlisleAdams和StaffordTavares设计的分组密码,在RFC2144中公布。算法具有传统Feistel网络结构,采用16轮迭代,明文分组长度为以比特,密钥长以8比特为增量,从40比特到128比特可变。表7.1PGP的业务功能所用算法描述数字签字DSS/SHA或RSA/SHA发方使用SHA产生消息摘要,再用自己的秘密钥DSS算法或RSA算法对消息摘要签字消息加密CAST或IDEA或三个密钥的三重DES/ElGamal或RSA消息由用户产生的一次性会话密钥按CAST-128或IDEA或三重DES加密,对会话密钥用收方的公开密钥按ElGamal或RSA加密压缩ZIP消息经ZIP算法压缩后存储或传送电子邮件的兼容性基数64变换使用基数64变换将加密的消息转换为ASCII字符串,以提供电子邮件应用系统的透明性分段对消息进行分段和重组以适应PGP对消息最大长度的限制图7.1是PGP的认证业务和保密业务示意图,其中Ks为分组加密算法所用的会话密钥,EC利DC分别为分组加密算法和解密算法,EP和DP分别为公钥加密算法和解密算法,SKA和PKA分别为用户的秘密钥和公开钥,H表示杂凑函数,||表示链接,Z为ZIP压缩算法,R64表示基64变换。1.认证业务图81(a)表示PGP中通过数字签字提供认证的过程,分为5步:(1)发方产生消息M,(2)用SHA产生160比特长的消息摘要H(M),(3)发方用自己的秘密钥SKAd按RSA算法对以H(M)加密,并将加密结果EPSKA[H(M)]与M链接后发送,(4)收万用发方的公开钥EPSKA[H(M)]解密得H(M),(5)收方对收到的M计算消息摘要,并与(4)中的H(M)比较。如果一致,则认为M是真实的。过程个结合使用了SHA和RSA算法,类似地也可结合使用DSS算法和SHA算法。以上过程将消息的签字’;消息链接后一起发送dZ存储,但在有些情况中却将消息的签字与消息分开发送或存储。例如将可执行程序的签字分并存储,以后可用来检查程序是否有病毒感染。再如多人签署同一文件(如法律合同),每人的签字邯应与被签文件分开存放。由于第一个人签完字后将消息与签字链接在一起,第二人签字时既要签消息,又要答第一人的签字,因此就形成了签字的嵌套。2.保密业务PGP的另一业务是为传输或存储的文件提供加密的保密性业务。加密算法用CAST-128,也可用IDEA或三重DES,运行模式为64比特CFB模式。加密算法的密钥为一次性的,即每加密一消息时都需产生一新的密钥,称为一次性会话密钥,且新密钥也需用收方图7.1PGP的认证业务和保密业务的公开钥加信用与消息一起发往收方,整个过程如下(看图8.1(b)):(1)发方产生消息M及一次性会话密钥Ks(2)用密钥Ks按CAST-128(或IDEA或3DES)加密M。(3)用收方的公开钥PKB按RSA算法加密一次性会话密闭Ks,将(2)、(3)中的两个加密结果链接起来发往收方。(4)收方用自己的秘密钥按RSA算法恢复一次性会话密钥。(5)收方用一次性会话密钥恢复发方发来的消息。3.保密性与认证性如果对同一消息同时提供保密性与认证性,可使用图7.1(c)的方式。发方首先用自己的秘密钥对消息签字,将明文消息和签字链接在一起,再使用一次性合话密钥按CAST-128(或ISEA或3DES)对其加密,同的用E1Gamal算法对会话密钥加密,最后将两个加密结果一同发往收方。这一过程中,先对消息签字再对签字加密。这一顺序优于先加密、再对加密结果签字。这是因为将签字的明文消息在一起存储比与密文消息在—起存储会带来很多方便,同时也给第三方对签字的验证带来方便。4.PGP的消息格式图7.3表示PGP中发方A发往收方B的消息格式,其中EPKB表示用收方B的公开销加密,ESKA表示用发方A的秘密钥加密(即A的签字),Eks表示用—次件会话密钥Ks的加密,ZIP是压缩算法,R64是基数64变换。5.压缩图8.1中Z表示ZIP压缩算法,Z-1表示解压算法。压缩的目的是为邮件的传输或文件的存储节省空间。压缩运算的位置是在签字以后、加密以前,这是因为:(1)压缩前产生签字的原因有二:①对不压缩的消息签字,可便于以后对签字的验证。如果对压缩后的消息签字为了以后对签字的验证,需存储压缩后的消息或在验证签字时对消息重做压缩。②即便用户愿意对压缩后的消息签字且愿意验证时对原消息重做压缩,实现起来也极为团难,这是因为ZIP压缩算法是不确定性的,该算法在不同的实现中会由于在运行速度和压缩率之间产生不同的折衷,因而产生出不同的压缩结果(虽然解压结果相同)。(2)对消息压缩后再进行加密可加强其安全性,这是的为消息压缩后比压缩前的冗余度要小,团此会使得密码分析更为困难。6.电子邮件的兼容性PGP在如图7.1所示的三种业务中,传输的消息都有被加密的部分(也许是所有部分),这些部分构成了任意8特位组串。然而许多电子邮件系统只允许使用AscII本串,为此PGP提供了将8比特位串转换为可打印的AscII字符的服务。7.分段与重组电子邮件通常部对最大可用的消息长度有所限制,如果消息长度大于最大可用限度,则将消息分为若干子段并分别发送。分段是在图8.2(a)基数64变换以后进行,因此会话密钥报头和签字报头仅在第一子段的开头处出现一次。接收方在8.2(b)的处理过程以前,首先去掉第一子段开头处的报头再将各子段拼装在一起。图7.2PGP的消息处理框图8.PGP的消息格式图7.3PGP的消息格式PGP的消息由干部分组成:消息、消息的签字(可选)、会话密钥(可选)。消息部分包括被存储或被发送的实际数据、文件名以及时戳,时戳用来表不产生消息的时间。签字部分包括以下成分:①时戳:产生签字的时间。②消息摘要:消息摘要是由SHA对签字的时戳链接上消息本身后求得的160比特输出,再由发方用秘密钥签字。消息摘要中包含签字时戳目的是防止重放攻击,而不包含消息的文件名和产生消息的时戳目的是使得分离的签字与作为前缀而附加在消息前的签字完全一样。分离的签字是对无报头域的实际数据计算的。③消息摘要的前两个8比特位组:接收方用于与解密消息摘要后得的到的前两个8比特位组进行比较,以确定自己在验证发方的数字签字时是否正确地使用了发方的公开钥。消息摘要的前两个8比特位组,也可用作消息的16比特帧校验序列。④发方公开钥的ID:用于标识解密消息摘要(即验证签字)的公开钥,相应地也标识了签字的秘密钥。消息部分和签字部分经ZIP算法压缩后再用会话密钥加密。会话密钥部分包括会活密钥和接收方公开钥标识符,标识符用以识别发方加密会话密钥时用收方的哪个公开钥。发送消息前,对整个消息作基数64变换。7.2S/MIME协议为了加强E-mail安全,目前已提出了许多种安全保密措施,而且为E-mail制定出了5个不同的加密协议。这些协议的共同目的与用途是对正在Internet上传输的E-mail起到安全保密作用,只是采用的加密算法和认证方法各不相同。此外,还采取不同的方法来处理诸如密钥管理这类的问题,因为密钥管理问题就象确保数据安全的加密问题一样重要。销售商在做出执行这些协议的设计方案时,要考虑到便于使用和管理,尤其要便于在大型网络上执行这些协议。这些协议都形成了标准或处于不同的执行阶段,正在形成标准,其中有些已做成商业软件包,有些仍处于理论研究阶段。对此,必须弄清协议的内容、E-mail加密方案的工作原理以及各协议之间的差异。1S/MIMES/MIME(secure/MultipurposeInternetMailExtension安全/多用途因特网邮件扩展)是基于RSA数据安全公司技术的、对MIME因特网邮件格式标推的安全增强版。虽然PGP和S/MIME都是沿袭IETF标准,但S/MIME可能会作为商用的行业称推,而PGP则仍然用于个人月的的电子邮件安全。2S/MIME的安全功能S/MIME的安全功能与PGP的安全功能相同,有加密和签字,即:①数据的封装:被封装的数据包括被加密的消息内容和被加密的消息加密密钥。②数据的签字:发方用自己的秘密钥对消息摘要的签字。然后,或者签字和消息内容一起经基数64编码变换后,发给收方,仅当收方也具有S/MIME的安全功能时,才能解读消息。或者仅对签字进行基64编码变换,消息内容则以明文形式发送,这时接收入如果没有S/MIME安全功能,能够读消息内容,但都无法验证它的签字。安全功能的另一种方式是加密和签字的嵌套使用,即加密后的数据又可被签字,或先对消息签字,再对签字加密。S/MIME使用的密码算法有:消息摘要算法、签字算法、加密会话密钥的加密算法和加密消息的加密算法。建议使用的消息摘要算法是SHA,但也支持MD5,签字的首选算法是DSS,加密会话密钥的首选算法是E1Gamal。此外,RSA算法也能用于签字和加密会话密钥。加密消息的建议算法是3DES,但也支持40比特的RC2,后奋虽然强度弱,但不受美国出口限制。RC2是R.Rjvest设计的分组加密算法,其明文分组和密文分组都为64比特长,密钥长在8比特到1024比特之间可变。3S/MlME的消息格式S/MIME在MIME消息格式的基础上增加了签字、加密等安全功能,在消息报头中新增了两个内容类型则multipart和application,并在application的子类型中都标有PKCS(public-keycryptographyspecifications),PKCS表示RSA实验室发布的公钥密码规范。SMIME的消息产生过程如下:首先按MIME消息产生的规范形式产牛MIME消息,然后再加上与安全相关的数据,如算法标识符、证书等。再由s/MIME对上述结果处理(包括加密和签字)后产生出自己的消息内容(称为PKCS对象),最后再加上MIME报头就形成完整的S/MIME邮件消息。由于加密、签字的作用,邮件消息形式是(或部分是)二元数字串(由ITU-T建议的X.209中定义的BER表示),还需对其作基64的编码变换,将其变为规范形式。下面分别介绍S/MIME新增加的两个内容类型。(1)multipart该类型又有—个子类型signed,表示发送的内容是明文消息和对消息的签字。(2)application该类型又有5个子类型,分别为①application/pkcs7-mine/envelopedData其中pkcs7-mine表示子类型,envelopedData是类型参数,用于表示S/MIME对邮件消息的基64编码方式,下面将介绍的其他子类型中的参数也是表不编码变换方式。②application/pkcs7-