車聯網安全--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.pswp.cn/web/65822.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65822.shtml
英文地址,請注明出處:http://en.pswp.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 的接口與協議…