導航:首頁 > 文檔加密 > 非對稱加密中使用什麼加密

非對稱加密中使用什麼加密

發布時間:2023-01-19 07:14:50

A. 科普知識—對稱加密和非對稱加密

區塊鏈技術中廣泛應用到非對稱加密技術,非對稱加密技術保證了信息在傳輸過程中的安全性,非對稱加密技術是在對稱加密技術上發展來的。本文主要闡述對稱加密技術和非對稱加密技術的概念和特點,並舉例說明。

對稱加密就是用相同的密鑰對原文進行加密和解密,通信雙方共用一個密鑰。

基於對稱加密演算法傳輸信息「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」。

採用非對稱加密演算法即使第三方在網路上截獲到密文,但其無法獲得接收方的私鑰,也就無法對密文進行解密,作為接收方務必保證自己私鑰的安全,所以非對稱加密技術解決了密鑰傳輸過程的安全性問題。

本文主要闡述對稱加密技術和非對稱加密技術的概念和特點,並舉例說明。對稱加密是通信雙方共用密鑰,無法保證密鑰的安全傳遞;非對稱加密使用接收方的公鑰對數據加密,接收方使用自己的私鑰解密,即使信息被第三方截獲,由於沒有接收方的私鑰,也無法破解密文。

B. 加密那些事--非對稱加密詳解

「非對稱加密也叫公鑰密碼:使用公鑰 加密 ,使用私鑰解密」

在對稱密碼中,由於加密和解密的密鑰是相同的,因此必須向接收者配送密鑰。用於解密的密鑰必須被配送給接收者,這一問題稱為密鑰配送問題。如果使用非對稱加密,則無需向接收者配送用於解密的密鑰,這樣就解決了密鑰配送的問題。

 非對稱加密中,密鑰分為加密密鑰和解密密鑰兩種。發送者用加密密鑰對消息進行加密,接收者用解密密鑰對密文進行解密。需理解公鑰密碼,清楚地分加密密鑰和解密密鑰是非常重要的。加密密鑰是發送者加密時使用的,而解密密鑰則是接收者解密時使用的。

加密密鑰和解密密鑰的區別:

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

C. 非對稱加密演算法

非對稱加密演算法就是用兩個密鑰加密解密的演算法。

加密的傳輸過程分為兩部分,一部分為 身份認證 ,用戶鑒別這個用戶的真偽;另外一部分為 數據加密 ,用於數據的保密。這兩部分功能都需要用到非對稱加密技術。

首先是身份認證,通訊的數據可以這樣進行處理,將用戶的信息(用戶名、密碼等)用該用戶的私鑰進行加密,然後再進行傳輸,而在伺服器端會保存此用戶的公鑰,用此用戶的公鑰對傳過來的信息進行解密,就可以得到正確的明文,這樣就完成了一次安全的網路通訊。

通訊過程的示例如下圖所示,Alice用自己的私鑰對明文進行加密後傳輸到伺服器,伺服器上的用戶(例如Bob)擁有很多用戶的公鑰,因此使用Alice的公鑰對密文進行解密,如果密鑰正確的話,就可以解密出明文,也就完成了對Alice的身份認證。

然後是數據加密,數據加密和數據認證正好相反,使用接收方的公鑰對數據進行加密,傳輸的過程中,即使數據被黑客截獲,也無法使用這些密文,接收方收到密文後,用自己的私鑰對密文進行解密,從而完成了一次數據的加密傳輸。

通訊過程的示例如下圖所示,Alice需要發給Bob一段加密的信息,因此Alice就用Bob的公鑰對明文進行加密後傳輸給Bob,Bob收到信息後,使用自己的私鑰對密文進行解密,就可以解密出明文,也就完成了對Alice的發來密文的解密過程。

公鑰用於加密、私鑰用於解密,這才能起到加密作用

因為公鑰是公開的,很多人可以持有公鑰。若用私鑰加密,那所有持有公鑰的人都可以進行解密,這是不安全的!

若用公鑰加密,那隻能由私鑰解密,而私鑰是私有不公開的,只能由特定的私鑰持有人解密,保證的數據的安全性。

但是有另一種密鑰使用場景- 簽名和驗簽 :

私鑰用於簽名、公鑰用於驗簽

