车联网安全--TLS握手过程详解

目录

1. TLS协议概述

2. 为什么要握手

2.1 Hello

2.2 协商

2.3 同意 

3.总共握了几次手?


1. TLS协议概述

车内各ECU间基于CAN的安全通讯--SecOC,想必现目前多数通信工程师们都已经搞的差不多了(不要再问FvM了);但是在车云通信时,保证数据的信息安全则常用TLS,搞懂它,加深加深运管端各自的网络安全机制理解。

TLS(Transport Layer Security)前身叫做SSL(Secure Sockets Layer),位于TCP之上,但仍旧属于传输层,作用很明确,就是为了保证车云通信时数据的CIA。

目前,TLS协议版本已经来到了1.3,具体可以搜版本号RFC 8446,在标准中详细描述了握手协议,如下图:

RFC 5246 : TLS v1.2;RFC 4346 : TLS v1.1 ; RFC 2246 TLS v1.0

那么就从最基础的通信双方如何建立连接开始,入门TLS。

2. 为什么要握手

握手这个词很形象,就像相亲双方之前互不认识,但因为家里要求见面,那首先肯定是先握手,握手成功,双方来电,接下来对话才有戏;握手失败,闲聊两句,就各回各家。

握手期间的对话就很讲究了,对话如能找到共同话题,那相亲双方就可以围绕这个话题继续进行加密通信,这也就是TLS要先握手的本质:协商出一个密钥(共同话题),让双方基于这个密钥进行加密通信。 

这个协议中定义握手消息名字也很有意思,“Hello”,包括了Client Hello和Server Hello等。

我们以TLS1.2流程为例(因为抓包只抓到TLSV1.2),总结流程如下:

我用Wireshark抓了一个和https网页沟通的包,过程和上图很像有么有?

以这个为例来具体分析分析:

2.1 Hello

第一条消息,Client(我)向Server(知乎某专栏)发送Hello请求,得到数据包如下:

该消息体现了当前TLS版本协议、会话ID、随机数1(很重要记住它)、能够使用的密码套件、压缩算法还有很多扩展内容,特别是有个server_name,就像相亲两人见面第一句一定是,你就是xxx吧?

Client打了招呼,那Server应该要进行回复,不然就没得聊了,它话很多,打一声招呼Server Hello,紧接着陆陆续续发送了自己的证书、密钥交换参数,最终以Hello Done结尾,

Server Hello

格式如下:

Server首先会进行响应,并且从Client能够使用的密码套件中选择一种,在这里,它选择了0xc02f,满足第一条消息中提供的密码套件,这条消息确认了TLS版本1.2,选择了套件,并且承诺不会压缩后续对话,注意,这里Server还传递了一个随机数2。

密码套件名字很长:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,但其实得拆开来看:

ECDHE指的是密钥交换算法 Elliptic Curve Diffie-Hellman Ephemeral,签名就使用RSA算法;

AES_128_GCM是指后续加密通信使用AES128-GCM,既定义了密钥长度,也定义了密码工作模式;SHA256就很简单了,做Hash都用它。

Server Certificate

还是以相亲为例,两人见面后的第二句话一定是:我是某某阿姨(中间人)介绍的xxx。

这句话很关键,因为相亲双方都是基于中间人的介绍,ta的介绍就像是一个证书,是相亲双方能够继续往下聊的一个前提。

但这个中间人只是双方认可的,如果需要再进一步确认信息,身份证就是最好的证明,这是最权威的机构颁发的证书。

因此,Server Certificate提供证书的目的也很明确,就是证明自己的合法身份,这条消息格式如下:

证书主要包含了如下信息:

证书里包含了一个非常关键的内容:Server的公钥,其他关于证书的问题我们后面单独再谈。

有兴趣的可以搜一搜中国电子银行网的《六问六答》。

Server Key Exchange

前面我们已经知道了,双方要写上一个密钥,使用算法为ECDHE,这个算法要求双方首先交换公钥,因此需要这条消息 Key Exchange,格式如下:

这里面包括了握手类型、算法所选曲线采用x25519、用于协商密钥的公钥,以及用上述证书中公钥对应的私钥进行的签名,算法为RSA-PSS-SHA256(这些算法填充格式之前已经聊过了)。

Server Hello Done

Hello Done的信息量很少,如下:

 就是Server告诉Client,自我介绍完毕,看你怎么回应。

事实上,通过Wireshark抓包,我们可以看到,Server回应的消息实际是在一个包内,如下图所示:

2.2 协商

在第一步里,Client收到了Server发来的证书、密钥交换的参数等等,就需要对一步一步来验证Server的身份和数据完整性,并向Server发送密钥协商的参数,同样一包中可以封装了不同的消息,如下图:

Client Key Exchange

首先Client使用CA的公钥对证书进行验签(过程暂不讲),通过后取出Server的公钥备用。

这时候Client就拥有了四个参数:自己的协商公钥、Server的协商公钥、随机数1、随机数2。

那么神奇的就来了,预协商密钥 = c_priv * s_pub = c_priv * (s_priv * G);

