SSL和TLS-TLS 介绍
SSL和TLS-TLS 介绍
- TLS PRF
- Generation of Keying Material
TLS协议在结构上与SSL协议相同。是一个客户端/服务器协议,运行在可靠的传输层协议之上,比如TCP。
和SSL一样,也由两层组成:
- 底层,是TLS record protocol fragments,可选压缩、加密保护高层协议数据。相应的数据结构叫TLSPlaintext、TLSCompressed和TLSCiphertext。和SSL一样,这些数据结构都包含一个字节的type属性,两个字节的version属性,另外两个字节的length属性,和可变长(最大16384)的fragment属性。type、version和length是TLS记录头,fragment是TLS记录的载荷。
- 高层,TLS协议包含下面四个协议:
- TLS change cipher spec protocol (20)
- TLS alert protocol (21)
- TLS handshake protocol (22)
- TLS application data protocol (23)
每个协议由唯一的内容type值标识。TLS record支持扩展新类型,比如,Heartbeat扩展(type值是24)。内容type是写到TLS记录头的type属性的值。每个协议可以携带同一协议的很多消息。
TLS协议也采用session和连接,多个连接可以公用一个session。也同时使用四个连接状态:current写/读和pending写/读状态。这意味着所有的TLS记录在current状态处理,在执行TLS握手协议期间协商和设置pending状态的安全参数和元素。在连接级别,SSL和TLS是不同的:TLS协议区分安全参数和状态元素,而SSL协议不做这种区分只考虑状态元素。
TLS连接的安全参数
参数 | 描述 |
---|---|
connection end | 实体在连接中是客户端还是服务器 |
bulk encryption algorithm | 块数据加密算法(包括key大小,key有多secret,块加密还是流加密,如果是块加密还有块大小) |
MAC algorithm | 消息认证算法 |
compression algorithm | 数据压缩算法 |
master secret | 客户端和服务器共享的48字节的secret |
client random | 客户端提供的32字节值 |
server random | 服务器提供的32字节值 |
TLS连接的状态元素
参数 | 描述 |
---|---|
compression state | 压缩算法的当前状态 |
cipher state | 加密算法的当前状态 |
MAC secret | 连接的MAC secret, |
sequence number | 特定连接状态下的记录发送的64位的顺序号(初始是0) |
SSL和TLS的主要不同是实际生成key材料的的方式。SSL使用ad hoc的方式生成master secret和key block(使用这些生成key材料)。
TLS 1.0使用另一种构造办法,叫TLS PRF。1.0、1.1版本的TLS PRF和1.2、1.3版本的TLS PRF也有一些不同。
TLS PRF
函数的输入是secret、seed和label(有时候叫identifying label),生成任意的长的bit sequence。为了让TLS PRF尽可能安全,TLS PRF组合两种加密hash函数MD5和SHA-1。这样,PRF的结果是安全的,只要底层的两个hash函数有一个还是安全的。TLS版本1.0和1.1组合使用MD5和SHA-1,TLS版本1.2和1.3使用的hash函数是更强大的SHA-256。
TLS PRF基于一个auxiliary数据扩展函数,叫P_hash(secret,seed)。这个函数使用一个加密hash函数,把secret和seed扩展成一个任意长的输出值。函数是这样定义的:
P_hash(secret,seed) = HMAC_hash(secret,A(1) + seed) +HMAC_hash(secret,A(2) + seed) +HMAC_hash(secret,A(3) + seed) +...
其中,+表示字符串连接,A是一个递归定义的函数(i>0):
A(0) = seed
A(i) = HMAC_hash(secret,A(i-1))
根据需要的输出位长度,这个扩展函数可以执行任意多次。它是TLS PRF的主要成分。
这样,我们已经解释了TLS 1.0和1.1的TLS PRF。secret被分成两半(S1和S2)。输出按位异或。
PRF(secret,label,seed) =P_MD5(S1,label + seed) XOR P_SHA-1(S2,label + seed)
MD5的输出是16位的,SHA-1的输出是20位的,所以,扩展函数迭代次数不一样。比如,要生成80位长的输出,P_MD5执行5次,P_SHA-1执行4次。
TLS 1.2和1.3版本的TLS PRF采用相同的扩展函数,而hash函数是SHA-256。
Generation of Keying Material
使用TLS PRF生成一个TLS连接需要的key材料。首先,使用一个变长的pre master secret,它是key交换算法的输出(和TLS session状态的一部分),生成一个48字节的master secret(然后用它代表TLS连接状态)。是这样构造的:
master_secret =PRF(pre_master_secret,"master secret",client_random + server_random)
其中,pre_master_secret是secret,client_random和server_random是seed,"master secret"是label。
生成了master secret,就把它当作生成TLS连接所需的各个key的熵源。这些key取自适当大小的key block,它的构造如下:
key_block =PRF(master_secret,"key expansion",server_random + client_random)
其中,master_secret是secret,client_random和server_random是seed,"key expansion"是label。
key block以适当的大小被分成下面的值:client_write_MAC_secret、server_write_MAC_secret、client_write_key、server_write_key、client_write_IV、server_write_IV。
key block里的其他材料被丢弃。比如,使用CBC模式下的3DES和SHA-1的cipher suite,需要2 · 192 = 384位的两个3DES keys,2 · 64 = 128位的两个IVs,2 · 160 = 320位的两个MAC keys。总共832位。
不同的cipher suites,需要的key block的长度是不一样的。
SSL和TLS-TLS 介绍相关推荐
- 解决 QT 发送 HTTP 请求时遇到 qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed 问题
解决 QT 发送 HTTP 请求时遇到 qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initilization failed 问题 ...
- 什么是SSL?什么是TLS?SSL与TLS 区别
什么是SSL?什么是TLS?SSL与TLS 区别 chunqianpo7385 一.什么是ssl?什么是tls? SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的 ...
- SSL漏洞 TLS/SSL Sweet32 attack || TLS/SSL Wrak Cipher Suites[解决]
SSL漏洞问题[解决] 前言 1.升级openssl版本 2.1 安装 2.2 备份 2.3 创建软连接 2.4 查看openssl版本 2.5 重新扫描,发现漏洞任未解决 2.重新编译nginx 2 ...
- SSL与OpenSSL关系介绍
SSL与OpenSSL关系介绍 OpenSSL简介 SSL是Secure Socket Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输.Netscape公司在推出第一个W ...
- https、SSL与数字证书介绍
在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕这个模式谈一谈. 名词解释 首先解释一下上面的几个名词: https:在http(超文本 ...
- SSL/TLS攻击介绍--重协商漏洞攻击
一.概述 最近几年曝出的高风险SSL/TLS安全漏洞大多跟SSL实现库相关,比如2011年曝出的SSL/TLS默认重协商漏洞,可导致DOS攻击, 比如2014年4月曝出的"心脏滴血" ...
- linux如何开启sni服务,Nginx开启单IP多SSL证书支持-TLS SNI support
Nginx支持单IP多域名SSL证书需要OpenSSL支持,由于CentOS5.X系统自带的OpenSSL版本太低不支持,所以首先需要编译安装一个高版本的openssl,CentOS 6.X的系统自带 ...
- SSL协议、TLS协议,使用哪一种更安全?
在金融银行业,保护机密信息的安全至关重要.由于财务记录完全通过在线数据库维护,因此实施保护客户.银行和金融机构免受黑客攻击的安全功能比以往任何时候都更加重要.安全套接字层(SSL)协议和传输层安全(T ...
- 解决qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
出现这个错误还是因为网站ssl的问题,直接把链接的https改为http即可
- 阿里云免费SSL证书的简单介绍以及安装使用
文章目录 一.前言 二.免费证书和付费证书的区别 三.免费证书使用限制 四.安装步骤 1. 进入阿里云的控制台 2. 下载证书到本地,下载所需的证书 3. 将下载的证书安装到服务器 五.总结 一.前言 ...
最新文章
- iOS并发编程指南之同步
- java getstringbounds_java-AttributedString的FontMetrics.getStringBounds给出...
- ligerui layout拖动中间分隔条宽度后,重新调整两边控件的宽度
- VBScript - Round Function
- MP 启动注入 SQL 原理分析
- Apache POI组件操作Excel,制作报表(四)
- 【前端周刊】20190606
- phpmyadmin出现缺少mysqli扩展问题
- matlab java mac_macOS Mojave上Matlab 2018a与Java的联合编程
- 【Mac系统】下载与安装Matlab2019b
- 分享|2022城市大脑发展白皮书(附PDF)
- 2018PS cc版本最新最实用学习笔记
- 360商城页面练习(html+css+js)
- 将禾赛激光雷达在rviz中采集的点云保存成pcd格式
- 相册服务器维护,相册云服务器
- 语音编码标准(G.711 G.723 G.726 G.729 iLBC)
- 波形发生器的工作原理
- ABAP-逻辑数据库
- C++编写爬虫脚本爬取网站图片
- 不要浪费一场好危机(丘吉尔)