數字簽名與證書

1. 數字簽名與證書

  1. 摘要算法用來實現完整性,能夠為數據生成獨一無二的“指紋”,常用的算法是 SHA-2;
  2. 數字簽名是私鑰對摘要的加密,可以由公鑰解密后驗證,實現身份認證和不可否認;
  3. 公鑰的分發需要使用數字證書,必須由 CA 的信任鏈來驗證,否則就是不可信的;
  4. 作為信任鏈的源頭 CA 有時也會不可信,解決辦法有 CRL(證書吊銷列表)、OCSP((在線證書狀態協議),還有終止信任。

在機密性的基礎上還必須加上完整性、身份認證等特性,才能實現真正的安全。

1.1. 摘要算法

實現完整性的手段主要是摘要算法(Digest Algorithm),也就是常說的散列函數、哈希函數(Hash Function)。

摘要算法近似地理解成一種特殊的壓縮算法,它能夠把任意長度的數據“壓縮”成固定長度、而且獨一無二的“摘要”字符串,就好像是給這段數據生成了一個數字“指紋”。

TLS推薦使用加密算法SHA-2。

SHA-2 實際上是一系列摘要算法的統稱,總共有 6 種,常用的有 SHA224、SHA256、SHA384,分別能夠生成 28 字節、32 字節、48 字節的摘要。

真正的完整性必須要建立在機密性之上,在混合加密系統里用會話密鑰加密消息和摘要,叫哈希消息認證碼(HMAC)。

1.2. 數字簽名

私鑰就是可以證明本人持有的東西,私鑰 + 摘要算法實現數字簽名, 同時實現,身份認證不可否認。

數字簽名的原理其實很簡單,就是把公鑰私鑰的用法反過來,之前是公鑰加密、私鑰解密,現在是私鑰加密、公鑰解密。

數字簽名的過程:

  1. 創建消息摘要:發送者使用哈希函數(如SHA-256)生成消息的摘要,這是一個固定長度的字符串,代表了原始消息的內容。
  2. 使用私鑰進行加密:發送者使用自己的私鑰對消息摘要進行加密,生成數字簽名。
  3. 發送消息和簽名:發送者將原始消息和數字簽名一起發送給接收者。
  4. 驗證簽名:接收者使用發送者的公鑰對數字簽名進行解密,得到消息摘要。
  5. 驗證消息摘要:接收者生成接收到的消息的摘要。
  6. 比較摘要:接收者比較接收到的摘要和用發送者公鑰解密得到的摘要。如果兩者相同,說明消息未被篡改。

1.3. 數字證書和 CA

為了解決“公鑰的信任”問題。

誰都可以發布公鑰,我們還缺少防止黑客偽造公鑰的手段,也就是說,怎么來判斷這個公鑰就是你或者某寶的公鑰呢?

數字證書和CA的用途:

數字證書是由權威CA(證書頒發機構)簽發的電子憑證,用于驗證實體(如網站、個人)身份的真實性,并綁定其公鑰信息。它通過加密和簽名確保數據傳輸的機密性、完整性和不可抵賴性。

CA作為受信任的第三方,負責審核證書申請、簽發證書,并建立信任鏈,防止身份偽造,是互聯網信任體系的核心基礎。兩者共同保障通信安全與身份可信。

Question:那客戶端如何解密服務器發的加密消息呢?

簡要流程如下:

1. 客戶端發起請求(Client Hello)

  • 瀏覽器發起 HTTPS 請求,告訴服務器自己支持哪些加密算法。
  • 這個階段還沒有加密。

2. 服務器回應(Server Hello)

  • 服務器選擇加密算法。
  • 并把自己的 數字證書(包含公鑰) 發給客戶端。

3. 客戶端驗證證書是否合法

  • 用操作系統或瀏覽器內置的可信 CA 證書庫驗證服務器證書是否合法(比如看證書是不是被偽造的)。

4. 生成對稱密鑰(關鍵步驟)

  • 客戶端用服務器的“公鑰”加密一個隨機生成的“對稱密鑰”(也叫會話密鑰)。
  • 然后把這個加密后的密鑰發送給服務器。

5. 服務器用私鑰解密

  • 服務器用自己保管的“私鑰”解密這個密鑰,拿到會話密鑰。

6. 后續通信都用這個對稱密鑰加密

  • 客戶端和服務器都有了相同的“會話密鑰”,后續通信(例如服務器返回的數據)就用這個密鑰加密。
  • 客戶端收到加密數據后,用同一個密鑰解密即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79258.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79258.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79258.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ubuntu22.04安裝顯卡驅動/卸載顯卡驅動

報錯 今日輸入nvidia-smi報錯,在安裝了535和550,包括560都沒辦法解決,但是又怕亂搞導致環境損壞,打算把顯卡卸載然后重新安裝系統默認推薦版本的顯卡驅動 qinqin:~$ nvidia-smi Failed to initialize NVML: Driver/library version mismatch NVML library version: 560.35卸載…

Web 架構之負載均衡全解析

文章目錄 一、引言二、思維導圖三、負載均衡的定義與作用定義作用1. 提高可用性2. 增強性能3. 實現擴展性 四、負載均衡類型硬件負載均衡代表設備優缺點 軟件負載均衡應用層負載均衡代表軟件優缺點 網絡層負載均衡代表軟件優缺點 五、負載均衡算法輪詢算法(Round Ro…

linux下的Redis的編譯安裝與配置

配合做開發經常會用到redis,整理下編譯安裝配置過程,僅供參考! --------------------------------------Redis的安裝與配置-------------------------------------- 下載 wget https://download.redis.io/releases/redis-6.2.6.tar.gz tar…

A2A大模型協議及Java示例

A2A大模型協議概述 1. 協議作用 A2A協議旨在解決以下問題: 數據交換:不同應用程序之間的數據格式可能不一致,A2A協議通過定義統一的接口和數據格式解決這一問題。模型調用:提供標準化的接口,使得外部應用可以輕松調…

關鍵點檢測--使用YOLOv8對Leeds Sports Pose(LSP)關鍵點檢測

目錄 1. Leeds Sports Pose數據集下載2. 數據集處理2.1 獲取標簽2.2 將圖像文件和標簽文件處理成YOLO能使用的格式 3. 用YOLOv8進行訓練3.1 訓練3.2 預測 1. Leeds Sports Pose數據集下載 從kaggle官網下載這個數據集,地址為link,下載好的數據集文件如下…

20250508在WIN10下使用移遠的4G模塊EC200A-CN直接上網

1、在WIN10/11下安裝驅動程序:Quectel_Windows_USB_DriverA_Customer_V1.1.13.zip 2、使用移遠的專用串口工具:QCOM_V1.8.2.7z QCOM_V1.8.2_win64.exe 3、配置串口UART42/COM42【移遠會自動生成連續三個串口,最小的那一個】 AT命令&#xf…

第J7周:ResNeXt解析

🍨 本文為🔗365天深度學習訓練營 中的學習記錄博客🍖 原作者:K同學啊 目標 具體實現 (一)環境 語言環境:Python 3.10 編 譯 器: PyCharm 框 架: Tensorflow (二)具體…

C++之類和對象:初始化列表,static成員,友元,const成員 ……

目錄 const成員函數: 前置和后置重載: 取地址及const取地址操作符重載: 初始化列表: explicit關鍵字: static成員: 友元: 友元函數: 友元類: 內部類&#xff1a…

uni-app 中的條件編譯與跨端兼容

uni-app 為了實現一套代碼編譯到多個平臺(包括小程序,App,H5 等),引入了條件編譯機制。 通過條件編譯,我們可以針對不同的平臺編寫特定的代碼,從而實現跨端兼容。 一、條件編譯的作用 平臺差異…

Linux平臺下SSH 協議克隆Github遠程倉庫并配置密鑰

目錄 注意:先提前配置好SSH密鑰,然后再git clone 1. 檢查現有 SSH 密鑰 2. 生成新的 SSH 密鑰 3. 將 SSH 密鑰添加到 ssh-agent 4. 將公鑰添加到 GitHub 5. 測試 SSH 連接 6. 配置 Git 使用 SSH 注意:先提前配置好SSH密鑰,然…

[C++] 大數減/除法

目錄 高精度博客 - 前兩講高精度減法高精度除法高精度系列函數完整版 高精度博客 - 前兩講 講次名稱鏈接高精加法[C] 高精度加法(作用 模板 例題)高精乘法[C] 高精度乘法 高精度減法 void subBIG(int x[], int y[], int z[]){z[0] max(x[0], y[0]);for(int i 1; i < …

視頻添加字幕腳本分享

腳本簡介 這是一個給視頻添加字幕的腳本&#xff0c;可以方便的在指定的位置給視頻添加不同大小、字體、顏色的文本字幕&#xff0c;添加方式可以直接修改腳本中的文本信息&#xff0c;或者可以提前編輯好.srt字幕文件。腳本執行環境&#xff1a;windowsmingwffmpeg。本方法僅…

ubuntu nobel + qt5.15.2 設置qss語法識別正確

問題展示 解決步驟 首選項里面的高亮怎么編輯選擇都沒用。如果已經有generic-highlighter和css.xml&#xff0c;直接修改css.xml文件最直接&#xff01; 在generic-highlighter目錄下找到css.xml文件&#xff0c;位置是&#xff1a;/opt/Qt/Tools/QtCreator/share/qtcreator/…

洛谷P7528 [USACO21OPEN] Portals G

P7528 [USACO21OPEN] Portals G luogu題目傳送門 題目描述 Bessie 位于一個由 N N N 個編號為 1 … N 1\dots N 1…N 的結點以及 2 N 2N 2N 個編號為 1 ? 2 N 1\cdots 2N 1?2N 的傳送門所組成的網絡中。每個傳送門連接兩個不同的結點 u u u 和 v v v&#xff08; u …

C++STL——priority_queue

優先隊列 前言優先隊列仿函數頭文件 前言 本篇主要講解優先隊列及其底層實現。 優先隊列 優先隊列的本質就是個堆&#xff0c;其與queue一樣&#xff0c;都是容器適配器&#xff0c;不過優先隊列是默認為vector實現的。priority_queue的接口優先隊列默認為大根堆。 仿函數 …

助力你的Neovim!輕松管理開發工具的魔法包管理器來了!

在現代編程環境中&#xff0c;Neovim 已經成為許多開發者的編輯器選擇。而針對 Neovim 的各種插件與功能擴展&#xff0c;則是提升開發體驗的重要手段。今天我們要介紹的就是一個強大而便捷的開源項目——mason.nvim&#xff0c;一個旨在簡化和優化 Neovim 使用體驗的便攜式包管…

Java-Lambda 表達式

Lambda 表達式是 Java 8 引入的一項重要特性&#xff0c;它提供了一種簡潔的方式來表示匿名函數。Lambda 表達式主要用于簡化函數式接口的實現&#xff0c;使代碼更加簡潔和易讀。以下是關于 Lambda 表達式的詳細闡述&#xff1a; 1. Lambda 表達式的基本語法 Lambda 表達式的…

05 mysql之DDL

一、SQL的四個分類 我們通常可以將 SQL 分為四類&#xff0c;分別是&#xff1a; DDL&#xff08;數據定義語言&#xff09;、DML&#xff08;數據操作語言&#xff09;、 DCL&#xff08;數據控制語言&#xff09;和 TCL&#xff08;事務控制語言&#xff09;。 DDL 用于創建…

1 2 3 4 5順序插入,形成一個紅黑樹

紅黑樹的特性與優點 紅黑樹是一種自平衡的二叉搜索樹&#xff0c;通過額外的顏色標記和平衡性約束&#xff0c;確保樹的高度始終保持在 O(log n)。其核心特性如下&#xff1a; 每個節點要么是紅色&#xff0c;要么是黑色。根節點和葉子節點&#xff08;NIL節點&#xff09;是…

微服務6大拆分原則

微服務6大拆分原則 微服務拆分是指將一個大型應用程序拆分成獨立服務的過程&#xff0c;在微服務拆分時&#xff0c;需要考慮以下6大微服務拆分原則 一、單一職責原則 微服務單一職責原則&#xff0c;是指每個微服務應該專注于解決一個明確定義的業務領域或功能&#xff0c;…