TLS 1.3多重握手安全性研究

Wesley13
• 阅读 864

前言

TLS (Transport Layer Security)作为 SSL (Secure Sockets Layer)协议的后继者,是目前网络通信中应用最广泛的密码协议,也是把密码学应用到实际中最重要、最典型的实例之一。TLS 1.2是目前最常用的TLS版本,主要用于保护通过HTTPs传输的信息,为各种应用提供安全的通信信道,比如电子货币交易、邮件传输、VPN以及手机安卓应用等等。

鉴于TLS 1.2及之前版本存在一系列的攻击,比如重协商攻击、幸运 13 攻击、三次握手攻击、BEAST攻击、Heartbleed等,IETF 目前正在制定TLS新版本即 TLS 1.3,目前最新发布的草案是draft-18。

TLS 1.2和已发布的TLS 1.3草案均支持多种握手模式,TLS 1.2支持完整握手、会话重启握手、重协商握手等三种握手模式,TLS 1.3 draft 10(本文是针对TLS 1.3 draft 10所做的工作)支持完整握手、 0-RTT、基于 PSK 的会话重启、会话重启与 DHE 的结合等四种模式。除此之外,不同模式的握手并不是完全独立的,而是存在一定的关联并且可以组合运行,如运行TLS 1.2完整握手之后,可以利用完整握手产生的中间密钥(成为主密钥)进行接下来的会话重启握手。然而,不同模式的握手协议的组合运行可能会导致实际的攻击,如2014年Bhargavan等利用TLS 1.2三种不同模式的握手协议的顺序运行提出了针对 TLS 1.2 的三次握手攻击,可以造成在第三次握手完成之后敌手对客户端的冒充攻击。目前,虽然 TLS 每一种独立的握手模式的安全性得到了很好的研究,但是组合情况下的安全性仍然是一个待解决的问题。

TLS 1.3 多重握手安全性研究

在本篇工作中,我们首次对 TLS 多模式握手协议的组合运行进行了系统、全面地安全性分析。

首先,在本文中我们首先利用多层、多阶段的“树”状结构给出多重握手(密钥交换)协议的正式定义,每个节点对应一个会话 (即一次握手协议),每个会话分为多个阶段,每个阶段均会产生相应的会话密钥。除此之外,一个会话可能会使用位于上层的相关会话中建立或者传输的密钥材料,而同一层的会话是独立、并行运行的。下图给出了TLS 1.3多重握手协议的一个实例,其中粗线表示的是“完整握手+ 0-RTT + 基于PSK 的会话重启”多重握手组合运行模式,这种情况下,第二层的0-RTT 握手使用的Server Configuration 信息来源于上层的完整握手,而基于PSK 的会话重启握手使用的PSK 来源于上层的0-RTT 会话产生的RMS。

TLS 1.3多重握手安全性研究

然后,为了对多重握手协议进行安全性分析,我们提出了多重握手安全模型 — 多层多阶段的安全模型。作为BR模型的扩展,多重握手安全模型主要具有以下性质:该模型中,协议的每次执行包含多个会话(握手),每次会话的模式也可能是不同的,而且相邻会话之间可能存在安全关联;该模型考虑了介于静态密钥和临时密钥之间的半静态(semi-static) 密钥,出发点是TLS 1.3的0-RTT握手模式;模型考虑了同一个会话中不同阶段会话密钥的相关性以及位于不同层的会话之间的密钥相关性;模型还刻画了多种认证模式即无认证、单向认证以及双向认证的并行运行。模型中定义的安全目标为会话匹配与密钥安全性,前者提供了直观上的安全保障,比如匹配会话拥有相同的会话密钥,诚实会话的会话记录的不可碰撞性等性质;后者则保证了会话密钥的不可区分性。

最后,利用多重握手模型,我们对TLS多重握手协议进行了安全性分析。首先给出了TLS 1.3多重握手协议的安全性证明,该结果确认了TLS 1.3安全设计的可靠性;之后,我们说明,与对TLS 1.3的分析类似,多重握手模型也适用于TLS 1.2多重握手协议的安全性分析,分析表明,该模型可以识别针对TLS 1.2的三次握手攻击,进一步证明了模型的有效性。

结语

目前,TLS 1.3仍在制定过程中,相比于draft 10版本,目前的TLS 1.3对上述几种握手模式如0-RTT的运行做出了一些更改,也加入了新的功能如post-handshake认证功能。这些更改对于TLS安全性的影响也是我们今后重点关注的对象。

由于参考文献较多,请参考论文进行查阅。论文地址:

http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=7546519

本文分享自微信公众号 - 百度安全实验室(BaiduX_lab)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
TLS 1.3概述
前言TLS1.3是IETF正在制定的TLS新标准。TLS自标准化至今已有近20年的时间,自1999年TLS1.0标准颁布,到后来的TLS1.1(2006年)和目前得到广泛使用的TLS1.2(2008年),TLS是保障网络传输安全最重要的安全标准之一。然而,广泛的应用也使得TLS成为了攻击的“众矢之的”,这些攻击或利用TLS设计本身存在
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
4个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这