TLS中ChangeCipherSpec为什么是个单独的协议类型【转】

2023-05-16

 发表于 2020-03-14 22:27 |  更新于 2021-04-29 17:15

RFC5246中说:

Note: To help avoid pipeline stalls, ChangeCipherSpec is an independent TLS Protocol content type, and is not actually a TLS handshake message.

为了避免pipeline stall,ChangeCipherSpec是个单独的协议类型,不属于握手协议。这里什么是pipeline stall?

1. pipeline stall

通俗点的理解是,在CPU流水线设计中,有些指令必须在某些指令之后执行,中间需要停顿一下,等待前一个指令执行完,才能开始后一个指令;或者逻辑分支时,需要控制程序指令转移,导致流水线停顿。如果这样的stall过多,就会影响的性能。可以采取一些办法减少或避免停顿。

2. TLS1.2及之前的ChangeCipherSpec

为什么ChangeCipherSpec需要是单独的类型呢?如果是握手协议类型,TLS协议规定相同协议类型的数据可以集中到一个record中发送,也就是说,一个record中可以同时存放ClientKeyExchange,ChangeCipherSpec,Finished这三个消息,其中ClientKeyExchange,ChangeCipherSpec这两个是不加密的,Finished是需要加密的。但TLS的加密是以record为单位的,一个record只能加密或不加密,不能其中一部分数据加密,另一部分不加密。所以在实现的时候,必须将Finished放入一个单独的record中,另外,在ChangeCipherSpecFinished之间,也需要将连接状态从明文状态转换到加密状态,就需要停顿一下。

但是,并不一定每个实现都能很好的遵循”将Finished放入单独的record中发送”这个约定,这样就在协议设计的时候添加了这样的冗余,相当于使用ChangeCipherSpecClientKeyExchangeFinished强制分配到两个record中。

3. TLS1.3的ChangeCipherSpec

TLS1.3中并不需要该消息,因为协议本身保证了在状态转换前发送的消息都是确定的,比如握手消息在ClientHello, ServerHello之后都是加密的,应用消息在发送完Finished之后也都是加密的,而且TLS1.3的秘钥推导跟之前版本的也都不一样,不需要CCS这样的冗余设计。但为了兼容性,还是保留了一些。

4. 总结

ChangeCipherSpec是TLS1.2及之前的协议设计的冗余消息,目的是从协议上避免实现时的流水线停顿问题。

参考

  1. pipeling stall
  2. CCS pipeling stall
  3. OpenSSL再曝CCS注入漏洞
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TLS中ChangeCipherSpec为什么是个单独的协议类型【转】 的相关文章

