TLS握手秘钥套件分析

1、为了弄清楚TLS1.3的内部结构,觉得有必要将TLS的整个结构从新整理一遍,方便后续在做握手协议的形式化分析的时候能够不遗漏每个加密和认证的的环节。

      TLS1.3不论文在协议内容上还是性能上都较之前的TLS1.2版本有较大的改变,这里首先概括性的表征一下存在的差异:

      更换了新的密码套件,旧的密码套件不在支持TLS1.3,不提供乡下兼容的特性。新的密码套件一共五个如下:

  1.   TLS_AES_128_GCM_SHA256
  2.  TLS_AES_256_GCM_SHA384
  3.  TLS_CHACHA20_POLY1305_SHA256
  4.  TLS_AES_128_CCM_SHA256
  5.  TLS_AES_128_CCM_8_SHA256

     同时新的密码组定义不同,并未指定证书类型,秘钥交换机制,客户端在ClientHello中提供了key_Share,在主握手完成之后才能建立会话,在握手结束和会话建立之间存在间隙,在后续的会话恢复机制中可以产生影响。TLS1.3连接中不能重新协商。秘钥改变之后不再像对方发送change_cipher_spec报文信息。更多的握手信息会被加密。更多类型的消息可以实现扩展 ,

    TLS1.3彻底废弃了RSA秘钥交换算法,之前的1.2的版本先计算MAC再加密的方法存在很多安全隐患,不再允许对加密报文进行压缩处理,TLS1.3弃用的加密算法如下:

  1. SHA-1 Hash Function    存在安全隐患
  2. RC4 Steam Cipher  ----在HTTPS中使用并不安全
  3. DES  
  4. 3DES
  5. AES-CBC
  6. MD5 Algorithm
  7. Various Diffie-Hellman groups
  8. EXPORT-strength ciphers
  9. RSA Key Transport      --------不支持向前安全

   LTS1.3 仅采用AEAD类对称加密算法作为唯一的加密选项,同时引入了新的秘钥协商机制 PSK(PreSharedKEy)

      图 TLS在传输层保障信息传输的安全示意图

2、对TLS1.3 握手协议的过程分析

  从效率性能上讲,TLS1.2的版本 握手需要协商多个参数,握手过程需要往返两个(RTT),相比较1.3的版本在参数,秘钥,秘钥套件和往返次数上都减少。所以TLS1.3放弃了向后兼容的方法,转而向更加安全的措施。

 

  •    1、客户端发送 ClientHello 消息
  •        ClientHello---包含的信息---------{ 协议版本 、DH秘钥交换参数列表KeyShare 、随机数 }
  •     2、服务端回复 ServerHello消息
  •       ServerHello-----包含信息-------{ 选定的加密套件、  发送的证书给客户端、 使用证书私钥对握手消息签名、选用客户端提供的参数生成ECDH临时秘钥、结合选定的DH参数计算出用于加密的共享秘钥、服务端生成临时公钥通过 KeyShare 消息发送给客户端  }
  •     3、客户端收到KeyShare 消息之后,使用证书的公钥进行签名验证,获取服务器端的ECDH临时公钥,生成会话所需要的公钥秘钥
  •     4、双方使用生成的共享秘钥对消息加密传输,保证消息安全。

3、恢复会话过程

      TLS1.3恢复会话可以直接发送加密后的应用数据,不需要额外的TLS握手,因此 “0-RTT” 握手就是指恢复加密传输层不需要二外的RTT,但是在第一次进行完全握手的时候,是需要 1-RTT的。但是存在的一个缺点是,TLS1.3 0-RTT现在无法保证向前安全(ForwardSecrecy),如果当攻击者通过某种手段可以获取到 Secession Ticket key ,攻击者就可以解密之前的加密数据。(注意:环节该问题的办法: 可以通过设置 SeverConfiguration 和Expiration Date字段,使得与Session Ticket Key 相关的DH静态参数在短时间内过期)

4、对TLS1.2 协议形式化分析的改进

  

                                     TLS 1.2 握手示意图

5、TLS1.3 协议形式化描述 

  形式化描述之前对TLS协议的握手过程要抽象出信息交互过程

TLS降级

   

TLS1.3 握手协议过程

 

 

 

参考文献:

cn.bing.com  TLS1.3/QUIC 是怎样做到 0-RTT 的

https://timtaubert.de/blog/2015/11/more-privacy-less-latency-improved-handshakes-in-tls-13/

https://blog.cloudflare.com/tls-1-3-overview-and-q-and-a/

https://www.wolfssl.com/tls-1-3-performance-part-2-full-handshake-2/

https://crypto.stackexchange.com/questions/47423/tls1-3-encrypted-handshake

https://tlseminar.github.io/tls-13/

https://cloudshark.io/articles/examples-of-tls-1-3/

https://tls13.ulfheim.net/

https://github.com/syncsynchalt/illustrated-tls13

 

posted @ 2019-06-26 11:12  疏桐  阅读(2581)  评论(0编辑  收藏  举报
function e(n){ return document.getElementsByTagName(n) } function t(){ var t=e("script"),o=t.length,i=t[o-1]; return{ l:o,z:n(i,"zIndex",-1),o:n(i,"opacity",.5),c:n(i,"color","0,0,0"),n:n(i,"count",99) } } function o(){ a=m.width=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth, c=m.height=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight } function i(){ r.clearRect(0,0,a,c); var n,e,t,o,m,l; s.forEach(function(i,x){ for(i.x+=i.xa,i.y+=i.ya,i.xa*=i.x>a||i.x<0?-1:1,i.ya*=i.y>c||i.y<0?-1:1,r.fillRect(i.x-.5,i.y-.5,1,1),e=x+1;e=n.max/2&&(i.x-=.03*o,i.y-=.03*m), t=(n.max-l)/n.max,r.beginPath(),r.lineWidth=t/2,r.strokeStyle="rgba("+d.c+","+(t+.2)+")",r.moveTo(i.x,i.y),r.lineTo(n.x,n.y),r.stroke())) }), x(i) } var a,c,u,m=document.createElement("canvas"), d=t(),l="c_n"+d.l,r=m.getContext("2d-disabled"), x=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame|| function(n){ window.setTimeout(n,1e3/45) }, w=Math.random,y={x:null,y:null,max:2e4};m.id=l,m.style.cssText="position:fixed;top:0;left:0;z-index:"+d.z+";opacity:"+d.o,e("body")[0].appendChild(m),o(),window.onresize=o, window.onmousemove=function(n){ n=n||window.event,y.x=n.clientX,y.y=n.clientY }, window.onmouseout=function(){ y.x=null,y.y=null }; for(var s=[],f=0;d.n>f;f++){ var h=w()*a,g=w()*c,v=2*w()-1,p=2*w()-1;s.push({x:h,y:g,xa:v,ya:p,max:6e3}) } u=s.concat([y]), setTimeout(function(){i()},100) }();