⑴ RSA的公鑰和私鑰到底哪個才是用來加密和哪個用來解密
我們來回顧一下RSA的加密演算法。我們從公鑰加密演算法和簽名演算法的定義出發,用比較規范的語言來描述這一演算法。
RSA公鑰加密體制包含如下3個演算法:KeyGen(密鑰生成演算法),Encrypt(加密演算法)以及Decrypt(解密演算法)。
(PK, SK)\leftarrow KeyGen(\lambda)。密鑰生成演算法以安全常數\lambda作為輸入,輸出一個公鑰PK,和一個私鑰SK。安全常數用於確定這個加密演算法的安全性有多高,一般以加密演算法使用的質數p的大小有關。\lambda越大,質數p一般越大,保證體制有更高的安全性。在RSA中,密鑰生成演算法如下:演算法首先隨機產生兩個不同大質數p和q,計算N=pq。隨後,演算法計算歐拉函數\varphi(N)=(p-1)(q-1)。接下來,演算法隨機選擇一個小於\varphi(N)的整數e,並計算e關於\varphi(N)的模反元素d。最後,公鑰為PK=(N, e),私鑰為SK=(N, d)。
CT \leftarrow Encrypt(PK,M)。加密演算法以公鑰PK和待加密的消息M作為輸入,輸出密文CT。在RSA中,加密演算法如下:演算法直接輸出密文為CT=M^e \mod \varphi(N)
M \leftarrow Decrypt(SK,CT)。解密演算法以私鑰SK和密文CT作為輸入,輸出消息M。在RSA中,解密演算法如下:演算法直接輸出明文為M=CT^d \mod \varphi(N)。由於e和d在\varphi(N)下互逆,因此我們有:CT^d=M^{ed}=M\mod \varphi(N)
所以,從演算法描述中我們也可以看出:公鑰用於對數據進行加密,私鑰用於對數據進行解密。當然了,這個也可以很直觀的理解:公鑰就是公開的密鑰,其公開了大家才能用它來加密數據。私鑰是私有的密鑰,誰有這個密鑰才能夠解密密文。否則大家都能看到私鑰,就都能解密,那不就亂套了。
=================分割線=================
我們再來回顧一下RSA簽名體制。簽名體制同樣包含3個演算法:KeyGen(密鑰生成演算法),Sign(簽名演算法),Verify(驗證演算法)。
(PK,SK) \leftarrow KeyGen(\lambda)。密鑰生成演算法同樣以安全常數\lambda作為輸入,輸出一個公鑰PK和一個私鑰SK。在RSA簽名中,密鑰生成演算法與加密演算法完全相同。
\sigma \leftarrow Sign(SK,M)。簽名演算法以私鑰SK和待簽名的消息M作為輸入,輸出簽名\sigma。在RSA簽名中,簽名演算法直接輸出簽名為\sigma = M^d \mod \varphi(N)。注意,簽名演算法和RSA加密體制中的解密演算法非常像。
b \leftarrow Verify(PK,\sigma,M)。驗證演算法以公鑰PK,簽名\sigma以及消息M作為輸入,輸出一個比特值b。b=1意味著驗證通過。b=0意味著驗證不通過。在RSA簽名中,驗證演算法首先計算M'=\sigma^e \mod \varphi(N),隨後對比M'與M,如果相等,則輸出b=1,否則輸出b=0。注意:驗證演算法和RSA加密體制中的加密演算法非常像。
所以,在簽名演算法中,私鑰用於對數據進行簽名,公鑰用於對簽名進行驗證。這也可以直觀地進行理解:對一個文件簽名,當然要用私鑰,因為我們希望只有自己才能完成簽字。驗證過程當然希望所有人都能夠執行,大家看到簽名都能通過驗證證明確實是我自己簽的。
=================分割線=================
那麼,為什麼題主問這么一個問題呢?我們可以看到,RSA的加密/驗證,解密/簽字過程太像了。同時,RSA體制本身就是對稱的:如果我們反過來把e看成私鑰,d看成公鑰,這個體制也能很好的執行。我想正是由於這個原因,題主在學習RSA體制的時候才會出現這種混亂。那麼解決方法是什麼呢?建議題主可以學習一下其他的公鑰加密體制以及簽名體制。其他的體制是沒有這種對稱性質的。舉例來說,公鑰加密體制的話可以看一看ElGamal加密,以及更安全的Cramer-Shoup加密。簽名體制的話可以進一步看看ElGamal簽名,甚至是BLS簽名,這些體制可能能夠幫助題主更好的弄清加密和簽名之間的區別和潛在的聯系。
至於題主問的加密和簽名是怎麼結合的。這種體制叫做簽密方案(SignCrypt),RSA中,這種簽密方案看起來特別特別像,很容易引起混亂。在此我不太想詳細介紹RSA中的加密與簽字結合的方案。我想提醒題主的是,加密與簽字結合時,兩套公私鑰是不同的。
⑵ 關於私鑰加密 公鑰解密
如果只是單方面採用非對稱性加密演算法,其實有兩種方式,用於不同用處.
第一種是簽名,使用私鑰加密,公鑰解密,用於讓所有公鑰所有者驗證私鑰所有者的身份並且用來防止私鑰所有者發布的內容被篡改.但是不用來保證內容不被他人獲得.
第二種是加密,用公鑰加密,私鑰解密,用於向公鑰所有者發布信息,這個信息可能被他人篡改,但是無法被他人獲得.
如果甲想給乙發一個安全的保密的數據,那麼應該甲乙各自有一個私鑰,甲先用乙的公鑰加密這段數據,再用自己的私鑰加密這段加密後的數據.最後再發給乙,這樣確保了內容即不會被讀取,也不會被篡改.
⑶ 非對稱加密中,公鑰在什麼情況下用於加密,什麼情況用於解密
在進行加密的時候,公鑰用於加密,私鑰用於解密
在進行數字簽名的時候,私鑰用於解密,公鑰用於加密
⑷ 公鑰加密解密體系包括什麼
非對稱密鑰體系又稱公開密鑰體系(Public Key Infrastructure (PKI)),其核心是非對稱密鑰加密(Asymmetric Encryption)又稱公開密鑰加密(Public-key Encryption)。公開密鑰加密包含兩個密鑰:公開密鑰(public key)和私有密鑰(private key)。公鑰通常公開發布,而私鑰則由用戶私密保存。由公鑰加密的信息,只能通過私鑰解密;由私鑰加密的信息,只能通過公鑰解密。常用演算法有RSA、Elgamal等,可以進行數字簽名(私鑰加密)和信息加密(公鑰加密)。通俗來講數字簽名是來公開確認明文的來源和完整性,信息加密是對明文的保密。
信息加密/解密過程:
發送者使用接收者的公鑰對明文進行加密,並發送
接受者使用密鑰對明文進行解密
⑸ 公鑰加密解密體系包括哪些
公鑰加密解密體系包括:
(1)明文空間M,它是全體明文的集合。
(2)密文空間C,它是全體密文的集合。
(3)密鑰空間K,它是全體密鑰的集合。其中每一個密鑰K均由加密密鑰和解密密鑰組成,即。
(4)加密演算法E,它是一族由M到C的加密變換,對於每一個具體的,則E就確定出一個具體的加密函數,把M加密成密文C。
(5)解密演算法D,它是一族由C到M的解密變換,對於每一個確定的,則D就確定出一個具體的解密函數。
公鑰加密體制是不對稱密鑰,優點是運算速度快,密鑰產生容易。
⑹ JAVA公鑰加密,私鑰解密,該怎麼解決
RSA加密演算法,是世界上第一個非對稱加密演算法,也是數論的第一個實際應用。它的演算法如下:
1.找兩個非常大的質數p和q(通常p和q都有155十進制位或都有512十進制位)並計算n=pq,k=(p-1)(q-1)。
2.將明文編碼成整數M,保證M不小於0但是小於n。
3.任取一個整數e,保證e和k互質,而且e不小於0但是小於k。加密鑰匙(稱作公鑰)是(e, n)。
4.找到一個整數d,使得ed除以k的余數是1(只要e和n滿足上面條件,d肯定存在)。解密鑰匙(稱作密鑰)是(d, n)。
加密過程: 加密後的編碼C等於M的e次方除以n所得的余數。
解密過程: 解密後的編碼N等於C的d次方除以n所得的余數。
只要e、d和n滿足上面給定的條件。M等於N。
⑺ RSA體制密鑰的生成及其加密、解密演算法分別是什麼
RSA體制密鑰的生成:
1. 選擇兩個大素數,p 和q 。
2. 計算: n = p * q (p,q分別為兩個互異的大素數,p,q 必須保密,一般要求p,q為安全素數,n的長度大於512bit ,這主要是因為RSA演算法的安全性依賴於因子分解大數問題)。有歐拉函數 (n)=(p-1)(q-1)。
3. 然後隨機選擇加密密鑰e,要求 e 和 ( p - 1 ) * ( q - 1 ) 互質。
4. 最後,利用Euclid 演算法計算解密密鑰d, 滿足de≡1(mod φ(n))。其中n和d也要互質。數e和n是公鑰,d是私鑰。兩個素數p和q不再需要,應該丟棄,不要讓任何人知道。
加密、解密演算法:
1. 加密信息 m(二進製表示)時,首先把m分成等長數據塊 m1 ,m2,..., mi ,塊長s,其中 2^s <= n, s 盡可能的大。
2. 對應的密文是:ci ≡mi^e ( mod n ) ( a )
3. 解密時作如下計算:mi ≡ci^d ( mod n ) ( b ) RSA 可用於數字簽名,方案是用 ( a ) 式簽名, ( b )式驗證。
⑻ 什麼是公鑰加密和私鑰解密
如果只是單方面採用非對稱性加密演算法,其實有兩種方式,用於不同用處.
第一種是簽名,使用私鑰加密,公鑰解密,用於讓所有公鑰所有者驗證私鑰所有者的身份並且用來防止私鑰所有者發布的內容被篡改.但是不用來保證內容不被他人獲得.
第二種是加密,用公鑰加密,私鑰解密,用於向公鑰所有者發布信息,這個信息可能被他人篡改,但是無法被他人獲得.
如果甲想給乙發一個安全的保密的數據,那麼應該甲乙各自有一個私鑰,甲先用乙的公鑰加密這段數據,再用自己的私鑰加密這段加密後的數據.最後再發給乙,這樣確保了內容即不會被讀取,也不會被篡改.
⑼ 怎樣實現對私鑰(公鑰)進行解密
要實現安全登錄,可以採用下面三種方法,一種基於非對稱加密演算法,一種基於對稱加密演算法,最後一種基於散列演算法。下面我們來分別討論這三種方法。
非對稱加密演算法中,目前最常用的是 RSA 演算法和 ECC(橢圓曲線加密)演算法。要採用非對稱加密演算法實現安全登錄的話,首先需要在客戶端向伺服器端請求登錄頁面時,伺服器生成公鑰和私鑰,然後將公鑰隨登錄頁面一起傳遞給客戶端瀏覽器,當用戶輸入完用戶名密碼點擊登錄時,登錄頁面中的 JavaScript 調用非對稱加密演算法對用戶名和密碼用用公鑰進行加密。然後再提交到伺服器端,伺服器端利用私鑰進行解密,再跟資料庫中的用戶名密碼進行比較,如果一致,則登錄成功,否則登錄失敗。
看上去很簡單,但是這里有這樣幾個問題。目前 RSA 演算法中,1024-2048 位的密鑰被認為是安全的。如果密鑰長度小於這個長度,則認為可以被破解。但這樣的長度超過了程序設計語言本身所允許的數字運算范圍,需要通過模擬來實現大數運算。而在 Web 系統的客戶端,如果通過 JavaScript 來模擬大數運行的話,效率將會是很低的,因此要在客戶端採用這樣的密鑰來加密數據的話,許多瀏覽器會發出執行時間過長,停止運行的警告。然而,解密或者密鑰生成的時間相對於加密來說要更長。雖然解密和密鑰生成是在伺服器端執行的,但是如果伺服器端是 PHP、ASP 這樣的腳本語言的話,它們也將很難勝任這樣的工作。ECC 演算法的密鑰長度要求比 RSA 演算法要低一些,ECC 演算法中 160 位的密鑰長度被認為與 RSA 演算法中 1024 位的密鑰長度的安全性是等價的。雖然仍然要涉及的模擬大數運算,但 ECC 演算法的密鑰長度的運算量還算是可以接受的,但是 ECC 演算法比 RSA 演算法要復雜的多,因此實現起來也很困難。
對稱加密演算法比非對稱加密演算法要快得多,但是對稱加密演算法需要數據發送方和接受方共用一個密鑰,密鑰是不能通過不安全的網路直接傳遞的,否則密鑰和加密以後的數據如果同時監聽到的話,入侵者就可以直接利用監聽到的密鑰來對加密後的信息進行解密了。
那是不是就不能通過對稱加密演算法實現安全登錄呢?其實只要通過密鑰交換演算法就可以實現安全登錄了,常用的密鑰交換演算法是 Diffie-Hellman 密鑰交換演算法。我們可以這樣來實現密鑰的安全傳遞,首先在客戶端向伺服器端請求登錄頁面時,伺服器端生成一個大素數 p,它的本原根 g,另外生成一個隨機數 Xa,然後計算出 Ya = gXa mod p,將 p、g、Ya 連同登錄頁面一起發送給客戶端,然後客戶端也生成一個隨機數 Xb,計算 Yb = gXb mod p,然後再計算 K = YaXb mod p,現在 K 就是密鑰,接下來就可以用 K 作密鑰,用對稱加密演算法對用戶輸入進行加密了,然後將加密後的信息連同計算出來的 Yb 一同發送給伺服器端,伺服器端計算 K = YbXa mod p,這樣就可以得到跟客戶端相同的密鑰 K 了,最後用客戶端加密演算法的相應解密演算法,就可以在伺服器端將加密信息進行解密了,信息解密以後進行比較,一致則登錄成功,否則登錄失敗。需要注意的時候,這里伺服器端生成的隨機數 Xa 和 客戶端生成的隨機數 Xb 都不傳遞給對方。傳遞的數據只有 p、g、Ya、Yb 和加密後的數據。
但是如果我們不採用加密演算法而採用散列演算法對登錄密碼進行處理的話,可以避免被直接解密出原文,但是如果直接採用 MD5 或者 SHA1 來對登錄密碼進行處理後提交的話,一旦入侵者監聽到散列後的密碼,則不需要解密出原文,直接將監聽到的數據提交給伺服器,就可以實現入侵的目的了。而且,目前 MD5 演算法已被破解,SHA1 演算法則被證明從理論上可破解,就算採用離線碰撞,也可以找出與原密碼等價的密碼來。所以直接採用 MD5 或者 SHA1 來對密碼進行散列處理也是不可行的。
但是如果在散列演算法中加入了密鑰,情況就不一樣了。hmac 演算法正好作了這樣的事情,下面我們來看看如何用 hmac 演算法實現安全登錄。首先在客戶端向伺服器端請求登錄頁面時,伺服器端生成一個隨機字元串,連同登錄頁面一同發送給客戶端瀏覽器,當用戶輸入完用戶名密碼後,將密碼採用 MD5 或者 SHA1 來生成散列值作為密鑰,伺服器端發送來的隨機字元串作為消息數據,進行 hmac 運算。然後將結果提交給伺服器。之所以要對用戶輸入的密碼進行散列後再作為密鑰,而不是直接作為密鑰,是為了保證密鑰足夠長,而又不會太長。伺服器端接受到客戶端提交的數據後,將保存在伺服器端的隨機字元串和用戶密碼進行相同的運算,然後進行比較,如果結果一致,則認為登錄成功,否則登錄失敗。當然如果不用 hmac 演算法,直接將密碼和伺服器端生成的隨機數合並以後再做 MD5 或者 SHA1,應該也是可以的。
這里客戶端每次請求時伺服器端發送的隨機字元串都是不同的,因此即使入侵者監聽到了這個隨機字元串和加密後的提交的數據,它也無法再次提交相同的數據通過驗證。而且通過監聽到的數據也無法計算出密鑰,所以也就無法偽造登錄信息了。
對稱和非對稱加密演算法不僅適用於登錄驗證,還適合用於最初的密碼設置和以後密碼修改的過程中,而散列演算法僅適用於登錄驗證。但是散列演算法要比對稱和非對稱加密演算法效率高。
⑽ 公鑰和私鑰加密主要演算法有哪些,其基本思想是什麼
加密演算法nbsp;nbsp;nbsp;nbsp;加密技術是對信息進行編碼和解碼的技術,編碼是把原來可讀信息(又稱明文)譯成代碼形式(又稱密文),其逆過程就是解碼(解密)。加密技術的要點是加密演算法,加密演算法可以分為對稱加密、不對稱加密和不可逆加密三類演算法。nbsp;nbsp;nbsp;nbsp;對稱加密演算法nbsp;nbsp;對稱加密演算法是應用較早的加密演算法,技術成熟。在對稱加密演算法中,數據發信方將明文(原始數據)和加密密鑰一起經過特殊加密演算法處理後,使其變成復雜的加密密文發送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的密鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文。在對稱加密演算法中,使用的密鑰只有一個,發收信雙方都使用這個密鑰對數據進行加密和解密,這就要求解密方事先必須知道加密密鑰。對稱加密演算法的特點是演算法公開、計算量小、加密速度快、加密效率高。不足之處是,交易雙方都使用同樣鑰匙,安全性得不到保證。此外,每對用戶每次使用對稱加密演算法時,都需要使用其他人不知道的惟一鑰匙,這會使得發收信雙方所擁有的鑰匙數量成幾何級數增長,密鑰管理成為用戶的負擔。對稱加密演算法在分布式網路系統上使用較為困難,主要是因為密鑰管理困難,使用成本較高。在計算機專網系統中廣泛使用的對稱加密演算法有DES和IDEA等。美國國家標准局倡導的AES即將作為新標准取代DES。nbsp;nbsp;nbsp;nbsp;不對稱加密演算法不對稱加密演算法使用兩把完全不同但又是完全匹配的一對鑰匙—公鑰和私鑰。在使用不對稱加密演算法加密文件時,只有使用匹配的一對公鑰和私鑰,才能完成對明文的加密和解密過程。加密明文時採用公鑰加密,解密密文時使用私鑰才能完成,而且發信方(加密者)知道收信方的公鑰,只有收信方(解密者)才是唯一知道自己私鑰的人。不對稱加密演算法的基本原理是,如果發信方想發送只有收信方才能解讀的加密信息,發信方必須首先知道收信方的公鑰,然後利用收信方的公鑰來加密原文;收信方收到加密密文後,使用自己的私鑰才能解密密文。顯然,採用不對稱加密演算法,收發信雙方在通信之前,收信方必須將自己早已隨機生成的公鑰送給發信方,而自己保留私鑰。由於不對稱演算法擁有兩個密鑰,因而特別適用於分布式系統中的數據加密。廣泛應用的不對稱加密演算法有RSA演算法和美國國家標准局提出的DSA。以不對稱加密演算法為基礎的加密技術應用非常廣泛。nbsp;nbsp;nbsp;nbsp;不可逆加密演算法nbsp;nbsp;不可逆加密演算法的特徵是加密過程中不需要使用密鑰,輸入明文後由系統直接經過加密演算法處理成密文,這種加密後的數據是無法被解密的,只有重新輸入明文,並再次經過同樣不可逆的加密演算法處理,得到相同的加密密文並被系統重新識別後,才能真正解密。顯然,在這類加密過程中,加密是自己,解密還得是自己,而所謂解密,實際上就是重新加一次密,所應用的「密碼」也就是輸入的明文。不可逆加密演算法不存在密鑰保管和分發問題,非常適合在分布式網路系統上使用,但因加密計算復雜,工作量相當繁重,通常只在數據量有限的情形下使用,如廣泛應用在計算機系統中的口令加密,利用的就是不可逆加密演算法。近年來,隨著計算機系統性能的不斷提高,不可逆加密的應用領域正在逐漸增大。在計算機網路中應用較多不可逆加密演算法的有RSA公司發明的MD5演算法和由美國國家標准局建議的不可逆加密標准SHS(Securenbsp;Hashnbsp;Standard:安全雜亂信息標准)等。加密技術nbsp;nbsp;nbsp;nbsp;加密演算法是加密技術的基礎,任何一種成熟的加密技術都是建立多種加密演算法組合,或者加密演算法和其他應用軟體有機結合的基礎之上的。下面我們介紹幾種在計算機網路應用領域廣泛應用的加密技術。nbsp;nbsp;nbsp;nbsp;非否認(Non-repudiation)技術nbsp;nbsp;該技術的核心是不對稱加密演算法的公鑰技術,通過產生一個與用戶認證數據有關的數字簽名來完成。當用戶執行某一交易時,這種簽名能夠保證用戶今後無法否認該交易發生的事實。由於非否認技術的操作過程簡單,而且直接包含在用戶的某類正常的電子交易中,因而成為當前用戶進行電子商務、取得商務信任的重要保證。nbsp;nbsp;nbsp;nbsp;PGP(Prettynbsp;Goodnbsp;Privacy)技術nbsp;nbsp;PGP技術是一個基於不對稱加密演算法RSA公鑰體系的郵件加密技術,也是一種操作簡單、使用方便、普及程度較高的加密軟體。PGP技術不但可以對電子郵件加密,防止非授權者閱讀信件;還能對電子郵件附加數字簽名,使收信人能明確了解發信人的真實身份;也可以在不