随机推荐

  • Semantic Visual Simultaneous Localization and Mapping: A Survey阅读笔记

    Abstract xff1a 通过语义和vslam结合可以很好解决动态和复杂环境中良好定位 首先回顾了语义vslam发展 xff0c 关注优势和差异 其次探讨了 xff1a 语义信息提取和关联 语义的应用和语义的优势然后收集分析了最先进的s
  • git上传到gitee的记录

    一 安装和配置 sudo apt get install git git config global user email 你的邮箱 git config global user name 64 你的昵称 二 上传 先在github或者gi
  • Burst Imaging for Light-Constrained Structure-From-Motion论文翻译记录

    准备开始2022ICRA的SLAM论文阅读记录 Abstract 在极低光照条件下拍摄的图像受噪声限制 xff0c 会导致现有的机器人视觉算法失效 在本文中 xff0c 我们开发了一种图像处理技术 xff0c 用于从弱光条件下采集的图像中辅
  • ROS常用指令

    非代码 一 创建工作空间 mkdir p catkin ws src cd catkin ws src catkin init workspace 二 创建功能包 cd workspace src catin create pkg name
  • 【Matlab】线性跟踪微分器

    线性跟踪微分器介绍 xff1a 线性跟踪微分器出自自抗扰控制ADRC xff0c 线性跟踪微分器有两个作用 xff0c 一是可以用来滤波 xff0c 而是可以用来求取输入的微分 这里有一篇文章可以推荐看看 xff1a https blog
  • FreeRTOS启动流程

    Reset Handler xff1a 芯片上电默认进Reset Handler SystemInit xff1a 初始化时钟及中断向量映射 main xff1a main函数入口 main xTaskCreate xff1a pvPort
  • 基于STM32F411使用SPI+DMA驱动LCD

    先看效果 F411CE 硬件SPI xff0b DMA驱动LCD 基于HAL库 其实HAL库我用不太习惯 xff0c 一直也是用的标准库 但HAL库确实是好上手一些 xff0c 就迅速创建一个新的template 这次就当尝试一下吧 xff
  • 动手深度学习-环境配置(手动安装,一步一步教你,有截图可看)

    一 xff1a 官网教程 这一部分对应了书中的第二讲 xff1a 预备知识部分 因为我是Windows用户 xff0c 所以这里先只讲Windows部分的安装过程 1 xff1a 第一步是根据操作系统下载并安装Miniconda xff0c
  • 机器学习算法原理与实践(三)、卡尔曼滤波器算法浅析及matlab实战

    协方差矩阵 状态协方差矩阵传递 状态协方差的更新 Matlab 实现 Matlab效果 测试代码 测试效果 原创 Liu LongPo 转载请注明出处 CSDN http blog csdn net llp1992 卡尔曼滤波器是一种利用线
  • Pixhawk之获取传感器数据并更新姿态

    博主 xff1a UAV 声明 xff1a 尊重版权 xff0c 转载请注明出处 原文地址 xff1a 联系方式 xff1a 595493514 64 qq com 技术交流QQ xff1a 595493514 read AHRS 是负责更
  • 类与对象以及类的继承

    类与对象以及类的继承 Java是一门面向对象的语编程言 世界上有众多对象 xff0c 我们把具有相同属性和方法的对象归为一个类 因此 xff0c 类 便是Java代码中的基本单位 下面是对一些名词的解释 类 类是一个模板 xff0c 用来定
  • 如何使用 Apache IoTDB 触发器

    Apache IoTDB 触发器提供了一种侦听序列数据变动的机制 配合用户自定义逻辑 xff0c 可完成告警 数据转发等功能 触发器基于 Java 反射机制实现 用户通过简单实现 Java 接口 xff0c 即可实现数据侦听 IoTDB 允
  • Apache IoTDB 查询引擎源码阅读——数据异步传输模块

    本文参考了 Apache IoTDB 社区成员田原和王中的设计文档 xff0c 由于飞书链接限制 xff0c 本文没有贴出参考链接 背景 Apache IoTDB 查询引擎目前采用 MPP 架构 xff0c 一条查询 SQL 大致会经历下图
  • strchr字符查找函数族;strchrnul()

    https blog csdn net jasonchen gbd article details 80069134 Linux中的字符串和字节序列处理函数 Y 字符串查找 xff0c 有库函数 xff0c 可以起到事半功倍的效果 xff0
  • 【Matlab】线性二次型最优控制问题(LQR控制)

    前面介绍了变分法与极小值原理的基础思想 xff0c 之后有一个非常重要的应用就是线性二次型的最优控制问题 假如系统是线性的 xff0c 性能泛函是状态变量与控制变量的二次型函数的积分 xff0c 那么这样的问题称之为线性二次型最优控制问题
  • 什么是回调函数?为什么要使用回调函数?如何使用回调函数?

    1 什么是回调函数 xff1a 函数指针的调用 xff0c 即是一个通过函数指针调用的函数 xff1b 如果你把函数的指针 xff08 地址 xff09 作为参数传递给另一个函数 xff0c 当这个指针被用来调用其所指向的函数时 xff0c
  • android.mk编译规则,1个mk文件编译多个模块

    目录 Android mk 自我理解 Android mk 是什么 Android mk 语法规则 规则解释 xff1a Android mk 编译多个模块实例 xff0c 详见如下 xff1a Android mk 语法规则 xff1a
  • Wireshark抓包分析 TCP三次握手/四次挥手详解

    Wireshark抓包分析 TCP三次握手 四次挥手详解 2019 11 13阅读 1 9K0 作者 xff1a 踏歌追云 来源 xff1a https urlify cn jYVZn2 本文结合wireshark抓包 xff0c 对TCP
  • tls1.3【转载】

    tr tls1 3 发表于 2021 01 04 20 39 更新于 2021 04 29 17 15 tls1 3翻译备忘 摘要 该文档定义了TLS Transport Layer Security 协议的1 3版本 TLS可以让C S应
  • TLS中ChangeCipherSpec为什么是个单独的协议类型【转】

    发表于 2020 03 14 22 27 更新于 2021 04 29 17 15 RFC5246中说 Note To help avoid pipeline stalls ChangeCipherSpec is an independen