密碼學(終極版)

加密 & 解密

備注:密碼學領域不存在完全不能破解的密碼,但是如果一個密碼需要很久很久,例如一萬年才能破解,就認為這個密碼是安全的了。

對稱加密
非對稱加密

公鑰加密、私鑰解密
私鑰簽名、公鑰認證

非對稱的底層原理是密碼學,密碼學的底層是數學。

非對稱加密的數學底層原理是:兩個大質數相乘很容易得到一個結果,但是相反,將這個結果反推到是哪兩個質數相乘卻非常困難。

秘鑰長度可以理解為兩個質數相乘結果的大小,秘鑰越長則使用的兩個質數的相乘結果越大。
在這里插入圖片描述

簽名 & 驗簽

私鑰簽名,公鑰認證。

公鑰驗證數字簽名的過程如下:

  1. 獲取要驗證的數據、公鑰和數字簽名。
  2. 使用公鑰對數字簽名進行解密,得到解密后的哈希。
  3. 對要驗證的數據進行哈希計算,通常使用與創建數字簽名時相同的哈希算法。
  4. 將哈希計算得到的結果與解密后的哈希進行比較。
  5. 如果兩者完全一致,則表明數字簽名有效,驗證通過;否則,數字簽名無效,驗證失敗。

再通俗一點:公鑰驗證通常是 1. 通過使用公鑰對數字簽名解密后,得到hash值;2. 對data數據進行hash。3. 比較兩個hash值是否一樣來實現的。

參考鏈接SSH 原理與應用

哈希

哈希使用場景1:

對一個很大的文件進行簽名很浪費計算機性能,因此一般情況下會先對待簽名的文件進行哈希。(通過哈希來提取這個文件的特征-生成固定長度的字符串,也可以理解成這個文件的身份證,即唯一標識)。然后在對哈希值進行簽名。

哈希使用場景2:

并不是所有的加密都使用非對稱加密,對于很大的文件很浪費計算機性能。通常情況是利用對稱加密和非對稱加密結合的方式。即通過對稱加密算法對大文件進行加密,然后通過非對稱加密算法對對稱加密的秘鑰進行加密。

數字證書

上面的非對稱加密已經是非常安全的了,包括驗簽都是沒有問題的。但是還要一個沒有解決的問題就是 “中間人” 攻擊。

舉例:Bob 想要把一個帶數字簽名的文件傳遞給 Alice 。于是 Bob 生成了公鑰和私鑰,用私鑰簽署了文件。然后把公鑰上傳到一個公共服務器上。如果一切順利,那 Alice 去下載這個公鑰,然后就可以驗證簽名,確認文件的確是 Bob 發出的,同時沒有被篡改過。但是這里的安全漏洞是明顯的,那就是 Alice 無法確認她下載的公鑰是不是真的是 Bob 的。這就給所謂的“中間人攻擊”提供了可能。假設在 Bob 的文件還沒有到達 Alice 之前,黑客發起了中間人攻擊,刪除 Bob 的文件,然后簽署一個假文件發送給 Alice ,Alice 收到后去公共服務上下載的公鑰其實也被黑客替換過的,她用這個公鑰去驗證了簽名,自認為文件就是 Bob 發出的,所以被騙了。其實仔細想想,問題就出在公鑰本身沒有辦法證明自己的主人是誰

所以要避免中間人攻擊,就要使用數字證書。Bob 簽名文件之后,給 Alice 發送時附上自己的證書。Alice 收到證書之后,就可以信任證書中的公鑰的確就是 Bob 的了。有了這個公鑰,可以驗證文件附帶的數字簽名是 Bob 的。數字簽名沒問題,就保證了文件是沒有被篡改過的。至于 Alice 如何確認證書本身是可信的,稍后我們聊 HTTPS 的過程中再展開聊。

數字證書是數字簽名的升級,數字證書能證明公鑰屬于誰。

數字證書中的數字簽名是CA的簽名。

那么怎么確定CA是沒問題的呢?計算機或者操作系統等在出廠的時候默認了權威的根證書的公鑰,然后就可以來驗證傳過來的證書的真偽。
在這里插入圖片描述

數字證書場景的兩個應用場景

