本博客是对下面博客连接上的原文进行梳理+自己在其他方面资料做个整理

https://blog.csdn.net/andylau00j/article/details/79269499
https://www.cnblogs.com/huanxiyun/articles/6554085.html
   TLS协议在网络的应用层提供功能 :加密,认证、消息完整性。(建立一个安全的连接,对其中传输的数据加密保护,防止中间人嗅探明文;多对数据的完整性进行校验,防止传输的数据被中间人进行篡改,建立一个可信的连接,对双方的真实身份进行验证)
        

一个正常的TLS1.3 握手顺序是按照下面的顺序进行:

  • 客户端发送Client Hello(CH)报文,包含有关密钥协商以及其他与TLS连接建立有关的扩展给服务端。
  • 服务端发送Server Hello(SH)报文,包含有关密钥协商的扩展返还给客户端,双方根据CH和SH的协商结果可以得出密钥材料。
  • 如果客户端发送的CH报文不满足服务端的需要(如:不包含服务端支持的DH组件),服务端会发送一个Hello Retry Request报文给客户端,要求客户端重新发送符合要求的CH报文。
  • 利用密钥材料和前两个报文的哈希值,使用HKDF可以计算出一个handshake_key,此后握手阶段的信息受该密钥保护。
  • 服务端发送Encypted Extension(EE)报文,包含其他与密钥协商无关的扩展数据给客户端。
  • 如果使用公钥证书进行身份认证,服务端发送Certificate报文(传递自己的证书信息),和Certificate Verify(CV)报文(使用自己的证书私钥对之前的报文进行HMAC签名证明自己持有该证书)给客户端。
  • 如果需要对客户端身份进行认证,服务端还需要发送Certificate Request(CR)报文给对方请求客户端发送证书。
  • 服务端发送Finished报文。表明服务端到客户端信道的握手阶段结束,理论上不得再由该信道发送任何握手报文。
  • 如果客户端收到了服务端的CR报文,返回自己的Certificate报文和CV报文。
  • 客户端发送Finished报文,表明握手阶段结束,可以正式开始会话通讯。Finished报文使用会话密钥对上述所有握手信息进行HMAC签名,校验签名可以检验握手阶段的完整性,也可以验证双方是否协商出了一致的密钥。

TLS1.3最大的特点就是对不同的报文使用多种不同的秘钥,TLS1.2中只使用两种秘钥,一个事用于完整性校验,另一个是用于报文加密,同一个连接中不同方向的加密秘钥不一样,TLS1.3使用AEAD机制不再使用MAC_key来进行完整性校验,同时由于其他各种用途的加密需要,TLS1.3的实施过程使用一下几种key:

handshake_key     early_traffic_key   resumption_key     exporter_key(导出秘钥,用户自定义的其他用途)

这些秘钥都是由之前协商的秘钥材料计算而出,区别在于HKDF的计算次数不同,HKDF计算使用的哈希值不同,以会话秘钥application_key为例子,以整个握手阶段的报文作为输入,计算四次HKDF导出最终使用的秘钥,同时,当加密的报文长度达到一定的长度的时候,双方发送的KU报文重新计算application_key

数据发送出去之后,recod层会在密报文头部加上一小段的明文信息来标识解密后明文的长度信息,对方的让recod 层收到消息之后,通过逆过程解密密文后转发给上层协议,

同时TLS1.3协议版本允许在末尾添加八字节整数倍的全为0的二进制数据,对方收到该消息之后,解密从末尾开始去掉0 ,当搜索到第一个不全为0的八字节的时候结束。

总的概括:  TLS1.3协议版本 使用的更加 复杂额秘钥导出过程,增强了最终使用秘钥的安全性,同时简化了所使用的加密秘钥,删除了RC4  3DES   SHA1  AES-CBC 等加密算法,删除了加密前压缩,重新协商等具有的漏洞,精简了协议 内容,

在TLS1.2中记录协议record,占据一个TLS连接的绝大数的数据流量,

Record 协议 — 从应用层接受数据,并且做:

