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

news2025/1/11 12:41:53

目录

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.coloradmin.cn/o/2274903.html

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

相关文章

iOS实际开发中使用Alamofire实现多文件上传(以个人相册为例)

引言 在移动应用中,图片上传是一个常见的功能,尤其是在个人中心或社交平台场景中,用户经常需要上传图片到服务器,用以展示个人风采或记录美好瞬间。然而,实现多图片上传的过程中,如何设计高效的上传逻辑并…

基于phpstudy快速搭建本地php环境(Windows)

好好生活,别睡太晚,别爱太满,别想太多。 2025.1.07 声明 仅作为个人学习使用,仅供参考 对于CTF-Web手而言,本地PHP环境必不可少,但对于新手来说从下载PHP安装包到配置PHP环境是个非常繁琐的事情&#xff0…

ffmpeg 编译遇到的坑

makeinfo: error parsing ./doc/t2h.pm: Undefined subroutine &Texinfo::Config::set_from_init_file called at ./doc/t2h.pm line 24. 编译选项添加: --disable-htmlpages

Git:merge合并、冲突解决、强行回退的终极解决方案

首先还是得避免冲突的发生,无法避免时再去解决冲突,避免冲突方法: 时常做pull、fatch操作,不要让自己本地仓库落后太多版本;在分支操作,如切换分支、合并分支、拉取分支前,及时清理Change&#…

国内外网络安全政策动态(2024年12月)

▶︎ 1.2项网络安全国家标准获批发布 2024年12月6日,根据2024年11月28日国家市场监督管理总局、国家标准化管理委员会发布的中华人民共和国国家标准公告(2024年第29号),全国网络安全标准化技术委员会归口的2项网络安全国家标准正…

新兴的开源 AI Agent 智能体全景技术栈

新兴的开源 AI Agent 智能体全景技术栈 LLMs:开源大模型嵌入模型:开源嵌入模型模型的访问和部署:Ollama数据存储和检索:PostgreSQL, pgvector 和 pgai后端:FastAPI前端:NextJS缺失的一环:评估和…

通过一个含多个包且引用外部jar包的项目实例感受Maven的便利性

目录 1 引言2 手工构建3 基于Maven的构建4 总结 1 引言 最近在阅读一本Java Web的书籍1时,手工实现书上的一个含多个Packages的例子,手工进行编译、运行,最终实现了效果。但感觉到整个构建过程非常繁琐,不仅要手写各个源文件的编…

信息科技伦理与道德3:智能决策

1 概述 1.1 发展历史 1950s-1980s:人工智能的诞生与早期发展热潮 1950年:图灵发表了一篇划时代的论文,并提出了著名的“图灵测试”;1956年:达特茅斯会议首次提出“人工智能”概念;1956年-20世纪70年代&a…

Sql 创建用户

Sql server 创建用户 Sql server 创建用户SQL MI 创建用户修改其他用户密码 Sql server 创建用户 在对应的数据库执行,该用户得到该库的所有权限 test.database.chinacloudapi.cn DB–01 DB–02 创建服务器登录用户 CREATE LOGIN test WITH PASSWORD zDgXI7rsafkak…

【再谈设计模式】观察者模式~对象间依赖关系的信使

一、引言 在软件工程、软件开发的世界里,设计模式如同建筑蓝图中的经典结构,帮助开发者构建更加灵活、可维护和可扩展的软件系统。观察者模式就是其中一种极为重要的行为型设计模式,它在处理对象间的一对多关系时展现出独特的魅力。 二、定义…

如何设计一个注册中心?以Zookeeper为例

这是小卷对分布式系统架构学习的第8篇文章,在写第2篇文章已经讲过服务发现了,现在就从组件工作原理入手,讲讲注册中心 以下是面试题: 某团面试官:你来说说怎么设计一个注册中心? 我:注册中心嘛&…

【Unity3D】导出Android项目以及Java混淆

Android Studio 下载文件归档 | Android Developers Android--混淆配置(比较详细的混淆规则)_android 混淆规则-CSDN博客 Unity版本:2019.4.0f1 Gradle版本:5.6.4(或5.1.1) Gradle Plugin版本&#xff…

2024 China Collegiate Programming Contest (CCPC) Zhengzhou Onsite 基础题题解

今天先发布基础题的题解,明天再发布铜牌题和银牌题的题解 L. Z-order Curve 思路:这题目说了,上面那一行,只有在偶数位才有可能存在1,那么一定存在这样的数,0 ,1,100, 10000,那么反之,我们的数…

【FlutterDart】tolyui_feedback组件例子效果(23 /100)

上效果图 有12种位置展示效果;很能满足大部分需要 代码如下: import package:flutter/material.dart; import package:tolyui_feedback/tolyui_feedback.dart;class TolyTooltipDemo extends StatelessWidget {const TolyTooltipDemo({super.key});ove…

服务器攻击方式有哪几种?

随着互联网的快速发展,网络攻击事件频发,已泛滥成互联网行业的重病,受到了各个行业的关注与重视,因为它对网络安全乃至国家安全都形成了严重的威胁。面对复杂多样的网络攻击,想要有效防御就必须了解网络攻击的相关内容…

Mermaid 使用教程之流程图 - 从入门到精通

本文由 Mermaid中文文档 整理而来,并且它同时提供了一个Mermaid在线编辑器。 Mermaid 流程图 - 基本语法​ 流程图由节点(几何形状)和边(箭头或线)组成。Mermaid代码定义了如何创建节点和边,并适应不同的…

Flink系统知识讲解之:如何识别反压的源头

Flink系统知识之:如何识别反压的源头 什么是反压 Ufuk Celebi 在一篇古老但仍然准确的文章中对此做了很好的解释。如果您不熟悉这个概念,强烈推荐您阅读这篇文章。如果想更深入、更低层次地了解该主题以及 Flink 网络协议栈的工作原理,这里有…

网络-ping包分析

-a:使 ping 在收到响应时发出声音(适用于某些操作系统)。-b:允许向广播地址发送 ping。-c count:指定发送的 ping 请求的数量。例如,ping -c 5 google.com 只发送 5 个请求。-i interval:指定两…

国产linux系统(银河麒麟,统信uos)使用 PageOffice 实现后台生成单个PDF文档

PageOffice 国产版 :支持信创系统,支持银河麒麟V10和统信UOS,支持X86(intel、兆芯、海光等)、ARM(飞腾、鲲鹏、麒麟等)、龙芯(LoogArch)芯片架构。 PageOffice 版本&…

Win10微调大语言模型ChatGLM2-6B

在《Win10本地部署大语言模型ChatGLM2-6B-CSDN博客》基础上进行,官方文档在这里,参考了这篇文章 首先确保ChatGLM2-6B下的有ptuning AdvertiseGen下载地址1,地址2,文件中数据留几行 模型文件下载地址 (注意&#xff1…