avatar
加密计算:TLS与SSLv3.0在计算主密值(master secret)时采⽤的⽅式不同。
填充:⽤户数据加密之前需要增加的填充字节。在SSL中,填充后的数据长度要达到密⽂块长度的最⼩整数倍。⽽在TLS中,填充后的数据长度可以是密⽂块长度的任意整数倍(但填充的最⼤长度为255字节),这种⽅式可以防⽌基于对报⽂长度进⾏分析的攻击。
SSL/TLS协议
密码套件(c ipher suite)
密码套件(Cipher suite)是传输层安全(TLS)/安全套接字层(SSL)⽹络协议中的⼀个概念。在TLS 1.2中,密码套件的名称是以协商安全设置时使⽤的⾝份验证、加密、消息认证码(MAC)和密钥交换算法组成。TLS 1.3中的密码套件格式已经修改。在⽬前的TLS 1.3草案⽂档中,密码套件仅⽤于协商加密和HMAC算法。在创建⼀个TLS连接后,⼀次也称TLS握⼿协议的握⼿发⽣。在这个握⼿,⼀条ClientHello和⼀条ServerHello消息被发出。⾸先,客户端按照偏好的顺序发送它⽀持的密码套件的列表。然后服务器回复它从客户端的列表中选择的密码套件。
例如TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,每个密码套件名称定义⼀个密钥交换算法、⼀个批量加密算法、⼀个消息认证码(MAC)算法,以及⼀个伪随机函数(PRF)
密钥交换算法,例如ECDHE_RSA,⽤于决定客户端与服务器之间在握⼿时如何⾝份验证
批量加密算法,例如AES_128_GCM,⽤于加密消息流。它还包括密钥⼤⼩及显式和隐式初始化向量(密码学随机数)的长度ssl协议全称
消息认证码算法,例如SHA256,⽤于创建消息摘要,消息流每个数据块的加密散列
伪随机函数,例如TLS 1.2的伪随机函数使⽤MAC算法的散列函数来创建⼀个主密钥——连接双⽅共享的⼀个48字节的私钥。主密钥在创建会话密钥(例如创建MAC)时作为⼀个熵来源
理解密码套件的作⽤以及组成部分对我们理解握⼿协议的过程⼗分重要,因为使⽤不同的密码套件在握⼿协议的实现细节上有很⼤的不同,特别是密钥交换的过程。本⽂将主要讲解ECDHE_RSA密钥交换算法下的握⼿过程(也可以理解为三种不同密码套件的握⼿过程,对于握⼿过程⽽⾔不同套件的差异主要体现在密钥交换的过程,批量加密算法和消息验证码算法的不同主要体现在加密传输的过程,伪随机算法的不同体现在产⽣分组加密初始向量的过程)。
记录协议
TLS记录协议位于TLS握⼿协议的下层,在可靠的传输协议(如TCP/IP)上层。TLS记录协议的⼀条记录包含长度字段、描述字段和内容字段。TLS记录协议处理数据的加密,即记录协议得到要发送的消息之
后,将数据分成易于处理的数据分组,进⾏数据压缩处理(可选),计算数据分组的消息认证码MAC,加密数据然后发送数据;接收到的消息⾸先被解密,然后校验MAC值,解压缩,重组,最后传递给协议的⾼层客户。记录协议有四种类型的客户:握⼿协议、警告协议、改变密码格式协议和应⽤数据协议。通常使⽤⼀个对称算法,算法的密钥由握⼿协议提供的值⽣成。TLS 记录协议提供的连接安全性具有两个基本特性:
私有――对称加密⽤以数据加密(DES 、RC4 等)。对称加密所产⽣的密钥对每个连接都是唯⼀的,且此密钥基于另⼀个协议(如握⼿协议)协商。记录协议也可以不加密使⽤
可靠――信息传输包括使⽤密钥的 MAC 进⾏信息完整性检查。安全哈希功能( SHA、MD5 等)⽤于 MAC 计算。记录协议在没有 MAC 的情况下也能操作,但⼀般只能⽤于这种模式,即有另⼀个协议正在使⽤记录协议传输协商安全参数
握⼿协议
TLS握⼿协议处理对等⽤户的认证,在这⼀层使⽤了公共密钥和证书,并协商算法和加密实际数据传输的密钥,该过程在TLS记录协议之上进⾏。TLS握⼿协议是TLS协议中最复杂的部分,它定义了10种消息,客户端和服务器利⽤这10种消息相互认证,协商哈希函数和加密算法并相互提供产⽣加密密钥的机密数据。TLS记录协议会在加密算法中⽤到这些加密密钥,从⽽提供数据保密性和⼀致性保护。
我们先来分析基于ECDHE_RSA密钥交换算法的握⼿过程,在这之前先来解释⼀下ECDHE是什么。ECDHE_RSA = EC(椭圆曲线加密算法)+ DH(Diffie-Hellman密钥交换算法)+ E(临时的temporary)+ RSA(⽤于签名,防⽌中间⼈攻击),所以ECDHE的意思是结合椭圆曲线的⽣成临时会话密钥的密钥交换算法。对于这个算法的具体计算过程,这⾥不详细讨论。
下图是EDCHE_RSA密钥交换算法的⼤致流程,接下来我会结合wireshark抓取的数据包来分析握⼿的过程:
avatar
Client hello:由于客户端对⼀些加解密算法的⽀持程度不⼀样,但是SSL/TLS协议传输过程中必须要求客户端与服务器端使⽤相同的加解密算法。所以在client hello阶段,客户端要⾸先告知服务端,⾃⼰⽀持哪些密码套件,客户端将⽀持的密码套件列表发送给服务端;同时客户端还会产⽣⼀个随机数,这个随机数双⽅都要保存(⽣成主密钥);session id字段是⽤于维持会话,如果客户端与服务端关闭会话之后,客户端⼜要重新发起会话,session id可⽤于双⽅协商是否要进⾏重新握⼿过程;extension字段⽤于添加⼀些拓展功能;compress表⽰⽀持的
avatar
server hello:server hello是根据客户端发送过来的密码套件和压缩⽅法选择双⽅都⽀持的类型,同时服务器端也会⽣成⼀个随机数,双⽅都
avatar
certificate:该过程中服务器⽤私钥签名证书,发送给客户端以认证⾝份
avatar
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论