加密和簽名的區別及應用場景

原文網址:加密和簽名的區別及應用場景_IT利刃出鞘的博客-CSDN博客

簡介

本文介紹加密和簽名的區別及應用場景。

RSA是一種非對稱加密算法,?可生成一對密鑰(私鑰和公鑰)。(RSA可以同時支持加密和簽名)。

加密和簽名的區別

加密

公鑰對明文加密,用對應的私鑰才能解密防止明文被人看到

簽名

私鑰對明文簽名,用對應的公鑰驗簽(驗證簽名),防止數據被篡改

加密流程

(友情提醒,以下場景僅為說明基本的加密流程,不符合真實應用)。

自從潘金蓮放窗簾打到西門慶的頭之后,他們就開始秘密交往,潘金蓮的丈夫武大郎總是懷疑他們倆在偷情,苦于沒有證據,在暗地里觀察。

一天,潘金蓮想寫情書撩西門慶,但是情書內容不想被武大郎知道,于是潘金蓮就告訴西門慶,采用 RSA 加密的方式來傳遞書信。

于是,西門慶就用 RSA 生成了一對密鑰(一個公鑰,一個私鑰),將公鑰的內容寫成一封信,然后寄出去送給潘金蓮。

武大郎觀察到了西門慶發出的信件,偷偷地將這封信件攔截了下來并復制了一份自己藏著,然后又將信件原路寄給潘金蓮,以免打草驚蛇,以為這樣就可以神不知鬼不覺地拿到他們之間偷情的證據。武大郎打開信封,發現里面寫的只是公鑰內容。

信封(公鑰)傳達到潘金蓮手上后,潘金蓮就開始寫情書了:“巴拉巴拉各種虎狼之詞”(明文)。寫好后裝入信封想直接寄回給西門慶,但是馬上停住了,心想,這封信如果這樣直接寄出去,中途被武大郎攔截的話,不就什么都被看到了嗎?于是潘金蓮用西門慶發過來的公鑰對自己寫的情書進行加密,生成了一份完全看不懂的信息“eSYJztu3RqGZBcRPvINyg2Hpmu…”(密文)。然后這封信可以放心的寄給西門慶了。

果然,武大郎偷偷觀察到了潘金蓮發出的信件,又進行同樣的操作:攔截,復制,原路寄回給西門慶。當武大郎打開復制回來的信件(密文)后,發現又是一堆看不懂的信息,然后嘗試用之前從西門慶那封信復制下來的公鑰進行各種 RSA 操作(用公鑰加密,解密),結果發現無論怎么操作,得到的都是看不懂的信息。單憑這封全是亂碼的信件并不能坐實潘金蓮與西門慶偷情。

信封(密文)最終傳達到西門慶手上,西門慶拿著自己的密鑰(密鑰只有自己知道,其他人都不知道),對信封進行解密,于是看到了信封原來的內容:“巴拉巴拉各種虎狼之詞,…”西門慶被撩得心花怒放。

結論

以上是使用 RSA 進行加密解密的一個虛擬場景。可見,加密后消息的傳遞是單向的,只有潘金蓮發加密消息給西門慶,西門慶沒法直接發有效的加密消息給潘金蓮(因為潘金蓮沒有私鑰)。除非雙方都各自生成自己得 RSA 公鑰私鑰,并且互相發送各自的公鑰給對方,這樣雙方就可以加密通訊了。

整個通訊流程(單向)

  1. A 明文告訴 B,我現在要發送消息給你,請使用 RSA 進行加解密(這條消息會被 C 截獲,C 知道了 AB 之間要通訊并使用 RSA 加密)。
  2. B 生成一對密鑰(公鑰,私鑰),然后將公鑰發送給 A(這個公鑰會被 C 截獲,但是 C 拿不到私鑰)。
  3. A 把要發送的消息用公鑰進行 RSA 加密,得到密文,然后發送給 B(這個密文被 C 截獲,但 C 無法知道密文所對應的明文的內容,因為 C 只截獲到公鑰,沒有私鑰,用公鑰對密文怎么操作都得不到明文)。
  4. B 拿到密文后,使用自己的私鑰解密,得到明文。

B如果想發加密的消息給A,則將以上流程反著來走一遍就行了,只不過就需要由A來生成密鑰(公鑰,私鑰)。

也就是說:

  1. A想給B發加密消息,由B來生成密鑰對(公鑰B,私鑰B),對外公布公鑰B。
  2. B想給A發加密消息,由A來生成密鑰對(公鑰A,私鑰A),對外公布公鑰A。

簽名流程

