非對稱加密演算法主要包括RSA、Elgamal、背包演算法、Rabin、D-H、ECC(即橢圓曲線加密演算法)等。
首先,我們來理解什麼是非對稱加密演算法。非對稱加密演算法是一種使用兩個不同密鑰進行加密和解密的演算法,這兩個密鑰分別是公鑰和私鑰。公鑰是公開的,任何人都可以用其進行加密操作,但解密則必須使用與之配對的私鑰,而私鑰是保密的,只有密鑰對的所有者才知曉。這種演算法的安全性主要依賴於從公鑰推導出私鑰的困難性。
RSA是非對稱加密演算法中最著名且應用最廣泛的一種。RSA演算法基於大數分解問題的困難性,其安全性隨著密鑰長度的增加而增強。在RSA加密過程中,發送方使用接收方的公鑰對信息進行加密,接收方則使用自己的私鑰進行解密,從而確保了信息的保密性。此外,RSA還可以用於數字簽名,驗證信息的完整性和發送者的身份。
除了RSA,ECC(橢圓曲線加密演算法)也是近年來備受關注的非對稱加密演算法。ECC基於橢圓曲線離散對數問題的困難性,與RSA相比,其在達到相同安全級別時所需的密鑰長度更短,因此更適合在資源有限的環境中使用,如移動設備或物聯網設備。ECC的高效性和靈活性使其在現代密碼學中佔有重要地位。
總的來說,非對稱加密演算法以其獨特的公私鑰機制和強大的安全性,在數據安全領域發揮著不可替代的作用。無論是廣泛應用於網路通信的RSA,還是高效靈活的ECC,都在保護我們的數據安全方面做出了巨大貢獻。隨著技術的不斷發展,非對稱加密演算法將繼續演化,為我們的生活帶來更多便利和安全保障。
另外,值得注意的是,雖然非對稱加密演算法具有很高的安全性,但在實際應用中仍需結合其他安全措施,如定期更換密鑰、使用強密碼等,以構建一個多層次、全方位的安全防護體系。同時,隨著量子計算的快速發展,傳統的非對稱加密演算法可能面臨新的挑戰,因此密碼學領域的研究者也在不斷探索和研發新的抗量子密碼演算法,以應對未來可能出現的安全威脅。
B. 非對稱加密演算法 (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
C. 誰能通俗地講下RSA演算法
RSA演算法是1978年出現的一種非對稱密碼演算法,它能夠同時用於數據加密和數字簽名,因此在信息安全領域有著廣泛的應用。演算法的名字是以它的發明者Ron Rivest, Adi Shamir 和Leonard Adleman的名字命名。
作為一種非對稱演算法,RSA需要一對密鑰,一個用於加密,另一個用於解密。這一對密鑰是由三個參數n、e1、e2來定義的。n是兩個大質數p和q的乘積,而n的二進製表示所佔用的位數則被稱為密鑰長度。
e1和e2是一對相關的值。e1可以任意選取,但必須與(p-1)*(q-1)互質。接下來,我們選擇e2,確保(e2*e1)對(p-1)*(q-1)取模的結果等於1。此時,(n及e1)和(n及e2)就組成了我們需要的密鑰對。
在RSA加解密過程中,明文A和密文B之間有著簡單的數學關系。加密時,我們使用公鑰進行加密,即A=B^e1 mod n;解密時,則使用私鑰進行解密,B=A^e2 mod n。值得注意的是,e1和e2是可以互換使用的,即A也可以通過B^e2 mod n得到,B也可以通過A^e1 mod n得到。
總的來說,RSA演算法因其易於理解和操作而變得流行,它在保障信息安全方面起到了重要作用。
D. 非對稱加密演算法包括哪些
以下是幾種常見的非對稱加密演算法:
1. RSA演算法:作為最早廣泛應用的非對稱加密演算法之一,RSA演算法基於大數分解的難度。它通過生成一對密鑰(公鑰和私鑰)來實現加密和解密過程。
2. DSA演算法:DSA是一種數字簽名演算法,它依賴於整數分解的難題。該演算法用於生成和驗證數字簽名,確保消息的完整性和來源的真實性。
3. ECC演算法:ECC(橢圓曲線密碼學)基於橢圓曲線數學,它提供與傳統非對稱演算法相當的安全性,但使用更短的密鑰,從而提供更高的效率。
4. ElGamal演算法:ElGamal演算法基於離散對數問題,它用於加密通信和數字簽名。這種演算法在安全性和效率方面表現出良好的平衡,適用於多種安全需求。
這些演算法都是非對稱加密領域的關鍵技術,各自在不同場合有其獨特的優勢和局限性。選擇合適的演算法時應考慮安全性、性能和實際應用需求。
E. Hello,密碼學:第三部分,公鑰密碼(非對稱密碼)演算法
在 《Hello,密碼學:第二部分,對稱密碼演算法》 中講述了對稱密碼的概念,以及DES和AES兩種經典的對稱密碼演算法原理。既然有對稱密碼的說法,自然也就有非對稱密碼,也叫做公鑰密碼演算法。 對稱密碼和非對稱密碼兩種演算法的本質區別在於,加密密鑰和解密密鑰是否相同 :
公鑰密碼產生的初衷就是為了解決 密鑰配送 的問題。
Alice 給遠方的 Bob 寫了一封情意慢慢的信,並使用強悍的 AES-256 進行了加密,但她很快就意識到,光加密內容不行,必須要想一個安全的方法將加密密鑰告訴 Bob,如果將密鑰也通過網路發送,很可能被技術高手+偷窺癖的 Eve 竊聽到。
既要發送密鑰,又不能發送密鑰,這就是對稱密碼演算法下的「密鑰配送問題」 。
解決密鑰配送問題可能有這樣幾種方法:
這種方法比較高效,但有局限性:
與方法一不同,密鑰不再由通信個體來保存,而由密鑰分配中心(KDC)負責統一的管理和分配。 雙方需要加密通信時,由 KDC 生成一個用於本次通信的通信密鑰交由雙方,通信雙方只要與 KDC 事先共享密鑰即可 。這樣就大大減少密鑰的存儲和管理問題。
因此,KDC 涉及兩類密鑰:
領略下 KDC 的過程:
KDC 通過中心化的手段,確實能夠有效的解決方法一的密鑰管理和分配問題,安全性也還不錯。但也存在兩個顯著的問題:
使用公鑰密碼,加密密鑰和解密密鑰不同,只要擁有加密密鑰,所有人都能進行加密,但只有擁有解密密鑰的人才能進行解密。於是就出現了這個過程:
密鑰配送的問題天然被解決了。當然,解密密鑰丟失而導致信息泄密,這不屬於密鑰配送的問題。
下面,再詳細看下這個過程。
公鑰密碼流程的核心,可以用如下四句話來概述:
既然加密密鑰是公開的,因此也叫做 「公鑰(Public Key)」 。
既然解密密鑰是私有的,因此也叫做 「私鑰(Private Key) 。
公鑰和私鑰是一一對應的,稱為 「密鑰對」 ,他們好比相互糾纏的量子對, 彼此之間通過嚴密的數學計算關系進行關聯 ,不能分別單獨生成。
在公鑰密碼體系下,再看看 Alice 如何同 Bob 進行通信。
在公鑰密碼體系下,通信過程是由 Bob 開始啟動的:
過程看起來非常簡單,但為什麼即使公鑰被竊取也沒有關系?這就涉及了上文提到的嚴密的數學計算關系了。如果上一篇文章對稱密鑰的 DES 和 AES 演算法進行概述,下面一節也會對公鑰體系的數學原理進行簡要說明。
自從 Diffie 和 Hellman 在1976年提出公鑰密碼的設計思想後,1978年,Ron Rivest、Adi Shamir 和 Reonard Adleman 共同發表了一種公鑰密碼演算法,就是大名鼎鼎的 RSA,這也是當今公鑰密碼演算法事實上的標准。其實,公鑰密碼演算法還包括ElGamal、Rabin、橢圓曲線等多種演算法,這一節主要講述 RSA 演算法的基本數學原理。
一堆符號,解釋下,E 代表 Encryption,D 代表 Decryption,N 代表 Number。
從公式種能夠看出來,RSA的加解密數學公式非常簡單(即非常美妙)。 RSA 最復雜的並非加解密運算,而是如何生成密鑰對 ,這和對稱密鑰演算法是不太一樣的。 而所謂的嚴密的數學計算關系,就是指 E 和 D 不是隨便選擇的 。
密鑰對的生成,是 RSA 最核心的問題,RSA 的美妙與奧秘也藏在這裡面。
1. 求N
求 N 公式:N = p × q
其中, p 和 q 是兩個質數 ,而且應該是很大又不是極大的質數。如果太小的話,密碼就容易被破解;如果極大的話,計算時間就會很長。比如 512 比特的長度(155 位的十進制數字)就比較合適。
這樣的質數是如何找出來的呢? 需要通過 「偽隨機數生成器(PRNG)」 進行生成,然後再判斷其是否為質數 。如果不是,就需要重新生成,重新判斷。
2. 求L
求 L 公式:L = lcm(p-1, q-1)
lcm 代表 「最小公倍數(least common multiple)」 。注意,L 在加解密時都不需要, 僅出現在生成密鑰對的過程中 。
3. 求E
E 要滿足兩個條件:
1)1 < E < L
2)gcd(E,L) = 1
gcd 代表 「最大公約數(greatest common divisor)」 。gcd(E,L) = 1 就代表 「E 和 L 的最大公約數為1,也就是說, E 和 L 互質 」。
L 在第二步已經計算出來,而為了找到滿足條件的 E, 第二次用到 「偽隨機數生成器(PRNG)」 ,在 1 和 L 之間生成 E 的候選,判斷其是否滿足 「gcd(E,L) = 1」 的條件。
經過前三步,已經能夠得到密鑰對種的 「公鑰:{E, N}」 了。
4. 求D
D 要滿足兩個條件:
1)1 < D < L
2)E × D mod L = 1
只要 D 滿足上面的兩個條件,使用 {E, N} 進行加密的報文,就能夠使用 {D, N} 進行解密。
至此,N、L、E、D 都已經計算出來,再整理一下
模擬實踐的過程包括兩部分,第一部分是生成密鑰對,第二部分是對數據進行加解密。為了方便計算,都使用了較小的數字。
第一部分:生成密鑰對
1. 求N
准備兩個質數,p = 5,q = 7,N = 5 × 7 = 35
2. 求L
L = lcm(p-1, q-1) = lcm (4, 6) = 12
3. 求E
gcd(E, L) = 1,即 E 和 L 互質,而且 1 < E < L,滿足條件的 E 有多個備選:5、7、11,選擇最小的 5 即可。於是,公鑰 = {E, N} = {5, 35}
4. 求D
E × D mod L = 1,即 5 × D mod 12 = 1,滿足條件的 D 也有多個備選:5、17、41,選擇 17 作為 D(如果選擇 5 恰好公私鑰一致了,這樣不太直觀),於是,私鑰 = {D, N} = {17, 35}
至此,我們得到了公私鑰對:
第二部分:模擬加解密
明文我們也使用一個比較小的數字 -- 4,利用 RSA 的加密公式:
密文 = 明文 ^ E mod N = 4 ^ 5 mod 35 = 9
明文 = 密文 ^ D mod N = 9 ^ 17 mod 35 = 4
從這個模擬的小例子能夠看出,即使我們用了很小的數字,計算的中間結果也是超級大。如果再加上偽隨機數生成器生成一個數字,判斷其是否為質數等,這個過程想想腦仁兒就疼。還好,現代晶元技術,讓計算機有了足夠的運算速度。然而,相對於普通的邏輯運算,這類數學運算仍然是相當緩慢的。這也是一些非對稱密碼卡/套件中,很關鍵的性能規格就是密鑰對的生成速度
公鑰密碼體系中,用公鑰加密,用私鑰解密,公鑰公開,私鑰隱藏。因此:
加密公式為:密文 = 明文 ^ E mod N
破譯的過程就是對該公式進行逆運算。由於除了對明文進行冪次運算外, 還加上了「模運算」 ,因此在數學上, 該逆運算就不再是簡單的對數問題,而是求離散對數問題,目前已經在數學領域達成共識,尚未發現求離散對數的高效演算法 。
暴力破解的本質就是逐個嘗試。當前主流的 RSA 演算法中,使用的 p 和 q 都是 1024 位以上,這樣 N 的長度就是 2048 位以上。而 E 和 D 的長度和 N 差不多,因此要找出 D,就需要進行 2048 位以上的暴力破解。即使上文那個簡單的例子,算出( 蒙出 ) 「9 ^ D mod 35 = 4」 中的 D 也要好久吧。
因為 E 和 N 是已知的,而 D 和 E 在數學上又緊密相關(通過中間數 L),能否通過一種反向的演算法來求解 D 呢?
從這個地方能夠看出,p 和 q 是極為關鍵的,這兩個數字不泄密,幾乎無法通過公式反向計算出 D。也就是說, 對於 RSA 演算法,質數 p 和 q 絕不能被黑客獲取,否則等價於交出私鑰 。
既然不能靠搶,N = p × q,N是已知的,能不能通過 「質因數分解」 來推導 p 和 q 呢?或者說, 一旦找到一種高效的 「質因數分解」 演算法,就能夠破解 RSA 演算法了 。
幸運的是,這和上述的「離散對數求解」一樣,當下在數學上還沒有找到這種演算法,當然,也無法證明「質因數分解」是否真的是一個困難問題 。因此只能靠硬算,只是當前的算力無法在可現實的時間內完成。 這也是很多人都提到過的,「量子時代來臨,當前的加密體系就會崩潰」,從算力的角度看,或許如此吧 。
既不能搶,也不能算,能不能猜呢?也就是通過 「推測 p 和 q 進行破解」 。
p 和 q 是通過 PRNG(偽隨機數生成器)生成的,於是,又一個關鍵因素,就是採用的 偽隨機數生成器演算法要足夠隨機 。
隨機數對於密碼學極為重要,後面會專門寫一篇筆記 。
前三種攻擊方式,都是基於 「硬碰硬」 的思路,而 「中間人攻擊」 則換了一種迂迴的思路,不去嘗試破解密碼演算法,而是欺騙通信雙方,從而獲取明文。具體來說,就是: 主動攻擊者 Mallory 混入發送者和接收者之間,面對發送者偽裝成接收者,面對接收者偽裝成發送者。
這個過程可以重復多次。需要注意的是,中間人攻擊方式不僅能夠針對 RSA,還可以針對任何公鑰密碼。能夠看到,整個過程中,公鑰密碼並沒有被破譯,密碼體系也在正常運轉,但機密性卻出現了問題,即 Alice 和 Bob 之間失去了機密性,卻在 Alice 和 Mallory 以及 Mallory 和 Bob 之間保持了機密性。即使公鑰密碼強度再強大 N 倍也無濟於事。也就是說,僅僅依靠密碼演算法本身,無法防禦中間人攻擊 。
而能夠抵禦中間人攻擊的,就需要用到密碼工具箱的另一種武器 -- 認證 。在下面一篇筆記中,就將涉及這個話題。
好了,以上就是公鑰密碼的基本知識了。
公鑰密碼體系能夠完美的解決對稱密碼體系中 「密鑰配送」 這個關鍵問題,但是拋開 「中間人攻擊」 問題不談,公鑰密碼自己也有個嚴重的問題:
公鑰密碼處理速度遠遠低於對稱密碼。不僅體現在密鑰對的生成上,也體現在加解密運算處理上。
因此,在實際應用場景下,往往會將對稱密碼和公鑰密碼的優勢相結合,構建一個 「混合密碼體系」 。簡單來說: 首先用相對高效的對稱密碼對消息進行加密,保證消息的機密性;然後用公鑰密碼加密對稱密碼的密鑰,保證密鑰的機密性。
下面是混合密碼體系的加解密流程圖。整個體系分為左右兩個部分:左半部分加密會話密鑰的過程,右半部分是加密原始消息的過程。原始消息一般較長,使用對稱密碼演算法會比較高效;會話密鑰一般比較短(十幾個到幾十個位元組),即使公鑰密碼演算法運算效率較低,對會話密鑰的加解密處理也不會非常耗時。
著名的密碼軟體 PGP、SSL/TLS、視頻監控公共聯網安全建設規范(GB35114) 等應用,都運用了混合密碼系統。
好了,以上就是公鑰密碼演算法的全部內容了,拖更了很久,以後還要更加勤奮一些。
為了避免被傻啦吧唧的審核機器人處理,後面就不再附漂亮姑娘的照片(也是為了你們的健康),改成我的攝影作品,希望不要對收視率產生影響,雖然很多小伙兒就是沖著姑娘來的。
就從喀納斯之旅開始吧。