分片,逆向是重组
生成序列号,为每个数据块生成唯一编号,防止被重放或被重排序
压缩,可选步骤,使用握手协议协商出的压缩算法做压缩
加密,使用握手协议协商出来的key做加密/解密
算HMAC,对数据计算HMAC,并且验证收到的数据包的HMAC正确性
发给tcp/ip,把数据发送给 TCP/IP 做传输(或其它ipc机制)。

下面对TLS协议秘钥协商的过程的分析

基于RSA握手和秘钥交换的客户端验证服务器为示例如下

下面是上网的握手过程的时序图

下面对上面的协商过程解释:

(1)Client-Hello   客户端发送请求,以明文传输信息,包含版本信息,加密候选列表,候选算法列表,随机数,扩展字段等信息,

客户端支持加密套件 cipher suite列表,注意,每一个加密条件对应前面TLS原理中的四个功能的组合,认证算法Au(身份验证),秘钥交换算法 (keyExchange 秘钥协商),对称加密算法Enc(信息加密),信息摘要MAc(完整性验证)。在TLS1.2 中支持压缩算法,Client-Hello 中包含压缩算法列表,用于后后续的压缩阶段使用。另外还有随机数 randmo_c 用于后续秘钥的生成。最后还包括扩展字段 extension 支持协议相关算法的参数以及其他辅助信息。

(2)Server-Hello +Server_cerficate+ server_hello_done

server_hello 服务端返回协商的信息结果,包括使用的协议版本,选择的加密套件,以及使用的压缩算法 随机数(随机数用于后续的秘钥协商)

server_certificate 服务器端配置对应的证书链,用于身份验证和秘钥交换

server_Hellodone 通知客户端 server_hello 信息发送结束

(3)证书校验

客户端证书的合法性,如果验证通过才会进行后续的通信,合法性验证主要包括下面的环节:

证书链的可信任、证书是否吊销、证书是否在有效期内、域名,核实证书的域名是否是当前访问的域名相匹配。

(4)Client_key_excahage+ change_chiper_spec+encrypted_handshake_message

client_key_exchage 合法性验证通过之后,客户端计算产生随机数 pre-master ,并用证书的Pk 加密发送给服务器。

当客户端获取全部的计算协商秘钥需要的信息: 两个明文随机数 Radmon_c 和 Radmon-S 和自己计算产生的 pre-master 计算得到协商秘钥

enc_key=fuc(randmo_C,randmo_s,pre-Master)

change_chiper_spec,客户端通知服务器后续的通信都采用协商的通信加密秘钥和加密算法进行加密通信,

encrypted_handshake_message 结合前面所有的通信参数的hash值和其相关的信生成一段数据,采用协商的 session-secret 与算法进行加密之后发送给服务器用于数据与握手验证

5)Change_ciper_spec +encrypted_handshake_message

服务器使用私钥解密加密的per-master 数据,基于之前交换的两个明文随机书卷 Random_c 和 random_S 计算协商秘钥 enc_key=fuc(randmo_C,randmo_s,pre-Master)

计算之前所接受信息的hash 值,然后解密客户端发送 encrypted_handshake_message 验证数据和秘钥的正确性

encrypted_handshake_message验证完之后,服务器结同样发送 change_cipher_spec以告知客户端后续的通信采用协商秘钥与算法加密通信

encrypted_handshake_message服务器结合当前所有的通信参数生成一段数据并采用协商秘钥 session secret 与算法加密并发到客户端

(6)结束握手

客户端计算所有接受到的信息的hash值,并采用协商秘钥解密 encrypted_handshake_message 验证服务器发送的数据和秘钥,验证通过则完成握手。

(7)加密通信

开始使用协商秘钥与算法进行加密通信

对TLS协议进行形式化分析的思维导图

下面是对 论文形式化工具Scyther 优化实例分析的关于 TSL的整理

作者对TLS的形式化过程中的涉及到如何将角色模型转化成安全模型的并没有说明,  只是将TSL.spdl执行的结果 截图,然后说明TLS是存在安全隐患的,分别在强安全模型和DY模型下面进行了低手的攻击测试

另外,  作者对攻击的轨迹路径没有说明。对存在的多种的轨迹路径只是截了一张图来简单的说明 确实存在安全的问题

Client Hello