西門慶想給潘金蓮寫信,告訴她"午時去王婆家做衣服"。潘金蓮要如何才能確信這條消息真的是西門慶發給她的呢?萬一這條消息是哪個潑皮亂發的,那潘金蓮豈不是白跑一趟?

RSA 算法有一組對稱操作:用公鑰加密的密文,用私鑰解密可以得到明文;反過來,用私鑰加密的密文,用公鑰解密也可以得到明文。

潘金蓮手上是有西門慶的公鑰的(延續上一場景的公鑰),如果西門慶用私鑰對消息進行加密,潘金蓮用公鑰進行解密,如果解密后能得到明文,那就能說明:發送者確實是西門慶本人。因為除了西門慶外,沒有人擁有私鑰,能用這個公鑰解密的密文一定是密鑰的持有者(即西門慶)所發出的。

于是,西門慶寫了一條消息“午時去王婆家做衣服”(明文),然后用私鑰將這條消息加密生成了“PvINeSYJuZBcRygztu3Gpm2HRq…”(密文)一共兩條消息(一條明文一條密文)合并寫在一封信里寄給了潘金蓮。

潘金蓮收到信后,用公鑰對信件的密文部分“PvINeSYJuZBcRygztu3Gpm2HRq…”進行 RSA 解密,得到“午時去王婆家做衣服”。然后和信件前面部分里對比,發現內容一模一樣,這就確認了消息確實是西門慶發的。

說明

西門慶用私鑰對前面明文內容加密,然后追加到明文后面的這種做法,就是簽名

潘金蓮用公鑰對簽名解密,并與前面明文部分進行比對,這個做法就叫做驗簽

為什么可以這么做?不怕被武大郎中途截獲修改嗎?不怕。因為如果武大郎中途截獲了這封信,并修改成“申時去王婆家喝茶”但由于武大郎沒有私鑰,無法對明文加密,因此無法修改后面的簽名部分。當潘金蓮收到信件后,用公鑰解密簽名部分得到的內容,跟被篡改的明文內容一對比,發現不一致,就說明消息被篡改了,發送者并不是西門慶。

又或者武大郎用自己的私鑰對篡改后的明文進行加密簽名,再發送給潘金蓮,潘金蓮用手上西門慶的公鑰根本無法解密武大郎篡改后的加密部分,這種情況也可以確定發送者不是西門慶。

從這里可以看出,加密和簽名,這兩種場景是不一樣的。

  1. 加密,是為了確保通訊內容不被第三方知道。
  2. 簽名,是為了確保發送者確實是本人,并且消息沒有被篡改過。

在加密場景下,并不關心消息是否被篡改過。可能武大郎第一次截獲西門慶公鑰時,偷偷換成了自己生成的公鑰,并發給潘金蓮。潘金蓮用公鑰加密后發出的情書被武大郎截獲之后,武大郎用自己的私鑰也是可以解密出來那些虎狼之詞的(中間人攻擊),但是加密場景并沒有解決這些問題,加密僅是為了不讓私鑰持有者以外的第三方知道消息的內容。

在簽名場景下,只關心消息沒有被篡改,并不關心內容是否保密。比如“午時去王婆家做衣服”就是明文傳輸,任何人都知道這個信息。簽名場景并不負責保密內容,僅僅是為了說明這條消息是西門慶本人發出的,并且沒有被篡改過。

項目場景

公鑰之所以叫公鑰,意思是可以公開給任何人。任何人拿到一把鎖都是沒有意義,所以對鎖的定義就是不能打開鑰匙,即不能用私鑰加密,公鑰解密(切記,我說的是加密場景不能用私鑰加密,公鑰解密,加簽的場景正好相反,恰恰是私鑰加密,公鑰解密,不過我們通常會說成私鑰加簽,公鑰驗簽)。

驗簽

實際項目中,一般使用明文的哈希值來進行驗簽。

數字簽名屬于非對稱加密,非對稱加密依賴于復雜的數學運算,包括大數乘法、大數模等等,如果數據量大,那么計算數字簽名將會比較耗時。所以先將原數據進行 Hash 運算,得到的 Hash 值就叫做摘要,然后對摘要計算簽名。不同的內容計算出的摘要是不同的。

摘要最好是不可逆轉的,這樣即使第三方使用公鑰解簽出摘要,也無法根據摘要反推出原本的數據。一般使用 MD5 作為 Hash 函數,MD5 輸出的結果固定為?128 位。

流程

發送者A用私鑰對摘要計算簽名,將明文和摘要的簽名發給B。接受者 B 收到后,拿簽名部分,用 B 的公鑰解密,可以解密成功(得到摘要1),就能證明確實是 B 發的。再對郵件內容(明文)使用相同的散列函數計算出摘要2,與之前得到的摘要1進行對比,兩者一致就說明信息未被篡改。