簽名和加密作用不同,簽名並不是為了保密,而是為了保證這個簽名是由特定的某個人簽名的,而不是被其它人偽造的簽名,所以私鑰的私有性就適合用在簽名用途上。

私鑰簽名後,只能由對應的公鑰解密,公鑰又是公開的(很多人可持有),所以這些人拿著公鑰來解密,解密成功後就能判斷出是持有私鑰的人做的簽名,驗證了身份合法性。

所以我理解,簽名和驗證簽就是身份認證的過程。

D. 什麼是非對稱加密

MD5
\PGP這類的都屬於非對稱加密.就是加密簡單,解密(破解)困難.

E. 對稱密碼體質加密使用什麼的密鑰,非對稱密碼體質的加密使用什麼的密鑰

1.對稱密鑰密碼:對稱密鑰加密又稱私鑰加密,即信息的發送方和接收方用一個密鑰去加密和解密數據。它的最大優勢是加/解密速度快,
適合於對大數據量進行加密,但密鑰管理困難。
2.非對稱密鑰密碼:非對稱密鑰加密又稱公鑰密鑰加密。它需要使用一對密鑰
來分別完成加密和解密操作,一個公開發布,即公開密鑰,另一
個由用戶自己秘密保存,即私用密鑰。信息發送者用公開密鑰去
加密,而信息接收者則用私用密鑰去解密。公鑰機制靈活,但加密和解密速度卻比對稱密鑰加密慢得多。

F. 非對稱加密之-RSA加密

對一個大整數進行因數分解,在高等數學中叫做費馬大定理,至今沒有被破解
RSA演算法是最流行的公鑰密碼演算法,使用長度可以變化的密鑰。RSA是第一個既能用於數據加密也能用於數字簽名的演算法。

這是目前地球上最重要的加密演算法

至此,所有計算完成。
將 n和e封裝成公鑰 , n和d封裝成私鑰 。

回顧上面的密鑰生成步驟,一共出現六個數字:

這六個數字之中,公鑰用到了兩個(n和e),其餘四個數字都是不公開的。其中最關鍵的是d,因為n和d組成了私鑰,一旦d泄漏,就等於私鑰泄漏。
那麼, 有無可能在已知n和e的情況下,推導出d?

最終轉換成->結論: 如果n可以被因數分解,d就可以算出,也就意味著私鑰被破解。

第一步 :首先生成秘鑰對

第二步 :公鑰加密

第三步 :私鑰解密

幾個全局變數解說:

關於加密填充方式:之前以為上面這些操作就能實現rsa加解密,以為萬事大吉了,呵呵,這事還沒完,悲劇還是發生了, android這邊加密過的數據,伺服器端死活解密不了, ,這造成了在android機上加密後無法在伺服器上解密的原因,所以在實現的時候這個一定要注意

實現分段加密:搞定了填充方式之後又自信的認為萬事大吉了,可是意外還是發生了,RSA非對稱加密內容長度有限制,1024位key的最多隻能加密127位數據,否則就會報錯(javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes) ,RSA 是常用的非對稱加密演算法。最近使用時卻出現了「不正確的長度」的異常,研究發現是由於待加密的數據超長所致。RSA 演算法規定:待加密的位元組數不能超過密鑰的長度值除以 8 再減去 11(即:KeySize / 8 - 11),而加密後得到密文的位元組數,正好是密鑰的長度值除以 8(即:KeySize / 8)。

愛麗絲選擇了61和53。(實際應用中,這兩個質數越大,就越難破解。)

愛麗絲就把61和53相乘

n的長度就是密鑰長度。3233寫成二進制是110010100001,一共有12位,所以這個密鑰就是12位。實際應用中,RSA密鑰一般是1024位,重要場合則為2048位

愛麗絲算出φ(3233)等於60×52,即3120。

愛麗絲就在1到3120之間,隨機選擇了17。(實際應用中,常常選擇65537。)

所謂 "模反元素" 就是指有一個整數d,可以使得ed被φ(n)除的余數為1。

這個式子等價於

於是,找到模反元素d,實質上就是對下面這個二元一次方程求解。

已知 e=17, φ(n)=3120,

至此所有計算完成

在愛麗絲的例子中,n=3233,e=17,d=2753,所以公鑰就是 (3233,17),私鑰就是(3233, 2753)。

實際應用中,公鑰和私鑰的數據都採用 ASN.1 格式表達

