您好,欢迎访问三七文档
第16章传输层安全•安全套接层(SSL)在TCP与使用TCP的应用程序之间提供安全服务。互联网标准版本被称为传输层安全协议(TLS)。•SSL/TLS使用对称加密提供保密性,使用消息认证码提供消息完整性。•SSL/TLS机制使得两个TCP用户可以决定他们将使用的安全服务。•安全电子交易(SET)是用来保护互联网上信用卡交易安全的,一个开放的加密和安全规范。16.1Web安全性思考16.1.1Web安全性威胁威胁后果对策完整性修改用户数据特洛伊木马浏览器内存修改传送中的消息修改信息丢失机器损害易受所有其他威胁的攻击加密的校验和保密性网上窃听盗窃服务器数据盗窃客户端数据盗窃网络配置信息盗窃客户端与服务器通话信息信息失窃秘密失窃加密、Web代理拒绝服务破坏用户线程用假消息使机器溢出装满硬盘或内存使用DNS攻击来孤立机器破坏干扰阻止正常工作难于防止认证伪装成合法用户伪造数据用户错误相信虚假信息加密技术16.1.2Web流量安全性方法现在已有许多提供Web安全性的方法。这些方法的使用机理是相似的,只是各自的应用范围及在TCP协议栈中的相对位置不同。•提供Web安全性的一种方法是使用IP安全性如图(a),使用IPSec的优点在于,它对终端用户和应用均是透明的,并且提供通用的解决方案。•另一种解决方案是在TCP之上实现安全性如图(b),这种方法最先的例子是安全套接层SSL,接着是称为传输层安全协议TLS的互联网标准。•特定安全服务在特定应用中得以体现。图(c)是一个示意图。这种方法的好处在于它是为给定应用定制的。在Web安全性方面一个典型的例子是安全电子交易(SET)。16.2安全套接层(SSL)和传输层的安全•SSL源于Netscape公司。传输层安全协议TLS是IETF标准的初衷,其目的是编写SSL的互联网标准。当前TLS的草案RFC2246与SSLv3非常相似。16.2.1SSL体系结构•SSL被设计成使用TCP来提供可靠的端到端安全服务。SSL不是简单的单个协议,而是两层协议。如图17.2所示。SSL握手协议SSL修改密码协议SSL警报协议HTTPSSL记录协议TCPIPSSL中包含两个重要概念:SSL会话和SSL连接。连接:连接是提供合适服务类型的一种传输。对SSL来说,连接表示的是对等网络关系,且连接是短暂的,每个连接与一个会话相关。会话:SSL会话是一个客户端和服务器间的关联,会话是通过握手协议创建的,定义了一组多个连接共享的密码安全参数。会话可用于减少为每次连接建立安全参数的昂贵协商费用。一个会话状态由以下参数定义:会话标识:服务器用于标识活动或恢复的会话状态所选的一个随机字节序列。同位体证书:同位体的X509.v3证书,此状态元素可以为空。压缩方法:在加密前使用的压缩数据的算法。密码规范:描述主要数据加密算法和计算MAC的散列算法,同时也定义如散列大小等加密属性。主密码:客户和服务器间48字节的共享密码。可恢复性:表明会话是否可被用于初始化新连接的标志。连接状态可用以下参数定义:服务器和客户端随机数:服务器和客户端为每个连接选择字节序列。服务器写MAC密钥:服务器发送数据时在MAC操作中使用的密码。客户端写MAC密钥:客户端发送数据时在MAC操作中使用的密码。服务器写密钥:服务器加密和客户端解密数据时使用的传统加密密钥。客户端写密钥:客户端加密和服务器解密数据时使用的传统加密密钥。初始化向量:使用CBC时,需要为每个密钥维护一个初始化向量(IV)。序列号:会话的各方为每个连接传送和接收消息维护一个单独的序列号。当接收或发送一个修改密码规范协议报文时,序列号被设为0。序列号不能超过264-116.2.2SSL记录协议SSL记录协议为SSL连接提供两种服务:保密性和消息完整性应用数据分段压缩增加MAC加密添加SSL记录头图17.3SSL记录协议的操作计算其消息认证代码(MAC)。为此,需要使用共享密钥。其计算方式如下:hash(MAC_write_secret||pad_2||hash(MAC_write_secret||pad_1||seq_num||SSLCompressed.type||SSLCompressed.length||SSLCompressed.fragment))其中:||连接MAC_write_secret共享密钥Hashhash算法MD5或SHA-1pad_1字节0x36(00110110),对MD5重复48次(384位),对SHA-1重复40次(320位)pad_2字节0x5C(01011100),对MD5重复48次;对SHA-1重复40次seq_num此消息的序列号SSLCompressed.type处理此分段的上层协议SSLCompressed.length压缩后的分段长度SSLCompressed.fragment压缩后的分段(如果没有压缩,则为明文段)SSL记录协议的最后一步是加上一个由如下域组成的SSL头:•内容类型(8位):封装段使用的高层协议。•主版本(8位):表明SSL使用的主版本,如SSLv3的值为3.•从版本(8位):表明SSL使用的从版本,如SSLv3的值为0.•压缩长度(16位):明文段(如果使用了压缩,则为压缩段)的字节长度,最大值为214+2048.16.2.3修改密码规范协议该协议由一个仅包含一个字节的、值为1的消息组成,此消息使得挂起状态被拷贝到当前状态中,用于更新此连接使用的密码组。16.2.4警报协议警报协议用于向对等实体传递SSL相关的警报。两个字节组成,第一个字节,值1表示警告,值2表示致命错误来传递消息出错的严重程度。通常导致致命错误的警报列举如下:•意外消息:接收到不正确的消息。•MAC记录出错:接收到不正确的MAC。•解压失败:解压函数接收到不正确的输入(如不能解压或解压长度大于允许值的长度)。•握手失败:发送者无法在给定选项中协商出一个可以接受的安全参数集。•非法参数:握手消息中的某个域超出范围或与其他域不一致。•结束通知:通知接收者,发送者将不再用此连接发送任何消息。•无证书:如果无适当的证书可用,用可能作为证书请求的响应来发送。•证书出错:接收的证书被破坏•不支持的证书:不支持接收的证书类型•证书撤销:证书被其签名者撤销。•证书过期:证收超过使用期限。•未知证书:在处理证书时,出现其他错误,使得证书不被接受。16.2.5握手协议此协议允许客户端和服务器端相互认证、协商加密和MAC算法,保护数据使用的密钥通过SSL记录传送。握手协议在传递应用数据之前使用。握手协议由客户端和服务器间交换的一系列消息组成,这些消息的格式如图17.5(c)所示。每个消息由三个域组成:•类型(1字节):表明10种消息中的一种,下表列举了所定义的消息类型。•长度(3字节):消息的字节长度。•内容(≥1字节):与消息相关的参数。消息类型参数Hello_request空Client_hello版本号、随机数、会话标识、密码组、压缩方法Server_hello版本号、随机数、会话标识、密码组、压缩方法CertificateX.509v3证书链Server_key_exchange参数、签名Certificate_request类型、认证机构Server_done空Certificate_verify签名Client_key_exchange参数、签名finishedHash值阶段1:建立安全能力此阶段用于建立初始的逻辑连接,并建立与之相连的安全能力。客户端发起这个交换,发送具有如下参数的client_hello消息。•版本:客户端所支持的最高SSL版本。•随机数:客户端生成的随机数结构,由32位时间戳和一个安全随机数生成器生成的28字节随机数组成。这些值作为nonce,在密钥交换时防止重放攻击。•会话标识:一个变长的会话标识。非0值意味着客户端想更新已存在连接的参数,或为此会话创建一个新的连接;0值意味着客户端想在新会话上创建一个新连接。•密钥组:按优先级降序排列的、客户端支持的密码算法列表。表的每个元素定义了一个密钥交换算法和一个密码说明。•压缩方法:一个客户端支持的压缩方法列表。客户端发出消息client_hello后,会等待包含与消息client_hello参数相同的server_hello消息的到来。对server_hello消息而言,应用了如下惯例:版本域中包含的是客户端支持的最低版本号和服务器支持的最高版本号。随机数域是由服务器生成的,与客户端的随机数域相互独立。如果客户端会话标识非0,则服务器使用与之相同的值,否则,服务器的会话标识域包含新对话的值。密码组域包含着服务器从客户端所给的密码组中选出的密码组。压缩域包含的是服务器从客户端所给的压缩方法中选出的压缩方法。密码组参数的第一个元素是密钥交换方法。支持下述密钥交换方法:•RSA:用接收者的RSA公钥加密密钥,必须拥有接收者公钥的公钥证书。•固定Diffie-Hellman:Diffie-Hellman密钥交换,其中包含认证中心签发的Diffie-Hellman公钥参数的服务器证书,也就是说,公钥证书包含Diffie-Hellman公钥参数(即在公钥证书中包含p、g、和y,其中y≡gxmodp)。客户端在证书中提供它的Diffie-Hellman公钥参数,或需要进行客户端认证时,在密钥交换消息中提供证书。•瞬时Diffie-Hellman:此技术用于创建瞬时(临时、一次性)的密钥。在这种情况下,Diffie-Hellman公钥在交换时使用发送者的RSA或DSS私钥签名。接收者使用相应的公钥验证签名。由于它使用的是临时的认证密钥,因此在三种Diffie-Hellman选项中最安全。(注:接收者也需要发送者的公钥证书,不过在公钥证书中只是包含验证签名的公钥。)•匿名Diffie-Hellman:使用基本的Diffie-Hellman算法,没有认证。即在向对方发送其Diffie-Hellman公钥参数时,不进行认证。这种方法容易受到中间人攻击,攻击者可以使用匿名Diffie-Hellman与双方进行通话。•Fortzza:为Fortezza模式定义的技术。密钥交换方法定义之后的是CipherSpec,其中包含以下域:•对称加密算法:RC4、RC2、DES、3DES、DES40、IDEA、Fortezza。•MAC算法:MD5或SHA-1•密码类型:流或分组。•可出口:真或假。•散列长度:0,16(MD5)字节或20(SHA-1)字节。•密钥材料:字节序列,包含生成写密钥所使用的数据。•IV大小:密码分组链接(CBC)加密使用的初始矢量的大小。阶段2服务器认证和密钥交换如果需要进行认证,则服务器开始发送其证书;消息包含一个或一组X.509证书。除匿名Diffie-Hellman方法外,其他密钥交换方法均需要证书消息。如果需要,可以发送服务器密钥交换消息。签名中用到的散列函数定义如下:hash(ClientHello.random||ServerHello.random||ServerParams)散列不仅包含Diffie-Hellman或RSA参数,还包含初始hello消息中的两个nonce,可以防止重放攻击和伪装。对DSS签名而言,散列函数使用SHA-1算法;对RSA签名而言,将要计算MD5和SHA-1,再将两个散列结果串接(36字节)后,用服务器私钥加密。接下来,一个非匿名服务器(服务器不使用匿名Diffie-Hellman)需要向客户端申请证书。证书请求消息包含两个参数:证书类型和认证中心。证书类型表明了公钥算法和它的用途:•RSA,仅用于签名•DSS,仅用于签名。•固定Diffie-Hellman的RSA;此时,发送RSA签名证书,其签名仅用于认证。•固定Diffie-Hellman的DSS;仅用于认证。•瞬时Diffie-Hellman的RSA。•瞬时Diffie-Hellman的DSS。•Fortezza。证书请求消息
本文标题:第16章传输层安全
链接地址:https://www.777doc.com/doc-4741413 .html