1、數字簽名
如上。
2、HTTPS
比如,我現在用瀏覽器來訪問谷歌服務器。要建立加密通道,首先第一步是要傳遞公鑰過來,但是服務器傳遞過來的公鑰如果過程中被篡改過,那么后續的加密通信也就全無安全性可言了。所以谷歌需要先去 CA 機構申請 SSL 證書,放到自己的服務器上。這樣,我在瀏覽器中輸入谷歌的網址,谷歌那邊會首先給瀏覽器發送 SSL 證書。注意,各個瀏覽器中都內置了對全球各大 CA 機構的驗證機制,底層的原理就是擁有 CA 們的公鑰,可以驗證證書上 CA 的簽名。如果證書沒有問題,瀏覽器就可以斷定證書中攜帶過來的公鑰就是谷歌的。這時候,瀏覽器會生成一個秘鑰,注意這里就是對稱加密的思路了,發送給谷歌服務器。這樣,谷歌擁有瀏覽器的加密秘鑰,可以用對稱加密的思路來跟瀏覽器通信了,這樣一個雙向的加密通信通道也就開通了。對稱加密的加密效率要比非對稱高,所以大量數據的傳遞首選對稱加密。

參考鏈接:數字證書SSL

參考鏈接:HTTPS

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

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

相關文章

FreeRTOS任務狀態查詢

一.任務相關API vTaskList(),創建一個表格描述每個任務的詳細信息 char biaoge[1000]; //定義一個緩存 vTaskList(biaoge); //將表格存到這緩存中 printf("%s /r/n",biaoge); 1.uxTaskPriorityGet(&#xf…

yolov5代碼詳解--3.python代碼腳本

三、val.py val.py的主要作用是對訓練好的模型進行驗證(或評估)。具體來說,它用于在指定的驗證集上評估模型的性能,計算各項評估指標,并輸出結果。val.py通常在模型訓練完成后運行,用于驗證模型的檢測精度、…

無人機應用探索:玻纖增強復合材料的疲勞性能研究

隨著無人機技術的快速發展,輕量化已成為其結構設計的核心需求。玻纖增強復合材料憑借高強度、低密度和優異的耐環境性能,成為無人機機身、旋翼支架等關鍵部件的理想選擇。然而,無人機在服役過程中需應對復雜多變的環境:高空飛行時…

Python SQLite3 保姆級教程:從零開始學數據庫操作

Python SQLite3 保姆級教程:從零開始學數據庫操作 本文適合純新手!無需任何數據庫基礎,跟著步驟操作即可掌握 SQLite3 的核心用法。 目標:讓你像用記事本一樣輕松操作數據庫! 目錄 什么是 SQLite3?環境準…

C語言中的整數類型(short,int,long和long long)

整數是編程中最常見的一種數據類型,C語言提供了多種整數類型,包括 short、int、long 和 long long,它們的主要區別在于存儲范圍和內存占用的大小。 本節將詳細講解這些整數類型的定義、特性、使用場景以及注意事項,幫助你全面理解…

使用jcodec庫,訪問網絡視頻提取封面圖片上傳至oss

注釋部分為FFmpeg(確實方便但依賴太大,不想用) package com.zuodou.upload;import com.aliyun.oss.OSS; import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.PutObjectRequest; import com.zuodou.oss.OssProperties;…

游戲引擎學習第147天

倉庫:https://gitee.com/mrxiao_com/2d_game_3 上一集回顧 具體來說,我們通過隱式計算來解決問題,而不是像數字微分分析器那樣逐步增加數據。我們已經涵蓋了這個部分,并計劃繼續處理音量問題。不過,實際上我們現在不需要繼續處理…

使用Dockerfile打包java項目生成鏡像部署到Linux_java項目打docker鏡像的dockerfile

比起容器、鏡像來說,Dockerfile 非常普通,它就是一個純文本,里面記錄了一系列的構建指令,比如選擇基礎鏡像、拷貝文件、運行腳本等等,每個指令都會生成一個 Layer,而 Docker 順序執行這個文件里的所有步驟&…

Linux -- 磁盤結構、文件系統ext2

一、磁盤 1.磁盤的物理結構 2.磁盤的存儲結構 盤片:是機械硬盤存儲數據的主要介質,一般由鋁合金或玻璃等材料制成,表面涂有一層磁性材料。數據通過磁頭在盤片的磁性涂層上進行磁化來記錄,磁化的不同方向代表二進制的 0 和 1。盤面…