回顧上面的密鑰生成步驟,一共出現六個數字:

這六個數字之中,公鑰用到了兩個(n和e),其餘四個數字都是不公開的。其中最關鍵的是d,因為n和d組成了私鑰,一旦d泄漏,就等於私鑰泄漏。
那麼,有無可能在已知n和e的情況下,推導出d?

結論:如果n可以被因數分解,d就可以算出,也就意味著私鑰被破解。

可是,大整數的因數分解,是一件非常困難的事情。目前,除了暴力破解,還沒有發現別的有效方法。維基網路這樣寫道

舉例來說,你可以對3233進行因數分解(61×53),但是你沒法對下面這個整數進行因數分解。

它等於這樣兩個質數的乘積

事實上,RSA加密的方式原理是一個高等數學中沒有被解決的難題,所有沒有可靠的RSA的破解方式

G. 密碼學基礎(三):非對稱加密(RSA演算法原理)

加密和解密使用的是兩個不同的秘鑰,這種演算法叫做非對稱加密。非對稱加密又稱為公鑰加密,RSA只是公鑰加密的一種。

現實生活中有簽名,互聯網中也存在簽名。簽名的作用有兩個,一個是身份驗證,一個是數據完整性驗證。數字簽名通過摘要演算法來確保接收到的數據沒有被篡改,再通過簽名者的私鑰加密,只能使用對應的公鑰解密,以此來保證身份的一致性。

數字證書是將個人信息和數字簽名放到一起,經由CA機構的私鑰加密之後生成。當然,不經過CA機構,由自己完成簽名的證書稱為自簽名證書。CA機構作為互聯網密碼體系中的基礎機構,擁有相當高級的安全防範能力,所有的證書體系中的基本假設或者前提就是CA機構的私鑰不被竊取,一旦 CA J機構出事,整個信息鏈將不再安全。

CA證書的生成過程如下:

證書參與信息傳遞完成加密和解密的過程如下:

互質關系:互質是公約數只有1的兩個整數,1和1互質,13和13就不互質了。
歐拉函數:表示任意給定正整數 n,在小於等於n的正整數之中,有多少個與 n 構成互質關系,其表達式為:

其中,若P為質數,則其表達式可以簡寫為:

情況一:φ(1)=1
1和任何數都互質,所以φ(1)=1;

情況二:n 是質數, φ(n)=n-1
因為 n 是質數,所以和小於自己的所有數都是互質關系,所以φ(n)=n-1;

情況三:如果 n 是質數的某一個次方,即 n = p^k ( p 為質數,k 為大於等於1的整數),則φ(n)=(p-1)p^(k-1)
因為 p 為質數,所以除了 p 的倍數之外,小於 n 的所有數都是 n 的質數;

情況四:如果 n 可以分解成兩個互質的整數之積,n = p1 × p2,則φ(n) = φ(p1p2) = φ(p1)φ(p2)

情況五:基於情況四,如果 p1 和 p2 都是質數,且 n=p1 × p2,則φ(n) = φ(p1p2) = φ(p1)φ(p2)=(p1-1)(p2-1)

而 RSA 演算法的基本原理就是歐拉函數中的第五種情況,即: φ(n)=(p1-1)(p2-1);

如果兩個正整數 a 和 n 互質,那麼一定可以找到整數 b,使得 ab-1 被 n 整除,或者說ab被n除的余數是1。這時,b就叫做a的「模反元素」。歐拉定理可以用來證明模反元素必然存在。

可以看到,a的 φ(n)-1 次方,就是a對模數n的模反元素。

n=p x q = 3233,3233寫成二進制是110010100001,一共有12位,所以這個密鑰就是12位。

在實際使用中,一般場景下選擇1024位長度的數字,更高安全要求的場景下,選擇2048位的數字,這里作為演示,選取p=61和q=53;

因為n、p、q都為質數,所以φ(n) = (p-1)(q-1)=60×52= 3120

注意,這里是和φ(n) 互互質而不是n!假設選擇的值是17,即 e=17;

模反元素就是指有一個整數 d,可以使得 ed 被 φ(n) 除的余數為1。表示為:(ed-1)=φ(n) y --> 17d=3120y+1,算出一組解為(2753,15),即 d=2753,y=-15,也就是(17 2753-1)/3120=15。

注意,這里不能選擇3119,否則公私鑰相同??