G是椭圆曲线的基点G,是公开的,唯有私钥是各自保护,所以Client也要把协商公钥发给Server,

Server拿到后,计算预协商密钥 = s_priv * c_pub = s_priv * (c_priv * G)。

这不就妥了吗?两边预协商密钥都一样了,这个密钥一般叫预主密钥。 

还记得之前两个随机数吗,Client和Server会使用相同算法对这三个参数进行操作,得到最终会话密钥 = Algo(随机数1 + 随机数2 + 预主密钥)

Change Cipher Spec

这个消息就是告诉Server,咱们密钥都已经协商好了,那就用它开始进行对话吧,截图如下:

Encrypted Handshake Message

这个时候就使用了协商好的对称密钥对握手消息进行加密传输,如下:

之后就是加密后的应用数据了。 

2.3 同意 

当Client发送经过对称加密的消息后,Server当然也需要进行确认,因此会回复三个消息:

New Session Ticket

该消息主要是为了快速恢复会话,防止重复握手

Change Cipher Spec 

表示Server接收到了使用协商好的共享密钥,并且确认后续都使用该密钥进行加密通话。

Encrypted Handshake Message

3.总共握了几次手?

最后总结一下, TLS建立连接时总共进行了几次握手?

第一次:Client向Server发送 Client Hello,包括协议的版本信息、密码套件、随机数(Client Random)等;

第二次:Server向Client发送 Server Hello,包括所选密码套件、协议版本、数字证书、随机数(Server Random);

第三次:Client向Server发送协商密钥的参数、更新加密协议、发送密文等;

第四次:Server向Client发送新建会话Tickets、发送密文以验证对称加解密通道;

这就是TLS的四次握手成功。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/65822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RuoYi Cloud项目解读【四、项目配置与启动】

