安全與加密常識(3)什么是數字簽名和數字證書

文章目錄

    • 數字簽名
      • 工作原理
      • 關鍵特點
      • 應用實例
    • 數字證書
    • 數字證書和數字簽名趣味實例

數字簽名

數字簽名是一種通過密碼運算生成的數據,用于驗證信息的完整性和來源,確保數據在傳輸過程中未被篡改,同時提供發送者的身份認證和防止抵賴的功能。它基于非對稱密碼加密系統,使用發送者的私鑰對數據進行加密,接收方使用發送者的公鑰進行解密和驗證,以此來確認信息的完整性和來源。

數字簽名的基本原理包括使用哈希函數將原始數據轉換成報文摘要,然后用發送者的私鑰對摘要進行加密,形成數字簽名。接收方收到簽名和原始數據后,使用發送者的公鑰對簽名進行解密,得到哈希摘要。通過比較這個摘要和用相同哈希函數對原始數據重新計算的摘要,可以驗證數據的完整性和來源

數字簽名常用的算法包括RSA和ECC(橢圓曲線密碼學),這些算法提供了足夠的安全性,使得第三方難以偽造簽名或篡改數據。數字簽名與數據加密在原理與應用上的不同之處在于,加密主要關注數據的保密性,防止信息被未經授權的第三方獲取,而數字簽名則側重于數據的完整性和發送者身份的驗證。

工作原理

數字簽名通常利用公鑰加密技術,包括以下步驟:

  1. 創建簽名
    • 發送方使用自己的私鑰對消息或文件的散列(哈希)值進行加密。這個加密后的散列值即為數字簽名。
  2. 附加簽名
    • 簽名通常會附加在消息或文件本身,或以某種形式發送給接收方。
  3. 驗證簽名
    • 接收方收到消息后,會使用相同的散列算法對消息生成散列值,并用發送方的公鑰對數字簽名進行解密。
    • 如果解密后的散列值與接收方自行計算的散列值匹配,說明消息未被篡改且簽名有效。

在這里插入圖片描述
這里的核心關鍵點在于驗證方持有的公鑰是簽名方給的,簽名方的私鑰不能泄露。保證以上兩點,數字簽名才能發揮作用。

假設第三方用自己的私鑰給驗證方發送偽造消息,驗證方使用簽名方的公鑰肯定是無法解密的。

關鍵特點

  1. 身份驗證
    • 數字簽名幫助接收方確認消息或文件確實來自聲稱的發送方。
  2. 數據完整性
    • 確保數據在傳輸或存儲過程中未被更改。任何對數據的微小更改都會在驗證簽名時被檢測到。
  3. 不可否認性
    • 發送方在對信息進行數字簽名后,不能否認之前進行過的通信或交易,這對法律和商業交易尤為重要。

應用實例

  • 電子郵件安全:通過數字簽名,電子郵件的接收者可以驗證發件人的身份和郵件內容的完整性。
  • 軟件分發:開發者對軟件包進行簽名,用戶可以驗證軟件包是否未被篡改且確實來自于可信的源。
  • 文件和文檔簽名:數字簽名被廣泛用于法律文件和其他重要文件,確保文件的內容和簽名者的身份得到認證。

數字簽名是加密的反向應用,加密是利用私鑰來解密數據,而簽名是利用公鑰來解密數據驗證簽名。

數字證書

上面在介紹數字簽名時提到,接收方需要保證拿到的公鑰是發送方的。接收方如何安全的拿到公鑰而不被第三方篡改?自然的聯想到對公鑰進行簽名,而簽名又需要一對新的公私鑰,陷入了無限套娃。套娃自然就交給權威機構(CA)來終止,由它們使用私鑰來對申請者提交的公鑰和身份信息進行簽名,簽名生成的東西美其名曰數字證書,頒發給發送方。發送方以后在發送數據時,順帶亮出自己的數字證書(就是公鑰),接收方用權威機構的公鑰驗證下,能解,證明這個就是發送方的公鑰。

權威機構也分一級二級三級等套娃,頂級機構頒發的證書叫根證書,不再需要別人證明自己。

