『壹』 公開密鑰基本原理
公開密鑰加密技術基本原理
現代加密技術中的加密演算法都是公開的,而密鑰是私有的。我們首先要對數據用加密演算法進行加密,讓接受方使用密鑰進行解密,這樣實現數據的安全傳輸。
加密和解密都會用到密鑰,如果沒有密鑰就無法對加密的文件進行解密,也就是說任何人只要持有了密鑰就可以解密,所以如果密鑰被攻擊者獲得加密就失去了意義。
共享密鑰加密方式 :加密和解密用同一個密鑰的方式稱為 共享密鑰加密 (Common Key crypto system), 也被叫做 對稱密鑰加密 。
採用對稱密鑰加密的方式,必須將密鑰也發給對方,不然對方無法解密。可究竟怎樣才能安全的將密鑰轉交給對方呢?在互聯網上傳播時,如果通訊被監聽,密鑰落入攻擊者之手,那加密就失去了意義。另外還得要有個辦法安全的保存收的密鑰。
發送密鑰就有被竊聽的風險,但是不發送密鑰,改派頃對羨兆方又無法解密。如果密鑰能夠可靠傳遞,那數據為什麼不能可靠傳遞呢?
公開密鑰加密方式 :公開密鑰加密使用了兩把 非對稱 的密鑰,一把叫做 私有密鑰 (private key) ,另一把叫做 公開密鑰 (public key).
在公開密鑰加密方法中,發送方使用接受方發布核陸的公開密鑰進行加密處理,然後發送給接受方,接受方收到加密信息後,再使用自己的私有密鑰進行解密。這種方式不需要發送用來解密的密鑰,也就不用擔心密鑰被攻擊者盜走的情況。
另外,要根據秘文和公開密鑰把信息回復到原文是異常困難的。目前技術而言,不太現實。
『貳』 簡述公開密鑰密碼機制的原理和特點
公開密鑰密碼體制是使用具有兩個密鑰的編碼解碼演算法,加密和解密的能力是分開的;
這兩個密鑰一個保密,另一個公圓橘開。根據應用的需要,發送孫腔激方可以使則襪用接收方的公開密鑰加密消息,或使用發送方的私有密鑰簽名消息,或兩個都使用,以完成某種類型的密碼編碼解碼功能。
『叄』 公鑰密碼體制的原理
自從1976年公鑰密來碼的思想提出自以來,國際上已經提出了許多種公鑰密碼體制。用抽象的觀點來看,公鑰密碼就是一種陷門單向函數。
我們說一個函數f是單向函數,即若對它的定義域中的任意x都易於計算f(x),而對f的值域中的幾乎所有的y,即使當f為已知時要計算f-l(y)在計算上也是不可行的。若當給定某些輔助信息(陷門信息)時則易於計算f-l(y),就稱單向函數f是一個陷門單向函數。公鑰密碼體制就是基於這一原理而設計的,將輔助信息(陷門信息)作為秘密密鑰。這類密碼的安全強度取決於它所依據的問題的計算復雜度。
目前比較流行的公鑰密碼體制主要有兩類:一類是基於大整數因子分解問題的,其中最典型的代表是RSA體制。另一類是基於離散對數問題的,如ElGamal公鑰密碼體制和影響比較大的橢圓曲線公鑰密碼體制。
公鑰密碼
一般要求:
1、加密解密演算法相同,但使用不同的密鑰
2、發送方擁有加密或解密密鑰,而接收方擁有另一個密鑰
安全性要求:
1、兩個密鑰之一必須保密
2、無解密密鑰,解密不可行
3、知道演算法和其中一個密鑰以及若干密文不能確定另一個密鑰
『肆』 圓錐曲線公鑰密碼演算法原理
圓錐曲線公鑰密碼演算法(ECC)是一種基於橢圓曲線理論的加密演算法,它與RSA演算法和DSA演算法一起滑畝被廣泛使用於數字簽名、加密、身份認證等安全領域。ECC演算法的優點在於具有較高的安全性和較小的密鑰長度,相比於RSA演算法和DSA演算法,ECC演算法需要更短的密鑰長度才能實現相應的安全級別,這使得它在實際應用中更加實用。
ECC演算法的基本原理是利用橢圓曲線上的點(生成器)的特殊性質,從而實現加密和解密的過程。ECC演算法中的密鑰對包括私鑰和公鑰,私鑰只有擁有者才知道,公鑰可以公開。任何人都可以使用公鑰對數據進行加密,但只有私鑰擁有者才能解密數據。
ECC演算法的具體加密過程如下:
1. 選取橢圓曲線上一個點作為生成器(通常是事先確定好的一個點),將該點設為基點。
2. 假設私鑰為k,從基點開始計算k倍點,得到公鑰,即k倍點。公鑰可以公開,即使攻擊者擁有公鑰,也難以推測出私鑰。
3. 將公鑰與明文進行運算,得到襲型密文。
4. 發送密文給接收者。
5. 接收者可以利用私鑰將密文解密,得到明文。
通過利用橢圓曲線上的點特殊的運算規律,ECC演算法能夠實現高效、安全的加密和解密,其運算速度比RSA演算法和DSA演算法信禪森更快。ECC演算法被廣泛應用於移動通信、物聯網、智能卡、數字認證等領域。
『伍』 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) 等應用,都運用了混合密碼系統。
好了,以上就是公鑰密碼演算法的全部內容了,拖更了很久,以後還要更加勤奮一些。
為了避免被傻啦吧唧的審核機器人處理,後面就不再附漂亮姑娘的照片(也是為了你們的健康),改成我的攝影作品,希望不要對收視率產生影響,雖然很多小伙兒就是沖著姑娘來的。
就從喀納斯之旅開始吧。