標量、向量、矩陣與張量:從維度理解數據結構的層次

在數學和計算機科學中,維度描述了數據結構的復雜性,而標量、向量、矩陣、張量則是不同維度的數據表示形式。它們的關系可以理解為從簡單到復雜的擴展,以下是詳細解析: 1. 標量(Scalar):0維數據 定義:單個數值,沒有方向,只有大小。 維度:0維(無索引)。 示例: 溫度…

點云數據處理--splat轉3dtiles

文章目錄 處理流程簡介核心功能實現數據讀取與格式轉換定義Point類數據讀取splat轉gltf 點云數據分割定義四叉樹遞歸生成3dtiles瓦片 生成tileset.json遞歸生成tileset.json計算box 主函數調用渲染 下一步工作性能優化渲染效果調優其他 源碼地址: github 處理流程簡…

OneM2M:全球性的物聯網標準-可應用于物聯網中

OneM2M 是一個全球性的物聯網(IoT)標準,旨在為物聯網設備和服務提供統一的框架和接口,以實現設備之間的互操作性、數據共享和服務集成。OneM2M 由多個國際標準化組織(如 ETSI、TIA、TTC、ARIB 等)共同制定,目標是解決物聯網領域的碎片化問題,提供一個通用的標準,支持跨…

【Python 入門基礎】—— 人工智能“超級引擎”,AI界的“瑞士軍刀”,

歡迎來到ZyyOvO的博客?,一個關于探索技術的角落,記錄學習的點滴📖,分享實用的技巧🛠?,偶爾還有一些奇思妙想💡 本文由ZyyOvO原創??,感謝支持??!請尊重原創&#x1…

Java爬蟲獲取淘寶商品詳情數據的完整指南

在電商領域,獲取商品詳情數據對于市場分析、價格監控、用戶體驗優化等場景具有重要意義。淘寶作為國內領先的電商平臺,提供了豐富的API接口供開發者使用,其中item_get和item_get_pro接口可以用來獲取商品的詳細信息。本文將詳細介紹如何使用J…

Ubuntu 下 nginx-1.24.0 源碼分析 - ngx_init_cycle 函數

nei聲明在 src/core/ngx_cycle.h ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle);實現在 src/core/ngx_cycle.c ngx_cycle_t * ngx_init_cycle(ngx_cycle_t *old_cycle) {void *rv;char **senv;ngx_uint_t i, n;ngx_log_t …

qt 操作多個sqlite文件

qt 操作多個sqlite文件 Chapter1 qt 操作多個sqlite文件1. 引入必要的頭文件2. 創建并連接多個SQLite數據庫3. 代碼說明4. 注意事項 Chapter2 qt 多線程操作sqlite多文件1. 引入必要的頭文件2. 創建數據庫操作的工作線程類3. 在主線程中創建并啟動多個工作線程4. 代碼說明5. 運…

最新版本WebContext構造函數-避坑

import org.thymeleaf.context.IWebContext; import org.thymeleaf.context.WebContext; 當你想把頁面信息全部獲取出來存到redis緩存中使用時,SpringWebContext在Spring5中報錯 SpringWebContext ctx new SpringWebContext(request, response,request.getServlet…

用Python分割并高效處理PDF大文件

在處理大型PDF文件時,將它們分解成更小、更易于管理的塊通常是有益的。這個過程稱為分區,它可以提高處理效率,并使分析或操作文檔變得更容易。在本文中,我們將討論如何使用Python和為Unstructured.io庫將PDF文件劃分為更小的部分。…

neo4j隨筆-將csv文件導入知識圖譜

目錄 導入前的準備 導入csv文件 導入nodes1.1.csv并動態為節點添加標簽 ?編輯導入relations1.1.csv并動態為關系添加標簽 結果 導入前的準備 我有兩個csv文件 nodes1.1.csv存放節點信息,用記事本打開,能正常顯示,且編碼為UTF-8,就可以…

cpu 多級緩存L1、L2、L3 與主存關系

現代 CPU 的多級緩存(L1、L2、L3)和主存(DRAM)構成了一個層次化的內存系統,旨在通過減少內存訪問延遲和提高數據訪問速度來優化計算性能。以下是對多級緩存和主存的詳細解析: 1. 緩存層次結構 現代 CPU 通…