數字證書是一種用于確認數字實體身份的電子文件。它通常包含公鑰和證書持有者的身份信息(如姓名和電子郵件地址),以及簽發機構(CA)的簽名,該簽名用于驗證證書的真實性。

數字證書的格式普遍采用的是X.509V3國際標準,一個標準的X.509數字證書包含以下一些內容:

  1. 證書的版本信息;

  2. 證書的序列號,每個證書都有一個唯一的證書序列號;

  3. 證書所使用的簽名算法;

  4. 證書的發行機構名稱,命名規則一般采用X.500格式;

  5. 證書的有效期,通用的證書一般采用UTC時間格式;

  6. 證書所有人的名稱,命名規則一般采用X.500格式;

  7. 證書所有人的公開密鑰;

  8. 證書發行者對證書的簽名。

數字證書和數字簽名趣味實例

下面以漫畫的形式介紹數字證書的由來,翻譯自

在這里插入圖片描述

鮑勃有兩把鑰匙,一把是公鑰,另一把是私鑰。鮑勃的公鑰可以給任何人,但是私鑰只能自己保存。鮑勃的兩個密鑰中的任何一個都可以加密數據,另一個密鑰可以解密該數據。

在這里插入圖片描述

鮑勃把公鑰送給他的朋友們----帕蒂、道格、蘇珊----每人一把。

在這里插入圖片描述

蘇珊要給鮑勃寫一封保密的信。她寫完后用鮑勃的公鑰加密,就可以達到保密的效果。盡管帕蒂和道格可能可以拿到蘇珊加密后的信且擁有鮑勃的公鑰,但是由于他們沒有鮑勃的私鑰,因此無法解密。

在這里插入圖片描述

鮑勃收信后,用私鑰解密,就看到了信件內容。這里要強調的是,只要鮑勃的私鑰不泄露,這封信就是安全的,即使落在別人手里,也無法解密。

在這里插入圖片描述

鮑勃給蘇珊回信,決定采用"數字簽名"。他寫完后先用Hash函數,生成信件的摘要(digest)。

在這里插入圖片描述

然后,鮑勃使用私鑰,對這個摘要加密,生成"數字簽名"(signature)。

在這里插入圖片描述

鮑勃將這個簽名,附在信件下面,一起發給蘇珊。

在這里插入圖片描述

蘇珊收信后,取下數字簽名,用鮑勃的公鑰解密,得到信件的摘要。由此證明,這封信確實是鮑勃發出的。

在這里插入圖片描述

蘇珊再對信件本身使用Hash函數,將得到的結果,與上一步得到的摘要進行對比。如果兩者一致,就證明這封信未被修改過。

在這里插入圖片描述

復雜的情況出現了。道格想欺騙蘇珊,他偷偷使用了蘇珊的電腦,用自己的公鑰換走了鮑勃的公鑰。此時,蘇珊實際擁有的是道格的公鑰,但是還以為這是鮑勃的公鑰。因此,道格就可以冒充鮑勃,用自己的私鑰做成"數字簽名",寫信給蘇珊,讓蘇珊用假的鮑勃公鑰進行解密。

在這里插入圖片描述

后來,蘇珊感覺不對勁,發現自己無法確定公鑰是否真的屬于鮑勃。她想到了一個辦法,要求鮑勃去找"證書中心"(certificate authority,簡稱CA),為公鑰做認證。證書中心用自己的私鑰,對鮑勃的公鑰和一些相關信息一起加密,生成"數字證書"(Digital Certificate)。

在這里插入圖片描述

鮑勃拿到數字證書以后,就可以放心了。以后再給蘇珊寫信,只要在簽名的同時,再附上數字證書就行了。

在這里插入圖片描述

蘇珊收信后,用CA的公鑰解開數字證書,就可以拿到鮑勃真實的公鑰了,然后就能證明"數字簽名"是否真的是鮑勃簽的。

在這里插入圖片描述

下面,我們看一個應用"數字證書"的實例:https協議。這個協議主要用于網頁加密。

在這里插入圖片描述

首先,客戶端向服務器發出加密請求。

