① 使用非對稱加密及解密的過程詳解
前面我們知道對稱加密是對一份文件進行加密,且對應的只有一個密碼?例如:A有一份文件,她使用對稱加密演算法加密後希望發給B,那麼密碼肯定也要一起交給B!這中間就會出現安全隱患,如果密碼被第三方L嗅探到並截取,那麼加密的文件就赤裸裸的出現在L的面前。
如果A有很多文件需要加密並發送給很多人!那麼就會生成很多的密鑰,這么多的密鑰保管就成了一個很棘手的問題,況且還要把密鑰發給不同的人!這無疑增添了很多的風險!
如何能改善這種安全性不高的加密演算法,數學家們發現了另一種加密方式。稱之為《非對稱加密》asymmetric encryption。非對稱加密演算法需要兩個密鑰【公開密鑰】(publickey)和【私有密鑰】(privatekey)。下面簡稱【公匙】、【私匙】
【公鑰】與【私鑰】是一對,如果使用公開密匙對數據進行加密,那麼只有對應的私有密匙才能解密;相反,如果使用私有密匙對數據進行加密,那麼只有對應的公開密匙進行解密。因加密解密使用的是兩種不同的密匙,所以這種演算法稱之為【非對稱加密演算法】。
在使用非對稱加密前,A和B先各自生成一對公匙和私匙,然後把各自的公匙交給對方,並把自己的私匙妥善保管!如圖所示:
在A給B發送信息之前,首先使用B發給A的公匙對信息進行加密處理,然後發送給B,B在收到密文之後,使用自己的私匙解密;B在給A回復信息時,先使用A發來的公匙對回復信息加密,然後發出,A收到密文後使用自己的私匙解密即可!如圖所示:
② 密碼學中的對稱加密和非對稱加密
一、對稱加密
概念:加密和解密用同一對密鑰的加密技術,叫對稱加密。
加密方式:DES、3DES、AES,安全性依次從低到高。
示意圖:
二、非對稱加密,也稱公開密鑰
概念:加密和解密用 不同的密鑰 的加密技術,叫非對稱加密。
典型的加密方式:RSA演算法
加密步驟:
三、兩種方式各自的缺點:
四銷迅模、混合密碼系統
概念:將對稱密碼和公鑰密碼的優勢相結合的方法
優點:解決了公鑰密碼速度慢的問題;通過公鑰密碼解決昌彎了對稱密碼的密鑰配送問題。
應用:網路上的密碼通信所用的SSL/TSL都運用了混合密碼系統。
會話密鑰的生成:
加密步驟:
最終,發出去的消息包括兩部分:
解密步驟:
示意圖:
1. 為什麼加密消息主體要用對稱加密?
因為消息主體信息量大,發送頻繁,而對稱加密速度快,效率高。
2. 為什麼加密會話密鑰要用非對稱加密?
因為會話密鑰一般比較短,而且通常只需要發送一次即可,所虧緩以對速度要求不高,但對安全性要求很高,非對稱加密滿足這個要求。
③ 加密那些事--非對稱加密詳解
「非對稱加密也叫公鑰密碼:使用公鑰 加密 ,使用私鑰解密」
在對稱密碼中,由於加密和解密的密鑰是相同的,因此必須向接收者配送密鑰。用於解密的密鑰必須被配送給接收者,這一問題稱為密鑰配送問題。如果使用非對稱加密,則無需向接收者配送用於解密的密鑰,這樣就解決了密鑰配送的問題。
非對稱加密中,密鑰分為加密密鑰和解密密鑰兩種。發送者用加密密鑰對消息進行加密,接收者用解密密鑰對密文進行解密。需理解公鑰密碼,清楚地分加密密鑰和解密密鑰是非常重要的。加密密鑰是發送者加密時使用的,而解密密鑰則是接收者解密時使用的。
加密密鑰和解密密鑰的區別:
a.發送者只需要加密密鑰
b.接收者只需要解密密鑰
c.解密密鑰不可以被竊聽者獲取
d.加密密鑰被竊聽者獲取也沒關系
也就是說,解密密鑰從一開始就是由接收者自己保管的,因此只要將加密密鑰發給發送者就可以解決密鑰配送問題了,而根本不需要配送解密密鑰。
非對稱加密中,加密密鑰一般是公開的。真是由於加密密鑰可以任意公開,因此該密鑰被稱為公鑰(pulickey)。相對地解密密鑰是絕對不能公開的,這個密鑰只能由你自己來使用,因此稱為私鑰(privatekey)****。私鑰不可以被別人知道,也不可以將它發送給別人。
公鑰和私鑰是"一一對應的",一對公鑰和私鑰統稱為密鑰對(keypair)。由公鑰進行加密的密文,必須使用與該公鑰配對的私鑰才能解密。密鑰對中的兩個密鑰之間具有非常密切的的關系(數學上的關系)。因此公鑰和私鑰不能分別單獨生成。
非對稱加密通訊流程
假設A要給B發一條信息,A是發送者,B是接收者,竊聽者C可以竊聽他們之間的通訊內容。
1.B生成一個包含公鑰和私鑰的密鑰對
私鑰由B自行妥善保管
2.B將自己的公鑰發送給A
B的公鑰被C截獲也沒關系。將公鑰發給A,表示B請A用這個公鑰對消息進行加密並發送給他。
3.A用B的公鑰對消息進行加密
加密後的消息只有B的私鑰才能夠解密。
雖然A擁有B的公鑰,但用B的公鑰是無法對密文進行解密的。
4.A將密文發送給B
密文被C截獲也沒關系,C可能擁有B的公鑰,但是B的公鑰是無法進行解密的。
5.B用自己的私鑰對密文進行解密。
參考下圖
RSA是一種非對稱加密演算法,它的名字由三位開發者。即RonRivest、AdiShamir和LeonardAdleman 的姓氏的首字母組成的(Rivest-Shamir-Leonard)
RSA的加密工程可以用下來公式來表達,如下。
也就是說,RSA的密文是對代表明文的數字的E次方求modN的結果。換句話說,就是將明文自己做E次乘法,然後將其結果除以N求余數,這個余數就是密文。
RSA的加密是求明文的E次方modN,因此只要知道E和N這兩個數,任何人都可以完成加密的運算。所以說E和N是RSA加密的密鑰。也就是說E和N的組合就是公鑰
有一個很容易引起誤解的地方需要大家注意一一E和N這兩個數並不是密鑰對(公鑰和私鑰的密鑰對)。E和N兩個數才組成了一個公鑰,因此我們一般會寫成 「公鑰是(E,N)」 或者 「公鑰是{E, N}" 這樣的形式,將E和N用括弧括起來。
1.3.2 RSA解密
RSA的解密和加密一樣簡單,可以用下面的公式來表達:
也就是說,對表示密文的數字的D次方求modN就可以得到明文。換句話說,將密文自己做D次乘法,在對其結果除以N求余數,就可以得到明文 。
這里所使用的數字N和加密時使用的數字N是相同的。數D和數N組合起來就是RSA的解密密鑰,因此D和N的組合就是私鑰。只有知道D和N兩個數的人才能夠完成解密的運算。
大家應該已經注意到,在RSA中,加密和解密的形式是相同的。加密是求 "E次方的mod N」,而解密則是求 "D次方的modN」,這真是太美妙了。
當然,D也並不是隨便什麼數都可以的,作為解密密鑰的D,和數字E有著相當緊密的聯系。否則,用E加密的結果可以用D來解密這樣的機制是無法實現的。
順便說一句, D是解密〈Decryption)的首字母,N是數字(Number)的首字母 。
RSA加密和解密
聲明該文章僅做個人學習使用,無任何商業用途。
原文鏈接:https://blog.csdn.net/atlansi/article/details/111144109
④ 科普知識—對稱加密和非對稱加密
區塊鏈技術中廣泛應用到非對稱加密技術,非對稱加密技術保證了信息在傳輸過程中的安全性,非對稱加密技術是在對稱加密技術上發展來的。本文主要闡述對稱加密技術和非對稱加密技術的概念和特點,並舉例說明。
對稱加密就是用相同的密鑰對原文進行加密和解密,通信雙方共用一個密鑰。
基於對稱加密演算法傳輸信息「ABC」的步驟。
(1)發送方通過密鑰對原文"ABC"進行加密,得到密文"abc",並發送給接收方。密鑰為將字母轉換為對應的小寫字母,大寫A轉換為小寫a,「BC」同理轉換為「bc」。
(2)發送方將密鑰發送給接收方。
(3)接收方通過密鑰對密文進行解密,反推出原文「ABC」。
對稱加密演算法的缺點:無法確保密鑰被安全傳遞。
密鑰就是傳說中的「密碼本」。密文在傳輸過程中是可能被第三方截獲的,關鍵就落在「密碼本」上,如果密碼本也被第三方截獲,則傳輸的密碼信息將被第三方破獲,所以經常看到電影、電視劇的情節中通過各種手段保護密碼本的安全送達。
非對稱加密技術很好的解決了對稱加密技術密鑰無法安全傳遞的問題。
非對稱加密有兩個密鑰,即公鑰(Public Key)和私鑰(Private Key),對數據進行加密和解密使用不同的密鑰。使用公鑰進行加密,使用私鑰進行解密。
非對稱加密演算法中私鑰就是一個隨機數,基於不同的演算法生成不同的隨機數,如:SHA256演算法生成的是256位的隨機數,通常是調用操作系統的隨機數生成器來生成私鑰,私鑰通過一定的加密演算法推導出公鑰,私鑰到公鑰的推導過程是單向的,也就是說公鑰無法反推導出私鑰。
基於非對稱加密演算法傳輸信息「hello world」的步驟。
(1)發送方使用接收方的公鑰對待發送信息「hello world」加密,此處需注意:信息發送給誰,使用誰的公鑰進行加密,公鑰是可以公開的,類似於銀行卡賬戶。
(2)發送方將加密後的密文通過網路發送給接收方。
(3)接收方接收到密文後,使用自己的私鑰對密文進行解密,從而獲得傳輸信息「hello world」。
採用非對稱加密演算法即使第三方在網路上截獲到密文,但其無法獲得接收方的私鑰,也就無法對密文進行解密,作為接收方務必保證自己私鑰的安全,所以非對稱加密技術解決了密鑰傳輸過程的安全性問題。
本文主要闡述對稱加密技術和非對稱加密技術的概念和特點,並舉例說明。對稱加密是通信雙方共用密鑰,無法保證密鑰的安全傳遞;非對稱加密使用接收方的公鑰對數據加密,接收方使用自己的私鑰解密,即使信息被第三方截獲,由於沒有接收方的私鑰,也無法破解密文。
⑤ 非對稱加密演算法
非對稱加密演算法就是用兩個密鑰加密解密的演算法。
加密的傳輸過程分為兩部分,一部分為 身份認證 ,用戶鑒別這個用戶的真偽;另外一部分為 數據加密 ,用於數據的保密。這兩部分功能都需要用到非對稱加密技術。
首先是身份認證,通訊的數據可以這樣進行處理,將用戶的信息(用戶名、密碼等)用該用戶的私鑰進行加密,然後再進行傳輸,而在伺服器端會保存此用戶的公鑰,用此用戶的公鑰對傳過來的信息進行解密,就可以得到正確的明文,這樣就完成了一次安全的網路通訊。
通訊過程的示例如下圖所示,Alice用自己的私鑰對明文進行加密後傳輸到伺服器,伺服器上的用戶(例如Bob)擁有很多用戶的公鑰,因此使用Alice的公鑰對密文進行解密,如果密鑰正確的話,就可以解密出明文,也就完成了對Alice的身份認證。
然後是數據加密,數據加密和數據認證正好相反,使用接收方的公鑰對數據進行加密,傳輸的過程中,即使數據被黑客截獲,也無法使用這些密文,接收方收到密文後,用自己的私鑰對密文進行解密,從而完成了一次數據的加密傳輸。
通訊過程的示例如下圖所示,Alice需要發給Bob一段加密的信息,因此Alice就用Bob的公鑰對明文進行加密後傳輸給Bob,Bob收到信息後,使用自己的私鑰對密文進行解密,就可以解密出明文,也就完成了對Alice的發來密文的解密過程。
公鑰用於加密、私鑰用於解密,這才能起到加密作用
因為公鑰是公開的,很多人可以持有公鑰。若用私鑰加密,那所有持有公鑰的人都可以進行解密,這是不安全的!
若用公鑰加密,那隻能由私鑰解密,而私鑰是私有不公開的,只能由特定的私鑰持有人解密,保證的數據的安全性。
但是有另一種密鑰使用場景- 簽名和驗簽 :
私鑰用於簽名、公鑰用於驗簽
簽名和加密作用不同,簽名並不是為了保密,而是為了保證這個簽名是由特定的某個人簽名的,而不是被其它人偽造的簽名,所以私鑰的私有性就適合用在簽名用途上。
私鑰簽名後,只能由對應的公鑰解密,公鑰又是公開的(很多人可持有),所以這些人拿著公鑰來解密,解密成功後就能判斷出是持有私鑰的人做的簽名,驗證了身份合法性。
所以我理解,簽名和驗證簽就是身份認證的過程。