公鑰:(n,e)=(3233,2753)
私鑰:(n,d)=(3233,17)

公鑰是公開的,也就是說m=p*q=3233是公開的,那麼怎麼求e被?e是通過模反函數求得,17d=3120y+1,e是公開的等於17,這時候想要求d就要知道3120,也就是φ(n),也就是φ(3233),說白了,3233是公開的,你能對3233進行因數分解,你就能知道d,也就能破解私鑰。

正常情況下,3233我們可以因數分解為61*53,但是對於很大的數字,人類只能通過枚舉的方法來因數分解,所以RSA安全性的本質就是:對極大整數做因數分解的難度決定了RSA演算法的可靠性。換言之,對一極大整數做因數分解愈困難,RSA演算法愈可靠。

人類已經分解的最大整數是:

這個人類已經分解的最大整數為232個十進制位,768個二進制位,比它更大的因數分解,還沒有被報道過,因此目前被破解的最長RSA密鑰就是768位。所以實際使用中的1024位秘鑰基本安全,2048位秘鑰絕對安全。

網上有個段子:

已經得出公私鑰的組成:
公鑰:(n,e)=(3233,2753)
私鑰:(n,d)=(3233,17)
加密的過程就是

解密過程如下:

其中 m 是要被加密的數字,c 是加密之後輸出的結果,且 m < n ,其中解密過程一定成立可以證明的,這里省略證明過程。

總而言之,RSA的加密就是使用模反函數對數字進行加密和求解過程,在實際使用中因為 m < n必須成立,所以就有兩種加密方法:

對稱加密存在雖然快速,但是存在致命的缺點就是秘鑰需要傳遞。非對稱加密雖然不需要傳遞秘鑰就可以完成加密和解密,但是其致命缺點是速度不夠快,不能用於高頻率,高容量的加密場景。所以才有了兩者的互補關系,在傳遞對稱加密的秘鑰時採用非對稱加密,完成秘鑰傳送之後採用對稱加密,如此就可以完美互補。

H. 非對稱加密演算法有哪些

RSA、Elgamal、背包演算法、Rabin、D-H、ECC橢圓曲線加密演算法。
非對稱加密(公鑰加密):指加密和解密使用不同密鑰的加密演算法,也稱為公私鑰加密。假設兩個用戶要加密交換數據,雙方交換公鑰,使用時一方用對方的公鑰加密,另一方即可用自己的私鑰解密。如果企業中有n個用戶,企業需要生成n對密鑰,並分發n個公鑰。假設A用B的公鑰加密消息,用A的私鑰簽名,B接到消息後,首先用A的公鑰驗證簽名,確認後用自己的私鑰解密消息。由於公鑰是可以公開的,用戶只要保管好自己的私鑰即可,因此加密密鑰的分發將變得十分簡單。同時,由於每個用戶的私鑰是唯一的,其他用戶除了可以通過信息發送者的公鑰來驗證信息的來源是否真實,還可以通過數字簽名確保發送者無法否認曾發送過該信息。

I. 非對稱加密中,公鑰在什麼情況下用於加密,什麼情況用於解密

在進行加密的時候,公鑰用於加密,私鑰用於解密
在進行數字簽名的時候,私鑰用於解密,公鑰用於加密

閱讀全文

與非對稱加密中使用什麼加密相關的資料

熱點內容
伺服器顯示error1什麼意思 瀏覽:708
python代碼精簡 瀏覽:457
文件加密了怎麼找到了 瀏覽:193
jellyfin插件怎麼選擇主伺服器 瀏覽:836
asp用戶注冊源碼 瀏覽:48
什麼是照片壓縮文件 瀏覽:392
java調用js代碼 瀏覽:979
崑山市民app怎麼修改身份信息 瀏覽:779
php登陸次數 瀏覽:744
python字元轉成數字 瀏覽:822
海川用的是什麼伺服器 瀏覽:376
口才是練出來的pdf 瀏覽:458
雲伺服器哪個公司性價比高 瀏覽:517
源碼論壇打包 瀏覽:558
php怎麼做成word 瀏覽:692
python批量生成密鑰 瀏覽:492
程序員要不要考社區人員 瀏覽:150
app的錢怎麼充q幣 瀏覽:814
android銀行卡識別 瀏覽:756
怎麼在app投放廣告 瀏覽:11