11.111.211.3网络安全和威胁报文保密性:对称密钥密码体制报文保密性:不对称密钥加密法11.4报文完整性:采用报文摘要11.5报文鉴别:防伪造11.611.711.8实体鉴别网络层安全运输层安全11.9应用层的安全11.10防火墙:防止非法接入先来讨论网络安全的3个目标:保密性、完整性和有效性。上述3个安全目标可能会受到安全攻击的威胁,图11.1所示为攻击的分类。1.威胁保密性的攻击一般来说,有两种类型的攻击会威胁到信息的保密性:窃取和通信量分析。2.威胁完整性的攻击数据的完整性可能会受到多种类型的攻击:更改、伪装、重放和否认。3.威胁有效性的攻击拒绝服务(DoS)是一种很常见的攻击。它会使一个系统的服务变得越来越慢,甚至完全中断服务。11.2.1对称密钥密码体制所谓对称密钥密码体制,即加密密钥与解密密钥采用相同的密码体制。DES是一种分组密码。在加密前,先对整个明文进行分组。每一个组为64位长的二进制数据。然后对每一个64位二进制数据进行加密处理,产生一组64位密文数据。最后将各组密文串接起来,即得出整个密文。使用的密钥为64位(实际密钥长度为56位,有8位用于奇偶校验)。生成一个对称密钥之前,双方需要选择两个数p和g。这两个数可以通过因特网发送,是可公开的。【例11.1】假设g=7且p=23(实际情况这个数应当很大),计算对称会话密钥。步骤如下:(1)A选择一个随机的大数s,让0≤s≤p−l,并计算R1=gsmodp。(2)A把R1发送给B。(3)B选择另一个随机的大数t,让0≤t≤p−l,并计算R2=gtmodp。(4)B把R2发送给A。(5)A计算K=(R2)smodp=43mod23=18。B也计算K=(R1)tmodp=216mod23=18。K就是这次会话使用的对称密钥,A和B得出的K值是相同的,因为:A计算K=(R2)smodp=(gtmodp)smodp=gstmodpB计算K=(R1)tmodp=(gsmodp)tmodp=gstmodp而K=gstmodp=73×6mod23=18把整个世界划分为几个区,每个区都可以有一个或多个KDC,这些KDC可以分为本地KDC、国家KDC和国际KDC。图11.4描绘了分级的多KDC的配置。为了建立会话密钥,人们已经提出了多种不同的方法。11.3.1不对称密钥加密法不对称密钥加密术使用了两个独立的密钥:一个私钥和一个公钥。1.RSA公钥算法B选择两个较大的数p和q,计算:n=p×q,ф=(p−1)×(q−1)2.加密解密任何人(包括A)都可以用Y=Xemodn来对报文加密,并把密文发送给B。只有B能够用X=Ydmodn来解密这个报文。【例11.2】假设B选择7和11作为p和q,并计算n=7×11=77。另一个值ф(n)=(7−1)(11−1)=60。如果他选择e为13,那么d为37。请注意,(e×d)mod60=1。现在假设A希望发送明文5给B,他用公钥13作为指数来为5加密。1.认证管理机构最常见的分配公钥的方式就是建立公钥证书。B希望人们知道他的公钥,同时又希望没有人会把伪造的公钥当成是他的。可以采用的方法如图11.7所示。2.X.509X.509是用结构化的形式描述证书的一种方法,它使用了一种熟知的称为ASN.1(抽象语法记法1)的协议。1.报文摘要为了保护一个报文的完整性,A对这个报文经过一个称为加密散列函数算法的处理。这个函数为报文产生一个压缩的印记,称为摘要。B为了检查报文或文档的完整性,也要运行相同的加密散列函数,产生摘要。2.散列函数加密散列函数以任意长度的报文作为输入,并产生固定长度的报文摘要。安全散列算法(SHA)是由美国国家标准和技术学会(NIST)开发的一个标准,它也经历了多个版本,有一些散列算法是由RonRivest设计的,最新版本为MD5,其中MD代表“报文摘要”。报文摘要算法MD5可对任意长的报文进行运算,然后得出128位的MD5报文摘要代码。11.5.1报文鉴别码为了确保报文的完整性以及实现数据来源的鉴别,需要创建报文鉴别码(MAC)。如图11.9所示。1.数字签名过程图11.10所示为数字签名的过程。2.对报文摘要的签名图11.11所示为在数字签名系统中对摘要进行签名的过程。3.不可否认性数字签名可以实现报文鉴别、报文完整性和不可否认性。一种解决办法是引入彼此都信任的第三方,这个可信的第三方能解决很多与安全服务和密钥交换相关的问题。如图11.12所示。11.6.1实体和验证1.实体鉴别和报文鉴别的比较实体鉴别和报文鉴别之间存在两个区别。(1)报文鉴别不可能实时发生,而实体鉴别则有可能。(2)报文鉴别只是对一个报文的鉴别。2.验证类别申请者可以通过以下3种证据来体现。(1)一些记在脑子里的东西。这是一些只有申请者知道并能被验证者检查的秘密。(2)一些拿在手里的东西。这是一些能够证实申请者身份的物件。(3)一些与生俱来的东西。这是一些申请者天生的特点。1.口令最简单、最古老的实体鉴别方式就是使用口令(password),即申请者知道的某个东西。2.查问−响应在使用口令鉴别时,申请者通过出示自己知道的秘密(即口令)来证实自己的身份。3.使用对称密钥加密方法有一些查问−响应鉴别方式使用了对称密钥加密方法。图11.13为这种方法的说明。4.使用不对称密钥加密方法采用不对称密钥加密方法进行实体鉴别,申请者必须表明他掌握着与公众开放的公钥相对应的私钥。如图11.14所示。5.使用数字签名实体鉴别也可以使用数字签名来实现,申请者用自己的私钥进行签名。如图11.15所示。11.7.1两种方式1.运输方式IPSec的首部(IPSec-H)和尾部(IPSec-T)先被添加到从运输层传来的信息上,之后作为IP数据报的有效载荷。发送主机用IPSec来鉴别/加密从运输层传来的有效载荷。接收主机用IPSec来检查鉴别/解密这个IP分组,然后将其交付给运输层。2.隧道方式使用隧道方式时,IPSec在整个IP分组上应用IPSec安全方法,然后再增加新的IP首部,如图11.17所示。新的IP首部与原始的IP首部相比有一些不同的信息。1.鉴别首部鉴别首部协议是为了鉴别源主机的身份并确保IP分组所携带的有效载荷的完整性。AH放在IP首部后边,包含的内容格式如图11.18所示。2.封装安全有效载荷封装安全有效载荷(ESP)可以提供发送源的鉴别、数据完整性以及保密性。ESP添加了首部和尾部。IPSec的一个应用就是虚拟专用网(VPN),如图11.20所示。目前提供了运输层安全的协议有安全套接层(SSL)协议和运输层安全(TLS)协议,TLS与SSL类似,如图11.21所示。1.服务SSL把数据划分为长度小于或等于214字节的数据分片。数据分片通过使用一种由客户和服务器协商好的无损压缩方式进行压缩。这个服务是可选的。2.加密解密(1)密钥交换算法:为了交换经过鉴别和保密的报文,客户和服务器程序各需要一组加密用的密钥/参数。(2)加密/解密算法:客户和服务器程序还需要协商同意使用一组加密和解密算法。(3)散列算法:SSL使用散列算法来提供报文完整性(报文的鉴别)。为此已定义了几种散列算法。(4)压缩算法:在SSL中,压缩是可选的,它没有定义具体的压缩算法。(5)加密参数的生成:为了实现报文的完整性和保密性,SSL需要6个加密用的密钥/参数:4个密钥和两个IV(初始向量)。客户需要一个用于报文鉴别的密钥、一个用于加密的密钥,以及一个在计算时用于初始块的IV。(1)客户和服务器先交换两个随机数:一个由客户生成(CR),另一个由服务器生成(SR)。(2)客户和服务器使用预先定义的密钥交换算法来交换一个前主密(PM)。(3)通过应用两个散列函数(SHA-1和MD5),从前主密中生成48字节的主密,如图11.22所示。(4)通过应用同一组散列函数以及在主密(M)的前面附加不同常量的办法,可以从这个主密中产生变长的密钥材料,如图11.23所示。(5)从这个密钥材料中提取6个不同的密钥/参数,如图11.24所示。3.会话和连接SSL区分连接和会话。会话是客户和服务器之间的关联。在会话建立后,双方就具有一些共同的信息,比如会话标识符、各自的鉴别证书(如有必要)、压缩方法(如有必要)、密码族以及用于产生报文鉴别密钥和加密密钥的一个主密。SSL定义了两层共4个协议来完成自己的任务,如图11.25所示。1.握手协议握手协议通过报文来协商将要使用的加密方法族、为客户鉴别服务器以及为服务器鉴别客户(如有必要),并交换那些用于建立加密用密钥/参数的信息。握手过程分为4个阶段,如图11.26所示。2.改变加密规约协议加密方法族的协商和加密用密钥/参数在握手协议期间交换,但在改变加密规约协议中定义。因为发送方和接收方需要有两个状态,而不是一个状态。其中一个状态是等待状态,用于跟踪密码参数和密钥,另一个状态是活跃状态,它掌握着记录协议在签名/验证或加密/解密报文时要使用的参数和密钥。3.告警协议SSL通过告警协议来报告差错和异常状态。它只使用了一个报文,这个报文描述了问题及其严重程度(仅仅是警告的,还是不可挽救的)。4.记录协议记录协议运载来自上一层(握手协议、改变加密规约协议、告警协议或应用层)的报文。这个报文经过分片和压缩(可选)处理,再用协商后的散列算法来计算得到MAC,并将其添加到压缩后的报文上。图11.27所示为发送方的处理过程,接收方的处理过程就是它的逆过程。11.9.1电子邮件的安全1.加密算法电子邮件是即时的行为,双方之间不存在会话,也就没有握手的过程来协商在加密/解密和散列过程中使用的算法。所以,协议为每种操作定义了一组算法(例如,A可以选择用DES进行加密/解密,并选择用MD5进行散列)。2.加密的密钥加密算法在使用加密密钥时也存在同样的问题。因为没有协商过程,目前的电子邮件安全协议要求使用对称密钥算法进行加密/解密,并且这个一次性的密钥要跟随报文一起发送。3.证书要实现电子邮件的安全就必须使用某些公钥算法。例如,我们需要对密钥加密或者对报文签名。下面说明发送电子邮件报文的几种情况:(1)A向B发送明文电子邮件报文不能够保证报文的完整性和保密性。(2)A产生一个报文摘要并用自己的私钥对它签名后跟随电子邮件,当B收到这个报文时,他要用A的公钥来验证报文摘要。(3)对这个报文进行压缩以使分组更加紧凑。图11.28描绘了这一情况。(4)使用一次性会话密钥的加密,图11.29描绘了这种情况。1.加密的报文语法(CMS)为了能够在MIME内容类型中增加像保密性和完整性这样的安全服务,S/MIME定义了加密的报文语法(CMS),这个语法逐个地定义了用于每一种内容类型的明确编码机制。2.报文的类型下面所描述的是报文的类型以及从这些报文中产生出来的不同子类型。(1)数据内容类型。这是一个任意的字符串,产生的对象称为data(数据)。(2)签名的数据内容类型。此类型仅提供数据的完整性,它包含任意类型以及零到多个签名值。这种编码的结果是称为signedData(签名的数据)的对象。图11.30描绘了生成此类型对象的过程。图11.31描绘了产生此类型对象的过程。(4)摘要的数据内容类型。此类型用于提供报文的完整性。结果被用做包装的数据内容类型中的内容。这种编码的结果是称为digestedData(摘要的数据)的对象,图11.32描绘了产生此类型对象的过程。(6)鉴别的数据内容类型。此类型用于提供数据的鉴别,这种对象称为authenticatedData(鉴别的数据)。图11.33描绘了它的产生过程。3.密钥管理S/MIME中的密钥管理综合了X.509和PGP所使用的密钥管理机制。S/MIME使用由认证中心签发的公钥证书。但是它又像PGP定义的那样,由用户负责维护信任关系网来验证签名。【例11.3】content-Type:application/pkcs7-mime;mime-type=enveloped-datacontent-Transfer-Encoding:Radix-64conten