四、项目配置与启动 当上面环境全部准备好之后,接下来就是项目配置。需要将项目相关配置修改成当前相关环境。 1 后端配置 1.1 数据库 创建数据库ry-cloud并导入数据脚本ry_2024xxxx.sql(必须),quartz.sql(可选&…

C#对象池

一、资源管理的困境与破局 在软件开发的征程中,我们时常陷入资源管理的泥沼。以一个繁忙餐厅为例,每个顾客都急需一个盘子盛美食,可盘子数量有限,如果每次顾客用完盘子后,都不假思索地去清洗一个全新的盘子来供下一位…

Vue.js组件开发-如何使用moment.js

在Vue.js组件开发中,需要处理日期和时间,moment.js 是一个非常有用的库。moment.js 提供了丰富的API来解析、验证、操作和显示日期和时间。 步骤: 1. 安装moment.js 首先,需要通过npm或yarn安装moment.js。在项目根目录下运行以…

微信小程序mp3音频播放组件,仅需传入url即可

// index.js // packageChat/components/audio-player/index.js Component({/*** 组件的属性列表*/properties: {/*** MP3 文件的 URL*/src: {type: String,value: ,observer(newVal, oldVal) {if (newVal ! oldVal && newVal) {// 如果 InnerAudioContext 已存在&…

要避免除数绝对值远远小于被除数绝对值的除法

要避免除数绝对值远远小于被除数绝对值的除法 用绝对值小的数作除数&#xff0c;舍人误差会增大&#xff0c;如计算 x y \frac xy yx​,若 0 < ∣ y ∣ < ∣ x ∣ 0<|y|<|x| 0<∣y∣<∣x∣&#xff0c;则可能对计算结果带来严重影响&#xff0c;应尽量避免…

深入了解OpenStack中的隧道网络

在OpenStack环境中&#xff0c;隧道网络是一项关键技术&#xff0c;它确保了虚拟机之间以及虚拟机与外部网络之间的安全通信。通过隧道机制&#xff0c;我们可以有效地隔离不同租户的流量&#xff0c;并支持多租户环境下的复杂网络需求。之前我们介绍了隧道网络&#xff0c;下面…

4. scala高阶之隐式转换与泛型

背景 上一节&#xff0c;我介绍了scala中的面向对象相关概念&#xff0c;还有一个特色功能&#xff1a;模式匹配。本文&#xff0c;我会介绍另外一个特别强大的功能隐式转换&#xff0c;并在最后介绍scala中泛型的使用 1. 隐式转换 Scala提供的隐式转换和隐式参数功能&#…

pandas与sql对应关系【帮助sql使用者快速上手pandas】

本页旨在提供一些如何使用pandas执行各种SQL操作的示例&#xff0c;来帮助SQL使用者快速上手使用pandas。 目录 SQL语法一、选择SELECT1、选择2、添加计算列 二、连接JOIN ON1、内连接2、左外连接3、右外连接4、全外连接 三、过滤WHERE1、AND2、OR3、IS NULL4、IS NOT NULL5、B…

第432场周赛:跳过交替单元格的之字形遍历、机器人可以获得的最大金币数、图的最大边权的最小值、统计 K 次操作以内得到非递减子数组的数目

Q1、跳过交替单元格的之字形遍历 1、题目描述 给你一个 m x n 的二维数组 grid&#xff0c;数组由 正整数 组成。 你的任务是以 之字形 遍历 grid&#xff0c;同时跳过每个 交替 的单元格。 之字形遍历的定义如下&#xff1a; 从左上角的单元格 (0, 0) 开始。在当前行中向…

《探索鸿蒙Next上开发人工智能游戏应用的技术难点》

在科技飞速发展的当下&#xff0c;鸿蒙Next系统为应用开发带来了新的机遇与挑战&#xff0c;开发一款运行在鸿蒙Next上的人工智能游戏应用更是备受关注。以下是在开发过程中可能会遇到的一些技术难点&#xff1a; 鸿蒙Next系统适配性 多设备协同&#xff1a;鸿蒙Next的一大特色…

Harry技术添加存储(minio、aliyun oss)、短信sms(aliyun、模拟)、邮件发送等功能

Harry技术添加存储&#xff08;minio、aliyun oss&#xff09;、短信sms&#xff08;aliyun、模拟&#xff09;、邮件发送等功能 基于SpringBoot3Vue3前后端分离的Java快速开发框架 项目简介&#xff1a;基于 JDK 17、Spring Boot 3、Spring Security 6、JWT、Redis、Mybatis-P…

Vue2: el-table为每一行添加超链接,并实现光标移至文字上时改变形状

为表格中的某一列添加超链接 一个表格通常有许多列,网上许多教程都可以实现为某一列添加超链接,如下,实现了当光标悬浮在“姓名”上时,改变为手形,点击可实现跳转。 <el-table :data="tableData"><el-table-column label="姓名" prop=&quo…

R数据分析:多分类问题预测模型的ROC做法及解释

有同学做了个多分类的预测模型,结局有三个类别,做的模型包括多分类逻辑回归、随机森林和决策树,多分类逻辑回归是用ROC曲线并报告AUC作为模型评估的,后面两种模型报告了混淆矩阵,审稿人就提出要统一模型评估指标。那么肯定是统一成ROC了,刚好借这个机会给大家讲讲ROC在多…

A3. Springboot3.x集成LLama3.2实战

本文将介绍集成ollama官网提供的API在Springboot工程中进行整合。由于没找到java-llama相关合适的sdk可以使用,因此只好对接官方给出的API开发一套RESTFull API服务。下面将从Ollama以下几个API展开介绍,逐渐的了解其特性以及可以干些什么。具体llama API说明可参数我前面写的…

面试:类模版中函数声明在.h,定义在.cpp中,其他cpp引用引入这个头文件,会有什么错误?

1、概述 类模版中函数声明在.h&#xff0c;定义在.cpp中&#xff0c;其他cpp引用引入这个头文件&#xff0c;会有什么错误?报编译错误&#xff1a;error C2512: Demo<int>: no appropriate default constructor available 举例如下代码&#xff1a;demo.h 声明模版类 …

记一次学习skynet中的C/Lua接口编程解析protobuf过程

1.引言 最近在学习skynet过程中发现在网络收发数据的过程中数据都是裸奔&#xff0c;就想加入一种数据序列化方式&#xff0c;json、xml简单好用&#xff0c;但我就是不想用&#xff0c;于是就想到了protobuf&#xff0c;对于protobuf C/C的使用个人感觉有点重&#xff0c;正好…

SQLAlchemy

https://docs.sqlalchemy.org.cn/en/20/orm/quickstart.htmlhttps://docs.sqlalchemy.org.cn/en/20/orm/quickstart.html 声明模型 在这里&#xff0c;我们定义模块级构造&#xff0c;这些构造将构成我们从数据库中查询的结构。这种结构被称为 声明式映射&#xff0c;它同时定…

Trimble自动化激光监测支持历史遗产实现可持续发展【沪敖3D】

故事桥&#xff08;Story Bridge&#xff09;位于澳大利亚布里斯班&#xff0c;建造于1940年&#xff0c;全长777米&#xff0c;横跨布里斯班河&#xff0c;可载汽车、自行车和行人往返于布里斯班的北部和南部郊区。故事桥是澳大利亚最长的悬臂桥&#xff0c;是全世界两座手工建…

CentOS 和 Ubantu你该用哪个

文章目录 **一、CentOS 和 Ubuntu 的详细介绍****1. CentOS****1.1 基本信息****1.2 特点****1.3 缺点** **2. Ubuntu****2.1 基本信息****2.2 特点****2.3 缺点** **二、CentOS 和 Ubuntu 的异同****1. 相同点****2. 不同点****3. 使用体验对比** **三、总结和选择建议** Cent…

Android RIL(Radio Interface Layer)全面概述和知识要点(3万字长文)

在Android面试时,懂得越多越深android framework的知识,越为自己加分。 目录 第一章:RIL 概述 1.1 RIL 的定义与作用 1.2 RIL 的发展历程 1.3 RIL 与 Android 系统的关系 第二章:RIL 的架构与工作原理 2.1 RIL 的架构组成 2.2 RIL 的工作原理 2.3 RIL 的接口与协议…