㈠ 科普知識—對稱加密和非對稱加密
區塊鏈技術中廣泛應用到非對稱加密技術,非對稱加密技術保證了信息在傳輸過程中的安全性,非對稱加密技術是在對稱加密技術上發展來的。本文主要闡述對稱加密技術和非對稱加密技術的概念和特點,並舉例說明。
對稱加密就是用相同的密鑰對原文進行加密和解密,通信雙方共用一個密鑰。
基於對稱加密演算法傳輸信息「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」。
採用非對稱加密演算法即使第三方在網路上截獲到密文,但其無法獲得接收方的私鑰,也就無法對密文進行解密,作為接收方務必保證自己私鑰的安全,所以非對稱加密技術解決了密鑰傳輸過程的安全性問題。
本文主要闡述對稱加密技術和非對稱加密技術的概念和特點,並舉例說明。對稱加密是通信雙方共用密鑰,無法保證密鑰的安全傳遞;非對稱加密使用接收方的公鑰對數據加密,接收方使用自己的私鑰解密,即使信息被第三方截獲,由於沒有接收方的私鑰,也無法破解密文。
㈡ 對稱加密、非對稱加密、摘要、數字簽名、數字證書
作為一個開發人員,或多或少都聽說過對稱加密、非對稱加密、摘要、數字簽名、數字證書這幾個概念,它們是用來保證在互聯網通信過程中數據傳輸安全的。有人可能會有疑惑,我給傳輸數據加個密不就安全了,為什麼還要搞這么多花樣出來?本文主要通過一個案例來講解這幾個概念的實際作用。
在此之前,我先簡單介紹一下這幾個概念。
對稱加密是指用來加密和解密的是同一個秘鑰。其特點是加密速度快,但是秘鑰容易被黑客截獲,所以安全性不高。常見的有AES、DES演算法。
非對稱加密是指用來加密和解密的是不同的秘鑰,它們是成對出現的,稱為公鑰和私鑰,知道其中一個秘鑰是無法推導出另外一個秘鑰的。用公鑰加密的內容需要用私鑰才能解密,用私鑰加密的內容需要用公鑰才能解密。非對稱加密的特點是安全性高,缺點是加密速度慢。常見的有RSA演算法。
所謂的摘要就是一段信息或者一個文件通過某個哈希演算法(也叫摘要演算法)而得到的一串字元。摘要演算法的特點就是不同的文件計算出的摘要是不同的(也有可能相同,但是可能性非常非常低),比如一個1G的視頻文件,哪怕只是改動其中一個位元組,最後計算得到的摘要也是完全不同的,所以摘要演算法通常是用來判斷文件是否被篡改過。其還有一個特點就是通過摘要是無法推導出源文件的信息的。常用的摘要演算法有MD5、SHA等。
數字簽名就是一個文件的摘要加密後的信息。數字簽名是和源文件一起發送給接收方的,接收方收到後對文件用摘要演算法算出一個摘要,然後和數字簽名中的摘要進行比對,兩者不一致的話說明文件被篡改了。
數字證書是一個經證書授權中心生成的文件,數字證書里一般會包含公鑰、公鑰擁有者名稱、CA的數字簽名、有效期、授權中心名稱、證書序列號等信息。其中CA的數字簽名是驗證證書是否被篡改的關鍵,它其實就是對證書裡面除了CA的數字簽名以外的內容進行摘要演算法得到一個摘要,然後CA機構用他自己的私鑰對這個摘要進行加密就生成了CA的數字簽名,CA機構會公開它的公鑰,驗證證書時就是用這個公鑰解密CA的數字簽名,然後用來驗證證書是否被篡改。
場景:
張三要找人裝修一個房子,原則是誰的出價便宜就給誰裝修,所以對於報價文件就是屬於機密文件。下面我們來看下不同的方式傳輸報價文件都會有什麼風險。
現在李四想接這個裝修的活,他做了一份報價文件(文件名: lisi.txt ,文件內容: 報價50萬 )。然後李四用一個對稱秘鑰 123 對這個文件進行加密。最後李四將這個秘鑰和加密的文件發給張三,張三收到後用這個秘鑰解密,知道了李四的報價是50萬。
同時王五也想接這個裝修的活,他本來是想報價55萬的,但是又擔心報價太高而丟掉這個活。恰巧王五是個黑客高手,於是他截獲了李四發給張三的秘鑰和加密文件,知道了李四報價是50萬。最後王五將自己的報價改成了49萬發給張三,結果王五接下了這個裝修活。
結論:
用對稱加密的話,一旦秘鑰被黑客截獲,加密就形同虛設,所以安全性比較低。
首先張三會生成一對秘鑰,私鑰是 zhangsan1 ,公鑰是 zhangsan2 ,私鑰張三自己保存,將公鑰公布出去。
李四將報價文件 list.txt 用張三公布的公鑰 zhangsan2 進行加密後傳給張三,然後張三用私鑰 zhangsan1 進行解密得到李四的報價是50萬。
這個時候即使王五截獲到了李四發給張三的報價文件,由於王五沒有張三的私鑰,所以他是無法解密文件的,也就無法知道李四的報價。最後王五因為報價55萬而丟掉了這個裝修的機會。
所以用非對稱加密是可以保證數據傳輸安全的。不過這里說一句題外話,既然非對稱加密安全性高,那為什麼不淘汰掉對稱加密呢?其實關鍵就在於加密速度,非對稱加密計算量很大,所以加密速度是很慢的,如果發送消息非常頻繁,使用非對稱加密的話就會對性能造成很大影響。所以在實際開發過程中通常是對稱加密和非對稱加密結合使用的。也就是對稱加密的秘鑰是用非對稱加密後發送的,這樣能保證對稱加密的秘鑰不被黑客截獲,然後在發送業務數據時就用對稱加密。這樣既保證了安全性也保證了加密速度。
結論:
非對稱加密可以防止黑客截獲加密後的內容,安全性高。
前面都說了非對稱加密是安全的,那為什麼還要數字簽名呢?
設想一下,王五截獲了李四的報價文件,王五雖然無法知道李四的實際報價,但是他完全可以偽造一份李四的報價(文件名: lisi.txt ,文件內容: 報價60萬 ),然後將這份偽造文件用張三公布的公鑰 zhangsan2 進行加密後替換原來的報價文件。張三收到後解密發現報價是60萬,於是張三就以為李四報的價是60萬,最後決定將裝修的活給報價55萬的王五來做。
發生這個問題的關鍵就在於張三無法知道報價文件是否被篡改過。要解決這個問題就需要用到數字簽名。
首先李四需要自己生成一對非對稱加密的秘鑰,私鑰 lisi1 自己保存,公鑰 lisi2 發給張三。然後李四對自己的報價文件通過摘要演算法得到一個摘要(假設摘要是 aaa ),再用自己的私鑰 lisi1 加密這個摘要就得到了報價文件的數字簽名,最後將加密的報價文件和數字簽名一起發給張三,張三收到後先用李四發過來的公鑰 lisi2 解密數字簽名得到摘要 aaa ,然後用自己的私鑰 zhangsan1 解密加密的文件得到報價源文件,然後對報價源文件進行摘要演算法,看計算得到的結果是不是 aaa ,如果不是 aaa 的話就說明報價文件被篡改了。
在這種情況下,如果王五截獲了李四發給張三的文件。王五是無法解密報價文件的。如果王五偽造一份報價文件的話,等張三收到後就會發現報價文件和數字簽名不匹配。那王五能不能偽造報價文件的同時也偽造簽名呢?因為王五沒有李四的私鑰,所以沒法對偽造的報價文件的摘要進行加密,所以也就沒法偽造簽名。
結論:
非對稱加密雖然能確保加密文件內容不被竊取,但不能保證文件不被篡改。數字簽名就是用來驗證文件是否被篡改過。
既然非對稱加密可以保證文件內容的安全性,數字簽名又可以保證文件不被篡改,那還要數字證書有什麼用呢?
我們再來設想一下,王五自己也生成了一對用於非對稱加密的秘鑰,私鑰是 wangwu1 ,公鑰是 wangwu2 。前面李四將自己的公鑰 lisi2 發給張三的過程中被王五給截獲了,王五用自己的公鑰 wangwu2 替換了李四的公鑰 lisi2 ,所以張三最後收到的公鑰實際上是王五的,但張三對這並不知情。後面李四發的數字簽名和加密的報價文件都被王五截獲,並且王五偽造了一份報價文件,同時用自己的私鑰加密報價文件的摘要生成偽造的簽名並發給張三,張三收到後進行驗證發現數字簽名和報價文件是匹配的,就以為這份報價文件是真實的。
出現這個問題的關鍵就在於張三沒法確認收到的公鑰到底是不是李四發的,這個時候數字證書就起到作用了。李四到權威的數字證書機構申請數字證書,證書裡麵包含了公鑰( lisi2 )和公鑰的擁有者( 李四 )等相關信息,然後李四將證書發給張三,張三通過證書裡面的信息就可以知道公鑰到底是不是李四的了。
那證書在發送過程中有沒有可能被王五截獲並篡改呢?要知道證書裡面還包含CA的數字簽名,這個簽名是證書機構用他們自己的私鑰對證書的摘要進行加密的,而公鑰是公開的。所以即便王五截獲並篡改了證書內容,他也無法偽造證書機構的簽名,張三在收到證書後通過驗證簽名也會發現證書被篡改了。所以到這一步才能保證數據傳輸的真正安全。
㈢ 非對稱加密演算法是什麼意思
對稱加密演算法
加密數據使用的密鑰可以計算出用於解密數據的密鑰,反之亦然.絕大多數的對稱加密演算法加密密鑰和解密密鑰都是相同的.(加密速度快,適用與大數據的加密)
非對稱加密演算法
所謂非對稱加密演算法是指用於加密的密鑰與用於解密的密鑰是不同的,而且從加密的密鑰無法推導出解密的密鑰.(加密速度慢,適用與小數據的加密)
非對稱密碼體制的特點:演算法強度復雜、安全性依賴於演算法與密鑰但是由於其演算法復雜,而使得加密解密速度沒有對稱加密解密的速度快.對稱密碼體制中只有一種密鑰,並且是非公開的,如果要解密就得讓對方知道密鑰.所以保證其安全性就是保證密鑰的安全,而非對稱密鑰體制有兩種密鑰,其中一個是公開的,這樣就可以不需要像對稱密碼那樣傳輸對方的密鑰了.這樣安全性就大了很多.
㈣ 數據加密(對稱加密和非對稱加密)
通過網路通信的五層模型(ISO規定的是七層模型,TCP/IP規定的是五層模型)可以實現兩個應用程序之間的數據通信
但是現在有個問題是 數據如何加密,總不能兩個人之間說的話讓第三個人活著別的人聽到吧
那最簡單的例子就是:A和B之間傳遞數據,如何保證數據不被第三個人知道,或者說第三個人就算知道數據,但是不知道數據所代表的意思。
在傳遞數據時候不能避免傳遞的數據被別的人知道,那我們能做的就是讓第三個人不知道數據所表達的意思就好了。
A 和 B 約定一套規則,A 通過這套規則將要發送的數據改變, 稱作加密 ,B 接受到數據,在用這套規則將數據還原成原來的數據 稱作解密 。這就完成了一次加密數據傳輸。
因為數據傳輸的方式無外乎就有兩種形式;1.通過無線的方式,對應的就是(電磁波)。2.通過有線連接的方式(網線)數據就是轉化為0,1,0,1的這種二進制來傳送的。
假如A 要發送一組數據為010101010101,A約定的規則是按位取反,通過這套規則數據就變成了101010101010,將變化後的數據發送給B,B得到這個數據,通過按位取反,將這套數據變成原來的樣子也就是將1010101010按位置取反變成010101010101,在這個傳輸過程中有人得到了這個數據,那得到的也是101010101010,他並不知道這套規則,那即使知道了數據,也並不影響什麼。
在上面的過程中這套規則就叫做 ------- 公鑰 ----------
上面的過程就叫做對稱加密
對稱加密是一種思想,具體的實現就是演算法,有很多的對稱加密的演算法 比如 DES演算法
對稱的意思就是 加密和解密用的是一套規則
說到這里對稱加密大體說明白了一點。但不要停下思考的步伐,那請思考一個問題
新的問題又擺在了眼前。。。。。。怎麼搞,,怎麼半
這個時候非對稱加密就出現了,就是這樣。在一個合適的時間 出現一個合適的東西。
扯多了,回歸正題:
繼續上面的情景 A 和 B 倆交流,互通數據,解決上面出現的問題那就定義兩套規則,一套加密(俗稱公鑰),一套解密(俗稱私鑰),那A又一對鑰匙(即就是一個公鑰,一個私鑰),B也有一對鑰匙。如果A想要給B傳數據 那就先用B 的公鑰將數據加密,然後通過網路傳給B。B 接受到數據後,通過自己的私鑰將數據解密 ,就得到A 所傳的真正的數據。 同樣的道理 B 想給A傳數據,那就先通過網路得到A的公鑰,然後加密數據,通過網路傳給A ,A得到數據後用自己的私鑰解密,就可以得到B 傳給A的真正的數據。
上面的過程就是非對稱加密,所謂非對稱就是有兩套規則,一套是公鑰,一套是私鑰。
這種規則其實就是演算法,當然這種非對稱加密演算法有很多,但是現在比較常用的就是RSA演算法 RSA演算法
那寫到這里基本的也就差不多了。數據加密傳輸也就完成了,基本沒什麼問題,但是網路傳數據當然是越快越好,那我接下來就是要寫一些兩個加密方式的優缺點:
對稱加密 ---------簡單,因為只有一套規則。
--------- 速度快,因為只有一套規則。
非對稱加密 ------- 復雜,兩套規則
--------速度慢,兩套規則
公鑰 說到底也就是數據。那數據要怎麼傳 !!!!! 是不是很眼熟,這不就是我們之前將的問題嗎? 我們可以用非對稱加密將對稱加密的公鑰傳過去,那之前對稱加密的問題不就解決了嗎? 然後可以放心大膽的使用對稱加密了。有沒有?
一般先都是用非對稱加密將對稱加密的公鑰傳過去,然後使用對稱加密。。那數據的處理速度就很快。
ok 就到這了……
㈤ 非對稱加密和對稱加密
非對稱加密和對稱加密在加密和解密過程、加密解密速度、傳輸的安全性上都有所不同,具體介紹如下:
1、加密和解密過程不同
對稱加密過程和解密過程使用的同一個密鑰,加密過程相當於用原文+密鑰可以傳輸出密文,同時解密過程用密文-密鑰可以推導出原文。但非對稱加密採用了兩個密鑰,一般使用公鑰進行加密,使用私鑰進行解密。
2、加密解密速度不同
對稱加密解密的速度比較快,適合數據比較長時的使用。非對稱加密和解密花費的時間長、速度相對較慢,只適合對少量數據的使用。
3、傳輸的安全性不同
對稱加密的過程中無法確保密鑰被安全傳遞,密文在傳輸過程中是可能被第三方截獲的,如果密碼本也被第三方截獲,則傳輸的密碼信息將被第三方破獲,安全性相對較低。
非對稱加密演算法中私鑰是基於不同的演算法生成不同的隨機數,私鑰通過一定的加密演算法推導出公鑰,但私鑰到公鑰的推導過程是單向的,也就是說公鑰無法反推導出私鑰。所以安全性較高。
一、對稱加密演算法
指加密和解密使用相同密鑰的加密演算法。對稱加密演算法用來對敏感數據等信息進行加密,常用的演算法包括DES、3DES、AES、DESX、Blowfish、、RC4、RC5、RC6。
DES(Data Encryption Standard) :數據加密標准,速度較快,適用於加密大量數據的場合。
3DES(Triple DES) :是基於DES,對一塊數據用三個不同的密鑰進行三次加密,強度更高。
AES(Advanced Encryption Standard) :高級加密標准,是下一代的加密演算法標准,速度快,安全級別高;
二、非對稱加密演算法
指加密和解密使用不同密鑰的加密演算法,也稱為公私鑰加密。假設兩個用戶要加密交換數據,雙方交換公鑰,使用時一方用對方的公鑰加密,另一方即可用自己的私鑰解密。常見的非對稱加密演算法:RSA、DSA(數字簽名用)、ECC(移動設備用)、Diffie-Hellman、El Gamal。
RSA: 由 RSA 公司發明,是一個支持變長密鑰的公共密鑰演算法,需要加密的文件塊的長度也是可變的;
DSA(Digital Signature Algorithm) :數字簽名演算法,是一種標準的 DSS(數字簽名標准);
ECC(Elliptic Curves Cryptography) :橢圓曲線密碼編碼學。
ECC和RSA相比,在許多方面都有對絕對的優勢,主要體現在以下方面:
(1)抗攻擊性強。相同的密鑰長度,其抗攻擊性要強很多倍。
(2)計算量小,處理速度快。ECC總的速度比RSA、DSA要快得多。
(3)存儲空間佔用小。ECC的密鑰尺寸和系統參數與RSA、DSA相比要小得多,意味著它所佔的存貯空間要小得多。這對於加密演算法在IC卡上的應用具有特別重要的意義。
(4)帶寬要求低。當對長消息進行加解密時,三類密碼系統有相同的帶寬要求,但應用於短消息時ECC帶寬要求卻低得多。帶寬要求低使ECC在無線網路領域具有廣泛的應用前景。
三、散列演算法(Hash演算法---單向加密演算法)
散列是信息的提煉,通常其長度要比信息小得多,且為一個固定長度。加密性強的散列一定是不可逆的,這就意味著通過散列結果,無法推出任何部分的原始信息。任何輸入信息的變化,哪怕僅一位,都將導致散列結果的明顯變化,這稱之為雪崩效應。散列還應該是防沖突的,即找不出具有相同散列結果的兩條信息。具有這些特性的散列結果就可以用於驗證信息是否被修改。
Hash演算法: 特別的地方在於它是一種單向演算法,用戶可以通過Hash演算法對目標信息生成一段特定長度的唯一的Hash值,卻不能通過這個Hash值重新獲得目標信息。因此Hash演算法常用在不可還原的密碼存儲、信息完整性校驗等。
單向散列函數一般用於產生消息摘要,密鑰加密等,常見的Hash演算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1。
MD5(Message Digest Algorithm 5): 是RSA數據安全公司開發的一種單向散列演算法,非可逆,相同的明文產生相同的密文。
SHA(Secure Hash Algorithm): 可以對任意長度的數據運算生成一個160位的數值;
SHA-1與MD5的比較
因為二者均由MD4導出,SHA-1和MD5彼此很相似。相應的,他們的強度和其他特性也是相似,但還有以下幾點不同:
(1)對強行供給的安全性:最顯著和最重要的區別是SHA-1摘要比MD5摘要長32 位。使用強行技術,產生任何一個報文使其摘要等於給定報摘要的難度對MD5是2^(128)數量級的操作,而對SHA-1則是2^(160)數量級的操作。這樣,SHA-1對強行攻擊有更大的強度。
(2)對密碼分析的安全性:由於MD5的設計,易受密碼分析的攻擊,SHA-1顯得不易受這樣的攻擊。
速度:在相同的硬體上,SHA-1的運行速度比MD5慢。
四、 加密演算法的選擇
1.由於非對稱加密演算法的運行速度比對稱加密演算法的速度慢很多,當我們需要加密大量的數據時,建議採用對稱加密演算法,提高加解密速度。
2.對稱加密演算法不能實現簽名,因此簽名只能非對稱演算法。
3.由於對稱加密演算法的密鑰管理是一個復雜的過程,密鑰的管理直接決定著他的安全性,因此當數據量很小時,我們可以考慮採用非對稱加密演算法。
4.在實際的操作過程中,我們通常採用的方式是:採用非對稱加密演算法管理對稱演算法的密鑰,然後用對稱加密演算法加密數據,這樣我們就集成了兩類加密演算法的優點,既實現了加密速度快的優點,又實現了安全方便管理密鑰的優點。
那採用多少位的密鑰呢?
RSA建議採用1024位的數字,ECC建議採用160位,AES採用128為即可。
㈥ 圖文徹底搞懂非對稱加密(公鑰密鑰)
前文詳細講解了對稱加密及演算法原理。那麼是不是對稱加密就萬無一失了呢?對稱加密有一個天然的缺點,就是加密方和解密方都要持有同樣的密鑰。你可以能會提出疑問:既然要加、解密,當然雙方都要持有密鑰,這有什麼問題呢?別急,我們繼續往下看。
我們先看一個例子,小明和小紅要進行通信,但是不想被其他人知道通信的內容,所以雙方決定採用對稱加密的方式。他們做了下面的事情:
1、雙方商定了加密和解密的演算法
2、雙方確定密鑰
3、通信過程中採用這個密鑰進行加密和解密
這是不是一個看似完美的方案?但其中有一個步驟存在漏洞!
問題出在步驟2:雙方確定密鑰!
你肯定會問,雙方不確定密鑰,後面的加、解密怎麼做?
問題在於確定下來的密鑰如何讓雙方都知道。密鑰在傳遞過程中也是可能被盜取的!這里引出了一個經典問題:密鑰配送問題。
小明和小紅在商定密鑰的過程中肯定會多次溝通密鑰是什麼。即使單方一次確定下來,也要發給對方。加密是為了保證信息傳輸的安全,但密鑰本身也是信息,密鑰的傳輸安全又該如何保證呢?難不成還要為密鑰的傳輸再做一次加密?這樣不就陷入了死循環?
你是不是在想,密鑰即使被盜取,不還有加密演算法保證信息安全嗎?如果你真的有這個想法,那麼趕緊復習一下上一篇文章講的杜絕隱蔽式安全性。任何演算法最終都會被破譯,所以不能依賴演算法的復雜度來保證安全。
小明和小紅現在左右為難,想加密就要給對方發密鑰,但發密鑰又不能保證密鑰的安全。他們應該怎麼辦呢?
有如下幾種解決密鑰配送問題的方案:
非對稱加密也稱為公鑰密碼。我更願意用非對稱加密這種叫法。因為可以體現出加密和解密使用不同的密鑰。
對稱加密中,我們只需要一個密鑰,通信雙方同時持有。而非對稱加密需要4個密鑰。通信雙方各自准備一對公鑰和私鑰。其中公鑰是公開的,由信息接受方提供給信息發送方。公鑰用來對信息加密。私鑰由信息接受方保留,用來解密。既然公鑰是公開的,就不存在保密問題。也就是說非對稱加密完全不存在密鑰配送問題!你看,是不是完美解決了密鑰配送問題?
回到剛才的例子,小明和下紅經過研究發現非對稱加密能解決他們通信的安全問題,於是做了下面的事情:
1、小明確定了自己的私鑰 mPrivateKey,公鑰 mPublicKey。自己保留私鑰,將公鑰mPublicKey發給了小紅
2、小紅確定了自己的私鑰 hPrivateKey,公鑰 hPublicKey。自己保留私鑰,將公鑰 hPublicKey 發給了小明
3、小明發送信息 「周六早10點soho T1樓下見」,並且用小紅的公鑰 hPublicKey 進行加密。
4、小紅收到信息後用自己的私鑰 hPrivateKey 進行解密。然後回復 「收到,不要遲到」 並用小明的公鑰mPublicKey加密。
5、小明收到信息後用自己的私鑰 mPrivateKey 進行解密。讀取信息後心裡暗想:還提醒我不遲到?每次遲到的都是你吧?
以上過程是一次完整的request和response。通過這個例子我們梳理出一次信息傳輸的非對稱加、解密過程:
1、消息接收方准備好公鑰和私鑰
2、私鑰接收方自己留存、公鑰發布給消息發送方
3、消息發送方使用接收方公鑰對消息進行加密
4、消息接收方用自己的私鑰對消息解密
公鑰只能用做數據加密。公鑰加密的數據,只能用對應的私鑰才能解密。這是非對稱加密的核心概念。
下面我用一個更為形象的例子來幫助大家理解。
我有下圖這樣一個信箱。
由於我只想接收我期望與之通信的朋友信件。於是我在投遞口加了一把鎖,這把鎖的鑰匙(公鑰)我可以復制n份,發給我想接受其信件的人。只有這些人可以用這把鑰匙打開寄信口,把信件投入。
相信通過這個例子,可以幫助大家徹底理解公鑰和私鑰的概念。
RSA 是現在使用最為廣泛的非對稱加密演算法,本節我們來簡單介紹 RSA 加解密的過程。
RSA 加解密演算法其實很簡單:
密文=明文^E mod N
明文=密文^D mod N
RSA 演算法並不會像對稱加密一樣,用玩魔方的方式來打亂原始信息。RSA 加、解密中使用了是同樣的數 N。公鑰是公開的,意味著 N 也是公開的。所以私鑰也可以認為只是 D。
我們接下來看一看 N、E、D 是如何計算的。
1、求 N
首先需要准備兩個很大質數 a 和 b。太小容易破解,太大計算成本太高。我們可以用 512 bit 的數字,安全性要求高的可以使用 1024,2048 bit。
N=a*b
2、求 L
L 只是生成密鑰對過程中產生的數,並不參與加解密。L 是 (a-1) 和 (b-1) 的最小公倍數
3、求 E(公鑰)
E 有兩個限制:
1<E<
E和L的最大公約數為1
第一個條件限制了 E 的取值范圍,第二個條件是為了保證有與 E 對應的解密時用到的 D。
4、求 D(私鑰)
D 也有兩個限制條件:
1<D<L
E*D mod L = 1
第二個條件確保密文解密時能夠成功得到原來的明文。
由於原理涉及很多數學知識,這里就不展開細講,我們只需要了解這個過程中用到這幾個數字及公式。這是理解RSA 安全性的基礎。
由於 N 在公鑰中是公開的,那麼只需要破解 D,就可以解密得到明文。
在實際使用場景中,質數 a,b 一般至少1024 bit,那麼 N 的長度在 2048 bit 以上。D 的長度和 N 接近。以現在計算機的算力,暴力破解 D 是非常困難的。
公鑰是公開的,也就是說 E 和 N 是公開的,那麼是否可以通過 E 和 N 推斷出 D 呢?
E*D mod L = 1
想要推算出 D 就需要先推算出 L。L 是 (a-1) 和 (b-1) 的最小公倍數。想知道 L 就需要知道質數 a 和 b。破解者並不知道這兩個質數,想要破解也只能通過暴力破解。這和直接破解 D 的難度是一樣的。
等等,N 是公開的,而 N = a*b。那麼是否可以對 N 進行質因數分解求得 a 和 b 呢?好在人類還未發現高效進行質因數分解的方法,因此可以認為做質因數分解非常困難。
但是一旦某一天發現了快速做質因數分解的演算法,那麼 RSA 就不再安全
我們可以看出大質數 a 和 b 在 RSA 演算法中的重要性。保證 a 和 b 的安全也就確保了 RSA 演算法的安全性。a 和 b 是通過偽隨機生成器生成的。一旦偽隨機數生成器的演算法有問題,導致隨機性很差或者可以被推斷出來。那麼 RSA 的安全性將被徹底破壞。
中間人攻擊指的是在通信雙方的通道上,混入攻擊者。他對接收方偽裝成發送者,對放送放偽裝成接收者。
他監聽到雙方發送公鑰時,偷偷將消息篡改,發送自己的公鑰給雙方。然後自己則保存下來雙方的公鑰。
如此操作後,雙方加密使用的都是攻擊者的公鑰,那麼後面所有的通信,攻擊者都可以在攔截後進行解密,並且篡改信息內容再用接收方公鑰加密。而接收方拿到的將會是篡改後的信息。實際上,發送和接收方都是在和中間人通信。
要防範中間人,我們需要使用公鑰證書。這部分內容在下一篇文章里會做介紹。
和對稱加密相比較,非對稱加密有如下特點:
1、非對稱加密解決了密碼配送問題
2、非對稱加密的處理速度只有對稱加密的幾百分之一。不適合對很長的消息做加密。
3、1024 bit 的 RSA不應該在被新的應用使用。至少要 2048 bit 的 RSA。
RSA 解決了密碼配送問題,但是效率更低。所以有些時候,根據需求可能會配合使用對稱和非對稱加密,形成混合密碼系統,各取所長。
最後提醒大家,RSA 還可以用於簽名,但要注意是私鑰簽名,公鑰驗簽。發信方用自己的私鑰簽名,收信方用對方公鑰驗簽。關於簽名,後面的文章會再詳細講解。
㈦ 對稱加密和非對稱加密的區別是什麼
對稱加密技術的特點如下:
1、加密方和解密方使用同一密鑰。
2、加密和解密的速度比較快,適用於需要加密的數據量比較大時。
3、密鑰傳輸的過程不安全,且容易被破解,密鑰管理也比較麻煩。
非對稱加密技術的特點如下:
1、每個用戶擁有一對密鑰加密:公鑰和私鑰。
2、公鑰加密,私鑰解密;私鑰加密,公鑰解密。
3、由於公鑰使用的密鑰長度非常長,因此公鑰加密速度非常慢,一般不使用它對大數據量進行加密。
4、某一個用戶用自己的私鑰加密,其他用戶用這個用戶的公鑰解密,實現數字簽名。
非對稱加密演算法的運行速度比對稱加密演算法的速度慢很多,當需要加密大量的數據時,建議採用對稱加密演算法,提高加解密速度。對稱加密演算法不能實現簽名,因此簽名只能使用非對稱演算法。
由於對稱加密演算法的密鑰管理是一個復雜的過程,密鑰的管理直接決定著它的安全性,因此當數據量很小時,還是要考慮採用非對稱加密演算法。
㈧ 什麼是非對稱加密
非對稱加密演算法是一種密鑰的保密方法。
非對稱加密演算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種演算法叫作非對稱加密演算法。 非對稱加密演算法實現機密信息交換的基本過程是:甲方生成一對密鑰並將其中的一把作為公用密鑰向其它方公開;得到該公用密鑰的乙方使用該密鑰對機密信息進行加密後再發送給甲方;甲方再用自己保存的另一把專用密鑰對加密後的信息進行解密。
另一方面,甲方可以使用乙方的公鑰對機密信息進行簽名後再發送給乙方;乙方再用自己的私匙對數據進行驗簽。
甲方只能用其專用密鑰解密由其公用密鑰加密後的任何信息。 非對稱加密演算法的保密性比較好,它消除了最終用戶交換密鑰的需要。
非對稱密碼體制的特點:演算法強度復雜、安全性依賴於演算法與密鑰但是由於其演算法復雜,而使得加密解密速度沒有對稱加密解密的速度快。對稱密碼體制中只有一種密鑰,並且是非公開的,如果要解密就得讓對方知道密鑰。所以保證其安全性就是保證密鑰的安全,而非對稱密鑰體制有兩種密鑰,其中一個是公開的,這樣就可以不需要像對稱密碼那樣傳輸對方的密鑰了。這樣安全性就大了很多。
㈨ 非對稱加密演算法 (RSA、DSA、ECC、DH)
非對稱加密需要兩個密鑰:公鑰(publickey) 和私鑰 (privatekey)。公鑰和私鑰是一對,如果用公鑰對數據加密,那麼只能用對應的私鑰解密。如果用私鑰對數據加密,只能用對應的公鑰進行解密。因為加密和解密用的是不同的密鑰,所以稱為非對稱加密。
非對稱加密演算法的保密性好,它消除了最終用戶交換密鑰的需要。但是加解密速度要遠遠慢於對稱加密,在某些極端情況下,甚至能比對稱加密慢上1000倍。
演算法強度復雜、安全性依賴於演算法與密鑰但是由於其演算法復雜,而使得加密解密速度沒有對稱加密解密的速度快。對稱密碼體制中只有一種密鑰,並且是非公開的,如果要解密就得讓對方知道密鑰。所以保證其安全性就是保證密鑰的安全,而非對稱密鑰體制有兩種密鑰,其中一個是公開的,這樣就可以不需要像對稱密碼那樣傳輸對方的密鑰了。這樣安全性就大了很多。
RSA、Elgamal、背包演算法、Rabin、D-H、ECC (橢圓曲線加密演算法)。使用最廣泛的是 RSA 演算法,Elgamal 是另一種常用的非對稱加密演算法。
收信者是唯一能夠解開加密信息的人,因此收信者手裡的必須是私鑰。發信者手裡的是公鑰,其它人知道公鑰沒有關系,因為其它人發來的信息對收信者沒有意義。
客戶端需要將認證標識傳送給伺服器,此認證標識 (可能是一個隨機數) 其它客戶端可以知道,因此需要用私鑰加密,客戶端保存的是私鑰。伺服器端保存的是公鑰,其它伺服器知道公鑰沒有關系,因為客戶端不需要登錄其它伺服器。
數字簽名是為了表明信息沒有受到偽造,確實是信息擁有者發出來的,附在信息原文的後面。就像手寫的簽名一樣,具有不可抵賴性和簡潔性。
簡潔性:對信息原文做哈希運算,得到消息摘要,信息越短加密的耗時越少。
不可抵賴性:信息擁有者要保證簽名的唯一性,必須是唯一能夠加密消息摘要的人,因此必須用私鑰加密 (就像字跡他人無法學會一樣),得到簽名。如果用公鑰,那每個人都可以偽造簽名了。
問題起源:對1和3,發信者怎麼知道從網上獲取的公鑰就是真的?沒有遭受中間人攻擊?
這樣就需要第三方機構來保證公鑰的合法性,這個第三方機構就是 CA (Certificate Authority),證書中心。
CA 用自己的私鑰對信息原文所有者發布的公鑰和相關信息進行加密,得出的內容就是數字證書。
信息原文的所有者以後發布信息時,除了帶上自己的簽名,還帶上數字證書,就可以保證信息不被篡改了。信息的接收者先用 CA給的公鑰解出信息所有者的公鑰,這樣可以保證信息所有者的公鑰是真正的公鑰,然後就能通過該公鑰證明數字簽名是否真實了。
RSA 是目前最有影響力的公鑰加密演算法,該演算法基於一個十分簡單的數論事實:將兩個大素數相乘十分容易,但想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰,即公鑰,而兩個大素數組合成私鑰。公鑰是可發布的供任何人使用,私鑰則為自己所有,供解密之用。
A 要把信息發給 B 為例,確定角色:A 為加密者,B 為解密者。首先由 B 隨機確定一個 KEY,稱之為私鑰,將這個 KEY 始終保存在機器 B 中而不發出來;然後,由這個 KEY 計算出另一個 KEY,稱之為公鑰。這個公鑰的特性是幾乎不可能通過它自身計算出生成它的私鑰。接下來通過網路把這個公鑰傳給 A,A 收到公鑰後,利用公鑰對信息加密,並把密文通過網路發送到 B,最後 B 利用已知的私鑰,就能對密文進行解碼了。以上就是 RSA 演算法的工作流程。
由於進行的都是大數計算,使得 RSA 最快的情況也比 DES 慢上好幾倍,無論是軟體還是硬體實現。速度一直是 RSA 的缺陷。一般來說只用於少量數據加密。RSA 的速度是對應同樣安全級別的對稱密碼演算法的1/1000左右。
比起 DES 和其它對稱演算法來說,RSA 要慢得多。實際上一般使用一種對稱演算法來加密信息,然後用 RSA 來加密比較短的公鑰,然後將用 RSA 加密的公鑰和用對稱演算法加密的消息發送給接收方。
這樣一來對隨機數的要求就更高了,尤其對產生對稱密碼的要求非常高,否則的話可以越過 RSA 來直接攻擊對稱密碼。
和其它加密過程一樣,對 RSA 來說分配公鑰的過程是非常重要的。分配公鑰的過程必須能夠抵擋中間人攻擊。假設 A 交給 B 一個公鑰,並使 B 相信這是A 的公鑰,並且 C 可以截下 A 和 B 之間的信息傳遞,那麼 C 可以將自己的公鑰傳給 B,B 以為這是 A 的公鑰。C 可以將所有 B 傳遞給 A 的消息截下來,將這個消息用自己的密鑰解密,讀這個消息,然後將這個消息再用 A 的公鑰加密後傳給 A。理論上 A 和 B 都不會發現 C 在偷聽它們的消息,今天人們一般用數字認證來防止這樣的攻擊。
(1) 針對 RSA 最流行的攻擊一般是基於大數因數分解。1999年,RSA-155 (512 bits) 被成功分解,花了五個月時間(約8000 MIPS 年)和224 CPU hours 在一台有3.2G 中央內存的 Cray C916計算機上完成。
RSA-158 表示如下:
2009年12月12日,編號為 RSA-768 (768 bits, 232 digits) 數也被成功分解。這一事件威脅了現通行的1024-bit 密鑰的安全性,普遍認為用戶應盡快升級到2048-bit 或以上。
RSA-768表示如下:
(2) 秀爾演算法
量子計算里的秀爾演算法能使窮舉的效率大大的提高。由於 RSA 演算法是基於大數分解 (無法抵抗窮舉攻擊),因此在未來量子計算能對 RSA 演算法構成較大的威脅。一個擁有 N 量子位的量子計算機,每次可進行2^N 次運算,理論上講,密鑰為1024位長的 RSA 演算法,用一台512量子比特位的量子計算機在1秒內即可破解。
DSA (Digital Signature Algorithm) 是 Schnorr 和 ElGamal 簽名演算法的變種,被美國 NIST 作為 DSS (DigitalSignature Standard)。 DSA 是基於整數有限域離散對數難題的。
簡單的說,這是一種更高級的驗證方式,用作數字簽名。不單單只有公鑰、私鑰,還有數字簽名。私鑰加密生成數字簽名,公鑰驗證數據及簽名,如果數據和簽名不匹配則認為驗證失敗。數字簽名的作用就是校驗數據在傳輸過程中不被修改,數字簽名,是單向加密的升級。
橢圓加密演算法(ECC)是一種公鑰加密演算法,最初由 Koblitz 和 Miller 兩人於1985年提出,其數學基礎是利用橢圓曲線上的有理點構成 Abel 加法群上橢圓離散對數的計算困難性。公鑰密碼體制根據其所依據的難題一般分為三類:大整數分解問題類、離散對數問題類、橢圓曲線類。有時也把橢圓曲線類歸為離散對數類。
ECC 的主要優勢是在某些情況下它比其他的方法使用更小的密鑰 (比如 RSA),提供相當的或更高等級的安全。ECC 的另一個優勢是可以定義群之間的雙線性映射,基於 Weil 對或是 Tate 對;雙線性映射已經在密碼學中發現了大量的應用,例如基於身份的加密。不過一個缺點是加密和解密操作的實現比其他機制花費的時間長。
ECC 被廣泛認為是在給定密鑰長度的情況下,最強大的非對稱演算法,因此在對帶寬要求十分緊的連接中會十分有用。
比特幣錢包公鑰的生成使用了橢圓曲線演算法,通過橢圓曲線乘法可以從私鑰計算得到公鑰, 這是不可逆轉的過程。
https://github.com/esxgx/easy-ecc
Java 中 Chipher、Signature、KeyPairGenerator、KeyAgreement、SecretKey 均不支持 ECC 演算法。
https://www.jianshu.com/p/58c1750c6f22
DH,全稱為"Diffie-Hellman",它是一種確保共享 KEY 安全穿越不安全網路的方法,也就是常說的密鑰一致協議。由公開密鑰密碼體制的奠基人 Diffie 和 Hellman 所提出的一種思想。簡單的說就是允許兩名用戶在公開媒體上交換信息以生成"一致"的、可以共享的密鑰。也就是由甲方產出一對密鑰 (公鑰、私鑰),乙方依照甲方公鑰產生乙方密鑰對 (公鑰、私鑰)。
以此為基線,作為數據傳輸保密基礎,同時雙方使用同一種對稱加密演算法構建本地密鑰 (SecretKey) 對數據加密。這樣,在互通了本地密鑰 (SecretKey) 演算法後,甲乙雙方公開自己的公鑰,使用對方的公鑰和剛才產生的私鑰加密數據,同時可以使用對方的公鑰和自己的私鑰對數據解密。不單單是甲乙雙方兩方,可以擴展為多方共享數據通訊,這樣就完成了網路交互數據的安全通訊。
具體例子可以移步到這篇文章: 非對稱密碼之DH密鑰交換演算法
參考:
https://blog.csdn.net/u014294681/article/details/86705999
https://www.cnblogs.com/wangzxblog/p/13667634.html
https://www.cnblogs.com/taoxw/p/15837729.html
https://www.cnblogs.com/fangfan/p/4086662.html
https://www.cnblogs.com/utank/p/7877761.html
https://blog.csdn.net/m0_59133441/article/details/122686815
https://www.cnblogs.com/muliu/p/10875633.html
https://www.cnblogs.com/wf-zhang/p/14923279.html
https://www.jianshu.com/p/7a927db713e4
https://blog.csdn.net/ljx1400052550/article/details/79587133
https://blog.csdn.net/yuanjian0814/article/details/109815473