Java和Python不同

java的小伙伴可能會這么說:服務端保存私鑰,客戶端保存公鑰:

  1. 客戶端請求接口時,用公鑰加密,服務端收到信息用私鑰解密
  2. 服務端返回的內容用私鑰加密,客戶端收到后,用公鑰解密

這樣用一對非對稱密鑰就可以完成整個交互的加密過程了,并不像你說的公鑰可以公開給任何人,我們的公鑰也是保密的,只給到指定的人或客戶端。這里的第2步,其實是把公鑰當私鑰用了,來個了公私鑰角色互換。也沒有人說這么做不可以,反正只要保證“私鑰”不泄漏就可以。

為了保證靈活性,所以java允許這么做,而python就要嚴格一點。

項目應用

電子郵件

這里不是指的落款,而是對電子郵件進行數字簽名,以保證電子郵件傳輸中的機密性、完整性和不可否認性,確保電子郵件通信各方身份的真實性。

軟件下載

在網絡上下載軟件,我們如何判斷所下載的為原軟件,而不是被篡改后的軟件呢?這里就可以利用到數字簽名,軟件作者可以對軟件加上數字簽名,用戶在軟件下載之后驗證數字簽名,看簽名是否一致,就可以識別出軟件是否遭到篡改。

SSL/TLS

SSL/TLS:客戶端在認證服務器身份是否合法時,會使用服務器證書,它就是加上了數字簽名的服務器公鑰。相對地,服務器為了對客戶端(用戶)進行認證也會使用客戶端證書。

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

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

相關文章

元宇宙3D虛擬場景制作深圳華銳視點免費試用

隨著元宇宙興起,3D線上展廳得到了越來越多的關注和應用。基于VR虛擬現實技術的元宇宙3D線上展廳在線編輯系統,更是為企業在展覽展示領域帶來了前所未有的輔助。 高效便捷: 元宇宙3D線上展廳在線編輯無需復雜的施工和搭建過程,只需…

報錯問題解決django.db.utils.OperationalError: (1049, “Unknown database ‘ mxshop‘“)

開發環境:ubuntu22.04 pycharm 功能:django連接使用mysql數據庫,各項配置看似正常 報錯: django.db.utils.OperationalError: (1049, "Unknown database mxshop") 分析檢查原因: Setting的配置文件內&…

gcd+線性dp,[藍橋杯 2018 國 B] 矩陣求和

一、題目 1、題目描述 經過重重筆試面試的考驗,小明成功進入 Macrohard 公司工作。 今天小明的任務是填滿這么一張表: 表有 �n 行 �n 列,行和列的編號都從 11 算起。 其中第 �i 行第 �j 個元素…

GRPC 錯誤碼表

code數描述OK0不是錯誤;成功返回。CANCELLED1操作通常由調用方取消。UNKNOWN2未知錯誤。例如,當從另一個地址空間接收的值屬于此地址空間中未知的錯誤空間時,可能會返回此錯誤。此外,未返回足夠錯誤信息的 API 引發的錯誤可能會轉換為此錯誤。…

ggplot去除背景

在ggplot2中去除背景,通常指的是去除圖表的灰色背景和網格線,使圖表背景變為透明或白色,以及去除或簡化坐標軸的背景。這可以通過調整主題(theme)來實現。ggplot2提供了多種主題設置,可以用來調整圖表的外觀…

Spring MVC 和 Spring Cloud Gateway不兼容性問題

當啟動SpringCloudGateway網關服務的時候,沒注意好依賴問題,出現了這個問題: Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway. 解決辦法就是:刪除SpringMVC的依賴,即下列依賴。 &…

ChatGPT/GPT4科研應用與AI繪圖及論文高效寫作

原文:ChatGPT/GPT4科研應用與AI繪圖及論文高效寫作 第一:2024年AI領域最新技術 1.OpenAI新模型-GPT-5 2.谷歌新模型-Gemini Ultra 3.Meta新模型-LLama3 4.科大訊飛-星火認知 5.百度-文心一言 6.MoonshotAI-Kimi 7.智譜AI-GLM-4 第二:…

【C++從0到王者】第四十六站:圖的深度優先與廣度優先

文章目錄 一、圖的遍歷二、廣度優先遍歷1.思想2.算法實現3.六度好友 三、深度優先遍歷1.思想2.代碼實現 四、其他問題 一、圖的遍歷 對于圖而言,我們的遍歷一般是遍歷頂點,而不是邊,因為邊的遍歷是比較簡單的,就是鄰接矩陣或者鄰接…