握手第一步是客户端向服务端发送 Client Hello 消息,这个消息里包含了一个客户端生成的随机数 Random1、客户端支持的加密套件(Support Ciphers)和 SSL Version 等信息。通过 Wireshark 抓包,我们可以看到如下信息:

Wireshark 抓包的用法可以参考这篇文章

Server Hello

第二步是服务端向客户端发送 Server Hello 消息,这个消息会从 Client Hello 传过来的 Support Ciphers 里确定一份加密套件,这个套件决定了后续加密和生成摘要时具体使用哪些算法,另外还会生成一份随机数 Random2。注意,至此客户端和服务端都拥有了两个随机数(Random1+ Random2),这两个随机数会在后续生成对称秘钥时用到。

Certificate

这一步是服务端将自己的证书下发给客户端,让客户端验证自己的身份,客户端验证通过后取出证书中的公钥。

Server Key Exchange

如果是DH算法,这里发送服务器使用的DH参数。RSA算法不需要这一步。

Certificate Request

Certificate Request 是服务端要求客户端上报证书,这一步是可选的,对于安全性要求高的场景会用到。

Server Hello Done

Server Hello Done 通知客户端 Server Hello 过程结束。

Certificate Verify

客户端收到服务端传来的证书后,先从 CA 验证该证书的合法性,验证通过后取出证书中的服务端公钥,再生成一个随机数 Random3,再用服务端公钥非对称加密 Random3生成 PreMaster Key。

Client Key Exchange

上面客户端根据服务器传来的公钥生成了 PreMaster Key,Client Key Exchange 就是将这个 key 传给服务端,服务端再用自己的私钥解出这个 PreMaster Key 得到客户端生成的 Random3。至此,客户端和服务端都拥有 Random1 + Random2 + Random3,两边再根据同样的算法就可以生成一份秘钥,握手结束后的应用层数据都是使用这个秘钥进行对称加密。为什么要使用三个随机数呢?这是因为 SSL/TLS 握手过程的数据都是明文传输的,并且多个随机数种子来生成秘钥不容易被暴力破解出来。客户端将 PreMaster Key 传给服务端的过程如下图所示:

Change Cipher Spec(Client)

这一步是客户端通知服务端后面再发送的消息都会使用前面协商出来的秘钥加密了,是一条事件消息。

Encrypted Handshake Message(Client)

这一步对应的是 Client Finish 消息,客户端将前面的握手消息生成摘要再用协商好的秘钥加密,这是客户端发出的第一条加密消息。服务端接收后会用秘钥解密,能解出来说明前面协商出来的秘钥是一致的。

Change Cipher Spec(Server)

这一步是服务端通知客户端后面再发送的消息都会使用加密,也是一条事件消息。

Encrypted Handshake Message(Server)

这一步对应的是 Server Finish 消息,服务端也会将握手过程的消息生成摘要再用秘钥加密,这是服务端发出的第一条加密消息。客户端接收后会用秘钥解密,能解出来说明协商的秘钥是一致的。

Application Data

到这里,双方已安全地协商出了同一份秘钥,所有的应用层数据都会用这个秘钥加密后再通过 TCP 进行可靠传输。

双向验证

前面提到 Certificate Request 是可选的,下面这张图展示了双向验证的过程:

握手过程优化

如果每次重连都要重新握手还是比较耗时的,所以可以对握手过程进行优化。从下图里我们看到 Client Hello 消息里还附带了上一次的 Session ID,服务端接收到这个 Session ID 后如果能复用就不再进行后续的握手过程。

除了上述的 Session 复用,SSL/TLS 握手还有一些优化技术,例如 False Start、Session Ticket 等

参考文献:

[1] File O P. Network Infrastructure for Ethernet/IP: Introduction and Considerations[J]. ODVA Publication PUB00035R0, 2007.  
[2]EtherNet/IP:Industrial Protocol White Paper  Institute of Electrical and Electronic Engineers,
[3] File O P. Securing EtherNet/IPTM Networks: Introduction and Considerations[J]. ODVA Publication PUB00269R1.1, 2011.
[4] File O P. Common Industrial protocol CIPTM and the family of CIP networks: Introduction and Considerations[J]. ODVA Publication PUB00123R1,2016(引用的部分是隐士和显示传输的两种方式)
[5]Jack Visoky, Joakim Wiberg, Nancy Cam-Winget. Presented at the ODVA 2018 Industry Conference & 18th Annual Meeting October 10, 2018 Stone Mountain, Georgia, USA.   TLS `1.3对CIP的影响
[6]Brian Batke, Joakim Wiberg&Dennis Dube.CIP Security Phase1 Secure Transport for EtherNet/IP.Presented at the ODVA 2015 Industry Conference&17th Annual Meeting  ---TLS和DLTS安全性能的介绍
[7] A. Ginter, “The Top 20 Cyber Attacks Against Industrial Control Systems,” https://ics-cert.us-cert.gov/sites/default/files/ICSJWGArchive/ QNL DEC 17/Waterfall top-20-attacks-article-d2%20- %20Article S508NC.pdf.  
[8] 冯涛,鲁晔,方君丽.工业以太网协议脆弱性与安全防护技术综述[J]. 通信学报, 2017(S2).
[9]Ryan Grandgenett ,Robin Gandhi,William Mahoney. Exploitation of Allen Bradley's implementation  of etherNet/IP for denial of service against industrial control systems  -----漏洞
[10]Sheffer Y, Holz R, Saint-Andre P. Summarizing known attacks on transport layer security (TLS) and datagram TLS (DTLS)[R]. 2015. 
[11]Sheffer Y, Holz R, Saint-Andre P. Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)[R]. 2015. 
[12]Rescorla E. The transport layer security (TLS) protocol version 1.3[R]. 2018. 
[13] Song D X . Athena: a New Efficient Automatic Checker for Security Protocol Analysis[C]// IEEE Workshop on Computer Security Foundations. IEEE Computer Society, 1999. ------  算法
[14] Cremers C J F , Mauw S . Operational Semantics of Security Protocols[C]// International Conference on Scenarios: Models. Springer-Verlag, 2005.   ------Spdl 语言
[15]韩旭,陆思奇&程庆丰.形式化工具Scyther优化与实例分析
[16]陆思奇,程庆丰&赵进华.安全协议形式化分析工具比较研究
[17]魏成坤, 刘向东, 石兆军. OAuth2.0协议的安全性形式化分析[J]. 计算机工程与设计, 2016, 37(7):1746-1751.
[18] Cremers C .Scyther User manual
[19] MEMBER, IEEE, Dolev D , et al. On the Security of Public Key Protocols[J]. IEEE Transactions on Information Theory, 2003, 29(2):198-208.   --------Dolev -Yao模型
[19]Cremers C ,HorvatM , Scott S , et al. Automated Analysis and Verification of TLS 1.3: 0-RTT, Resumption and Delayed Authentication[C]// 2016 IEEE Symposium on Security and Privacy (SP). IEEE Computer Society, 2016.
[20]Cremers C J F . The Scyther Tool: Verification, Falsification, and Analysis of Security Protocols[C]// Computer Aided Verification, 20th International Conference, CAV 2008, Princeton, NJ, USA, July 7-14, 2008, Proceedings. Springer-Verlag, 2008. -------  介绍了Scyther的功能可以性能
[21]Krawczyk H , Paterson K G , Wee H . On the Security of the TLS Protocol: A Systematic Analysis[J]. 2013.  
[23] Rescorla E, Modadugu N. Datagram transport layer security version 1.2[R]. 2012.

TLS1.3&TLS1.2形式化分析的更多相关文章

  1. TLS1.3&TLS1.2形式化分析(二)

    1.下面是TLS1.2和TLS1.3握手协议过程 ,明显的可以看出存在不同 . 我们先说TLS1.2的握手过程明显是比TLS1.3的握手过多了一次.在TLS1.3中舍弃了之前RSA的协商过程,然后基于 ...

  2. Scyther 形式化分析工具资料整理(三)

    1.作者Cas Cremers在做TLS1.3的时候我么发现并没有使用Scyther 形式化丰分析工具对其进行分析,而是使用了 The Tamarin .作者建立了TLS.13的模型. 那么我的目标是 ...

  3. 协议形式化分析Scyther 资料整理

    1.性能分析 目前来说形式化的分析已经成为安全协议的一种很流行的方法,但是每种工具都用其不同适合的协议,Scyther软件是一种形式化分析工具,极大的促进了协议的分析和设计,scyther工具在运行界 ...

  4. 《OAuth2.0协议安全形式化分析-》----论文摘抄整理

    ---恢复内容开始--- 本篇论文发表在计算机工程与设计,感觉写的还是很有水准的.实验部分交代的比较清楚 本篇论文的创新点: 使用Scyther工具 主要是在 DY模型下面 形式化分析了 OAuth2 ...

  5. 《形式化分析工具Scyther性能研究》------摘抄整理

    本篇论文的主要创新点在--------使用 Scyther工具发现对部分 KCI攻击搜索出现漏报的现象,并给出了存在的原因, 介绍了 形式化分析工具   AVispa全称是   Automated V ...

  6. TLS1.3 握手协议的分析

    1.LTS支持的三种基本的密码交换模式 (EC)DHE (Diffie-Hellman both the finte field and ellptic curve varieties) PSK-on ...

  7. Scyther-Compromise 协议形式化安全分析如何改进协议

    1.最终的目的是如何将协议的不安全因素进行改进,提升安全性能.对协议中有关的加密和认证的过程进行形式化分析验证的时候通过添加敌手模型的(DY模型和eCK强安全模型),接受者和发送者之间的通信过程可能存 ...

  8. 协议形式化安全分析 Scyther 并非所有协议可以照抄就搬

    1.Scyther 形式化分析工具可以对协议进行形式化描述,验证协议的机密性和可认证性是否存在安全威胁.在攻击时支持会话轮数无限次执行,同时支持在强安全模型和Delov-Yao模型.在对要形式化分析的 ...

  9. TLS握手秘钥套件分析

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

随机推荐

  1. 使用jquery移除前面通过onclick绑定的元素的事件,然后重新绑定别的函数来执行onclick事件。

    http://caibaojian.com/css3/experience/bugs.htm 使用jquery移除前面通过onclick绑定的元素的事件,然后重新绑定别的函数来执行onclick事件. ...

  2. consul剔除节点

    查询节点注册 curl -s http://192.168.1.1:8500/v1/catalog/service/aaa | python -m json.tool 删除注册信息 curl http ...

  3. Nginx下配置SSL模块,支持https

    Http与Https的区别 HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效 ...

  4. DTW和DBA

    DTW(动态时间调整) 动态时间调整算法是大多用于检测两条语音的相似程度,由于每次发言,每个字母发音的长短不同,会导致两条语音不会完全的吻合,动态时间调整算法,会对语音进行拉伸或者压缩,使得它们竟可能 ...

  5. (九) 主机增加打印(串口+ssh)

    目录 主机增加打印(串口+ssh) ssh 串口打印 title: 主机增加打印(串口+ssh) date: 2019/4/23 20:10:00 toc: true --- 主机增加打印(串口+ss ...

  6. [面试]死锁-最简单的死锁demo

    死锁 什么是死锁 (百度百科) 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁 ...

  7. 第十一节:WebApi的版本管理的几种方式

    一. 背景和方案 1. 多版本管理的概念 Android .IOS等 App 存在着多版本客户端共存的问题:App 最新版已经升级到了5.0 了,但是有的用户手机上还运行着 4.8.3.9 甚至2.2 ...

  8. Contest2163 - 2019-3-28 高一noip基础知识点 测试6 题解版

    传送门 @dsfz201814 改题 T1:全锕,过 T2:全锕,过 T3:@dsfz201814 先用竖着放置的木块将它变成高度差最大为1的数列 然后对于任意相邻相等的两块,可以将它看成任意 例如, ...

  9. 异常处理--logging模块

    一. 异常处理 1. 异常类型: 语法错误 : 空格 缩进 语法规则 应该在我们写代码的时候就避免 逻辑错误: 应该在程序当中写代码处理 条件判断 异常处理 2. 常见的报错类型: Attribute ...

  10. makefile 嵌套

    目录结构: dynamic 和 static 两个目录实现加法功能, 分别生成动态库和静态库,   main.c 主文件链接加法功能,  终端命令执行:   make dynamic=1  则编译动态 ...