在這里插入圖片描述

服務器用自己的私鑰加密網頁以后,連同本身的數字證書,一起發送給客戶端。

客戶端(瀏覽器)的"證書管理器",有"受信任的根證書頒發機構"列表。客戶端會根據這張列表,查看解開數字證書的公鑰是否在列表之內。

在這里插入圖片描述

如果數字證書記載的網址,與你正在瀏覽的網址不一致,就說明這張證書可能被冒用,瀏覽器會發出警告。

在這里插入圖片描述

如果這張數字證書不是由受信任的機構頒發的,瀏覽器會發出另一種警告。

在這里插入圖片描述

如果數字證書是可靠的,客戶端就可以使用證書中的服務器公鑰,對信息進行加密,然后與服務器交換加密信息。

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

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

相關文章

Qt: QPushButton 按鈕實現 上圖標下文字

效果如下: 實現有如下幾種方式: 1. 使用 QPushButton 設置 setStyleSheet 例: ui->recorder->setStyleSheet("QPushButton{"\"border: 1px solid #00d2ff; "\"min-height: 60px; "\"col…

python多繼承的3C算法

python多繼承的3C算法 有很多地方都說python多繼承的繼承順序,是按照深度遍歷的方式,其實python多繼承順序的算法,不是嚴格意義上的深度遍歷,而是基于深度遍歷基礎上優化出一種叫3C算法 python多繼承的深度遍歷 class C:def ru…

MySQL高級-MVCC-原理分析(RR級別)

文章目錄 1、RR隔離級別下,僅在事務中第一次執行快照讀時生成ReadView,后續復用該ReadView2、總結 1、RR隔離級別下,僅在事務中第一次執行快照讀時生成ReadView,后續復用該ReadView 而RR 是可重復讀,在一個事務中&…

Django 配置靜態文件

1,DebugTrue 調試模式 Test/Test/settings.py DEBUG True...STATICFILES_DIRS [os.path.join(BASE_DIR, static),] STATIC_URL /static/ 1.1 創建靜態文件 Test/static/6/images/Sni1.png 1.2 添加視圖函數 Test/app6/views.py from django.shortcuts impor…

uniapp,uni-fab組件拖動屬性,替代方案

文章目錄 1. 背景2. 替代方案2.1 方案一2.2 方案二 參考 1. 背景 最近基于uniapp開發一款設備參數調試的APP軟件,其中有使用到懸浮按鈕,快速開發階段,為了能盡快上線,直接使用了uni-ui的擴展組件uni-fab,參考【1】&am…

C++ 設計模式之迭代器模式

C 設計模式之迭代器模式 簡介 1、迭代器模式(Iterator)是一種行為型設計模式,它允許我們順序訪問一個聚合對象中的各個元素,而又不暴露該對象的內部表示。迭代器模式提供了一種方法來遍歷容器(容器對象,如…

Configure C/C++ debugging

Configure C/C debugging launch.json 文件用于在 Visual Studio Code 中配置調試器。 Visual Studio Code 會生成一個 launch.json (位于項目的 .vscode 文件夾下),其中幾乎包含了所有必需的信息。要開始調試,您需要填寫 program 字段,指定要調試的可執行文件的路徑。這必須…

如何通過流式渲染提升用戶體驗?

什么是流式渲染? 流式渲染的核心理念是將 HTML 文檔分割成小塊(chunk),并逐步地發送給客戶端,而非等待整個頁面完整生成后再進行傳輸。這種方式能夠極大地提升用戶的初始加載體驗,特別是在網絡條件不佳或者…

【從零開始學架構 架構基礎】四 架構設計的復雜度來源:可擴展性復雜度來源

架構設計的復雜度來源其實就是架構設計要解決的問題,主要有如下幾個:高性能、高可用、可擴展、低成本、安全、規模。復雜度的關鍵,就是新舊技術之間不是完全的替代關系,有交叉,有各自的特點,所以才需要具體…

新書速覽|Linux C與C++一線開發實踐

《Linux C與C一線開發實踐》 本書內容 Linux C/C編程在Linux應用程序開發中占有重要的地位,掌握這項技術將在就業競爭中立于不敗之地。《Linux C與C一線開發實踐》內容針對初中級讀者,貼近軟件公司一線開發實踐。全書厚達620多頁,知識點豐富…

Java中String和StringBuilder的區別

當然可以,我們可以通過面試問答的形式來探討String和StringBuilder的區別。 面試官:請解釋一下Java中String和StringBuilder的區別。 面試回答: 1. 不可變性(Immutability) String:String對象是不可變的…

微信小程序添加點擊事件

在微信小程序中&#xff0c;給<view>組件添加點擊事件非常直接&#xff0c;你可以使用bindtap屬性來綁定一個事件處理函數。下面是添加點擊事件的基本步驟和示例代碼&#xff1a; 步驟&#xff1a; 在WXML文件中&#xff1a;給需要添加點擊事件的<view>標簽添加bi…

第六周周報

摘要 本周重點跟著網課學習了pytorch框架下張量的各種常用操作API&#xff0c;為后面跑模型做準備&#xff0c;因為看的視頻比較偏向原理&#xff0c;現在對張量有了一個新的認識。其次在時序的研究上&#xff0c;最近我在看圖神經網絡跟時序結合的方向&#xff0c;所以本周學…

Qt自定義類型

概述 在使用Qt創建用戶界面時&#xff0c;特別是那些具有特殊控件和特性的界面時&#xff0c;開發人員有時需要創建新的數據類型&#xff0c;以便與Qt現有的值類型集一起使用或代替它們。 QSize、QColor和QString等標準類型都可以存儲在QVariant對象中&#xff0c;作為基于qo…

51單片機第6步_stdlib.h庫函數

本章重點學習stdlib.h庫函數。 #include <REG51.h> //包含頭文件REG51.h,使能51內部寄存器; #include <stdlib.h> //float atof (char *s1); //參數s1字符串可包含正負號,小數點或E(e)來表示指數部分,如123.456或123e-2; //若首字符是非數據字符,或為正負號…

es6語法復習一

es6語法 1.var 變量提升 2.let 不存在變量提升&#xff0c;只能定義一次 3.const 先定義再使用&#xff0c;定義好來不能修改 4.解構賦值 [a,b,c][1,2,3],{a,b,c}{a:1,b:2,c:3} 5.模版字符串 let aaa; ${a} is ok 6.對象簡化寫法 const school{ name, change, improve(){ cons…

力扣2438.二的冪數組中查詢范圍內的乘積

力扣2438.二的冪數組中查詢范圍內的乘積 lowbit求所有2的冪 accumulate函數(begin,end,start,way)求和/積的方式求積并取模 const int N 1e9 7;class Solution {public:int lowbit(int x){return x & -x;}vector<int> productQueries(int n, vector<vector&l…

[NSSCTF]-Reverse:[SWPUCTF 2021 新生賽]easyapp(安卓逆向,異或)

無殼 把后綴名改為zip&#xff0c;找到apk 查看jadx 這里調用了MainActivity的lambda$onCreate$0$MainActivity&#xff0c;然后又調用了Encoder進行異或。 exp&#xff1a; result棿棢棢棲棥棷棊棐棁棚棨棨棵棢棌 key987654321 flag for i in range(len(result)):flagchr(…

HarmonyOS開發:應用完整性校驗

簡介 為了確保應用的完整性和來源可靠&#xff0c;OpenHarmony需要對應用進行簽名和驗簽。 應用開發階段&#xff1a; 開發者完成開發并生成安裝包后&#xff0c;需要開發者對安裝包進行簽名&#xff0c;以證明安裝包發布到設備的過程中沒有被篡改。OpenHarmony的應用完整性校…

Foxit Reader與PDF交互性:探索高級功能

引言 PDF&#xff08;Portable Document Format&#xff09;文件格式以其跨平臺的一致性和豐富的多媒體支持而廣受歡迎。Foxit Reader作為一款功能全面的PDF閱讀器&#xff0c;不僅提供了基本的查看和導航功能&#xff0c;還支持PDF文件中的多種交互式元素。本文將深入探討Fox…