《匯編語言》第3版 (王爽)檢測點3.1解析

第三章 檢測點3.1 (1).在Debug中,用“d 0:0 1f”查看內存,結果如下。 下面的程序執行前,AX 0,BX 0,寫出每條匯編指令執行完后相關寄存器中的值。 mov ax,1 ;將1放入AX寄存器中,…

GC如何判定對象已死

GC判定對象已死的2種方法 引用計數法 給對象中添加一個引用計數器,每當有一個地方引用它時,計數器值就加1;當引用失效時,計數器值就減1;Java語言中沒有選用引用計數算法來管理內存,其中最主要的原因是它很…

【零基礎SRC】成為漏洞賞金獵人的第一課:加入玲瓏安全漏洞挖掘班。

我們是誰 你是否對漏洞挖掘充滿好奇?零基礎或有基礎但想更進一步?想賺取可觀的漏洞賞金讓自己有更大的自由度? 那么,不妨了解下我們《玲瓏安全團隊》。 玲瓏安全團隊,擁有多名實力講師,均就職于互聯網頭…

一線互聯網大廠中高級Android面試真題收錄,記一次字節跳動Android社招面試

在開始回答前,先簡單概括性地說說Linux現有的所有進程間IPC方式: 1. **管道:**在創建時分配一個page大小的內存,緩存區大小比較有限; 2. 消息隊列:信息復制兩次,額外的CPU消耗;不合…

指針與malloc動態內存申請,堆和棧的差異

定義了兩個函數print_stack()和print_malloc(),分別演示了兩種不同的內存分配方式:棧內存和堆內存。然后在main()函數中調用這兩個函數,并將它們返回的指針打印出來。 由于print_stack()中的數組c是在棧上分配的,當函數返回后&…

【哈希表算法題記錄】242.有效的字母異位詞

題目鏈接 這題思路比較簡單,考慮到26個小寫字母的ASCII是連續的,那么我們可以設置一個size為26的哈希表record,然后記錄26個字母分別在string中出現的次數。例如,record[0]記錄的是字母‘a’出現的次數。于是我們主要就是要獲得每…

Python裝飾器的使用詳解

目錄 1、函數裝飾器 1.1、閉包函數 1.2、裝飾器語法 1.3、裝飾帶參數的函數 1.4、被裝飾函數的身份問題 1.4.1、解決被裝飾函數的身份問題 1.5、裝飾器本身攜帶/傳參數 1.6、嵌套多個裝飾器 2、類裝飾器 裝飾器顧名思義作為一個裝飾的作用,本身不改變被裝…

Acwing 周賽135 解題報告 | 珂學家 | 反悔堆貪心

前言 整體評價 VP了這場比賽, T3挺有意思的,反悔貪心其實蠻套路的。 A. 買蘋果 思路: 簽到 n, x list(map(int, input().split())) print (n // x)B. 牛群 思路: 分類討論 from collections import Counters input() cnt Counter(s)lists sorte…

WPF 【十月的寒流】學習筆記(2):MVVM中是怎么實現通知的

文章目錄 前言相關鏈接代碼倉庫項目配置代碼初始代碼ViewPersonViewModel 嘗試老辦法通知解決方案ObservableCollectionBindingListICollectionView 總結 前言 我們這次詳細了解一下列表通知的底層是怎么實現的 相關鏈接 十月的寒流 MVVM實戰技巧之:可被觀測的集合…

2024年【A特種設備相關管理(電梯)】考試總結及A特種設備相關管理(電梯)證考試

題庫來源:安全生產模擬考試一點通公眾號小程序 2024年A特種設備相關管理(電梯)考試總結為正在備考A特種設備相關管理(電梯)操作證的學員準備的理論考試專題,每個月更新的A特種設備相關管理(電梯…

KVM部署Windriver Linux操作系統

安裝前準備 創建密碼配置文件&#xff0c;否則虛機啟動后無法登錄 cd /var/lib/libvirt/images/disks/windriver/ docker run -ti --rm quay.io/coreos/mkpasswd --methodyescrypt 123456 >password_hash.txt cat <<-ENDOF> sample.bu variant: fcos version: 1.4…

面試 Java 基礎八股文十問十答第十二期

面試 Java 基礎八股文十問十答第十二期 作者&#xff1a;程序員小白條&#xff0c;個人博客 相信看了本文后&#xff0c;對你的面試是有一定幫助的&#xff01;關注專欄后就能收到持續更新&#xff01; ?點贊?收藏?不迷路&#xff01;? 1&#xff09;創建一個對象用什么關…