如果要給世界上所有演算法按重要程度排個序,那我覺得「公鑰加密演算法」一定是排在最前邊的,因為它是現代計算機通信安全的基石,保證了加密數據的安全。
01 對稱加密演算法
在非對稱加密出現以前,普遍使用的是對稱加密演算法。所謂對稱加密,就是加密和解密是相反的操作,對數據進行解密,只要按加密的方式反向操作一遍就可以獲得對應的原始數據了,舉一個簡單的例子,如果要對字元串"abc"進行加密,先獲取它們的ANSCII碼為:97 98 99;密鑰為+2,加密後的數據就是:99 100 101,將密文數據發送出去。接收方收到數據後對數據進行解密,每個數據減2,就得到了原文。當然這只是一個非常簡單的例子,真實的對稱加密演算法會做得非常復雜,但這已經能夠說明問題了。
這樣的加密方法有什麼缺點呢?首先缺點一:密鑰傳遞困難;想想看如果兩個人,分別是Bob和Alice,Bob要給Alice發消息,那Bob就要把密鑰通過某種方式告訴Alice,有什麼可靠的途徑呢?打電話、發郵件、寫信...等等方式好像都不靠譜,都有被竊取的風險,也只有兩人見面後當面交流這一種方式了;缺點二:密鑰數量會隨著通信人數的增加而急劇增加,密鑰管理將會是一個非常困難的事情。
02 非對稱加密演算法
1976年,兩位美國計算機學家,提出了Diffie-Hellman密鑰交換演算法。這個演算法的提出了一種嶄新的構思,可以在不直接傳遞密鑰的情況下,完成解密。這個演算法啟發了其他科學家,讓人們認識到,加密和解密可以使用不同的規則,只要這兩種規則之間存在某種對應的關系即可,這樣就避免了直接傳遞密鑰。這種新的加密模式就是「非對稱加密演算法」。
演算法大致過程是這樣的:
(1)乙方 生成兩把密鑰(公鑰和私鑰)。公鑰是公開的,任何人都可以獲得,私鑰則是保密的。
(2)甲方獲取乙方的公鑰,然後用它對信息加密。
(3)乙方得到加密後的信息,用私鑰解密。
如果公鑰加密的信息只有私鑰解得開,那麼只要私鑰不泄漏,通信就是安全的。
03 RSA非對稱加密演算法
1977年,三位數學家Rivest、Shamir 和 Adleman 設計了一種演算法,可以實現非對稱加密。這種演算法用他們三個人的名字命名,叫做RSA演算法。
從那時直到現在,RSA演算法一直是最廣為使用的"非對稱加密演算法"。毫不誇張地說,只要有計算機網路的地方,就有RSA演算法。這種演算法非常可靠,密鑰越長,它就越難破解。根據已經披露的文獻,目前被破解的最長RSA密鑰是768個二進制位。也就是說,長度超過768位的密鑰,還無法破解(至少沒人公開宣布)。因此可以認為,1024位的RSA密鑰基本安全,2048位的密鑰極其安全。
公鑰加密 -> 私鑰解密
只有私鑰持有方可以正確解密,保證通信安全
私鑰加密 -> 公鑰解密
所有人都可以正確解密,信息一定是公鑰所對應的私鑰持有者發出的,可以做簽名
04 質數的前置知識
RSA的安全性是由大數的質因數分解保證的。下面是一些質數的性質:
1、任意兩個質數構成素質關系,比如:11和17;
2、一個數是質數,另一個數只要不是前者的倍數,兩者就構成素質關系,比如3和10;
3、如果兩個數之中,較大的那個是質數,則兩者構成互質關系,比如97和57;
4、1和任意一個自然數都是互質關系,比如1和99;
5、p是大於1的整數,則p和p-1構成互質關系,比如57和56;
6、p是大於1的奇數,則p和p-2構成互質關系,比如17和15
05 RSA密鑰生成步驟
舉個「栗子「,假如通信雙方為Alice和Bob,Alice要怎麼生成公鑰和私鑰呢?
St ep 1:隨機選擇兩個不相等的質數p和q;
Alice選擇了3和11。(實際情況中,選擇的越大,就越難破解)
S tep 2 :計算p和q的乘積n;
n = 3*11 = 33,將33轉化為二進制:100001,這個時候密鑰長度就是6位。
Step 3 :計算n的歐拉函數φ(n);
因為n可以寫為兩個質數相乘的形式,歐拉函數對於可以寫成兩個質數形式有簡單計算方式
φ(n) = (p-1)(q-1)
Step 4 :隨機選擇一個整數e,條件是1< e < φ(n),且e與φ(n) 互質;
愛麗絲就在1到20之間,隨機選擇了3
Step 5 :計算e對於φ(n)的模反元素d
所謂模反元素,就是指有一個整數d,可以使得ed被φ(n)除的余數為1
Step 6 :將n和e封裝成公鑰,n和d封裝成私鑰;
在上面的例子中,n=33,e=3,d=7,所以公鑰就是 (33,3),私鑰就是(33, 7)。
密鑰生成步驟中,一共出現了六個數字,分別為:
素質的兩個數p和q,乘積n,歐拉函數φ(n),隨機質數e,模反元素d
這六個數字之中,公鑰用到了兩個(n和e),其餘四個數字都是不公開的,可以刪除。其中最關鍵的是d,因為n和d組成了私鑰,一旦d泄漏,就等於私鑰泄漏。
那麼,有無可能在已知n和e的情況下,推導出d?
(1)ed 1 (mod φ(n))。只有知道e和φ(n),才能算出d。
(2)φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。
(3)n=pq。只有將n因數分解,才能算出p和q。
結論是如果n可以被因數分解,d就可以算出,也就意味著私鑰被破解。
BUT!
大整數的因數分解,是一件非常困難的事情。目前,除了暴力破解,還沒有發現別的有效方法。
維基網路這樣寫道:
"對極大整數做因數分解的難度決定了RSA演算法的可靠性。換言之,對一極大整數做因數分解愈困難,RSA演算法愈可靠。
假如有人找到一種快速因數分解的演算法,那麼RSA的可靠性就會極度下降。但找到這樣的演算法的可能性是非常小的。今天只有較短的RSA密鑰才可能被暴力破解。到現在為止,世界上還沒有任何可靠的攻擊RSA演算法的方式。
只要密鑰長度足夠長,用RSA加密的信息實際上是不能被解破的。"
06 RSA加密和解密過程
1、加密要用公鑰(n,e)
假設鮑勃要向愛麗絲發送加密信息m,他就要用愛麗絲的公鑰 (n,e) 對m進行加密。
所謂"加密",就是算出下式的c:
愛麗絲的公鑰是 (33, 3),鮑勃的m假設是5,那麼可以算出下面的等式:
於是,c等於26,鮑勃就把26發給了愛麗絲。
2、解密要用私鑰(n,d)
愛麗絲拿到鮑勃發來的26以後,就用自己的私鑰(33, 7) 進行解密。下面的等式一定成立(至於為什麼一定成立,證明過程比較復雜,略):
也就是說,c的d次方除以n的余數為m。現在,c等於26,私鑰是(33, 7),那麼,愛麗絲算出:
因此,愛麗絲知道了鮑勃加密前的原文就是5。
至此,加密和解密的整個過程全部完成。整個過程可以看到,加密和解密使用不用的密鑰,且不用擔心密鑰傳遞過程中的泄密問題,這一點上與對稱加密有很大的不同。由於非對稱加密要進行的計算步驟復雜,所以通常情況下,是兩種演算法混合使用的。
07 一些其它的
在Part 5的第五步,要求一定要解出二元一次方程的一對正整數解,如果不存在正整數解,這該怎麼辦?
擴展歐幾里得演算法給出了解答:
對於不完全為 0 的非負整數 a,b,gcd(a,b)表示 a,b 的最大公約數,必然存在整數對 x,y ,使得 gcd(a,b)=ax+by;
第五步其實等價於:ed - kφ(n) = 1, e與φ(n)又互質,形式上完全與擴展歐幾里得演算法的一致,所以一定有整數解存在。
Reference:
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
『貳』 對稱加密演算法和非對稱加密演算法
常見的對稱加密演算法包括瑞士的國際數據加密演算法(International Data Encryption
Algorithm,IDEA)和美國的數據加密標准(Date Encryption Standard,DES)。
DES是一種迭代的分組密碼,明文和密文都是64位,使用一個56位的密鑰以及附加的8位奇偶校驗位。攻擊DES的主要技術是窮舉法,由於DES的密鑰長度較短,為了提高安全性,就出現了使用112位密鑰對數據進行三次加密的演算法(3DES),即用兩個56位的密鑰K1和K2,發送方用K1加密,K2解密,再使用K1加密;接收方則使用K1解密,K2加密,再使用K1解密,其效果相當於將密鑰長度加倍。
IDEA是在DES的基礎上發展起來的,類似於3DES。IDEA的明文和密文都是64位,密鑰長度為128位。
非對稱加密演算法也稱為公鑰加密演算法,是指加密密鑰和解密密鑰完全不同,其中一個為公鑰,另一個為私鑰,並且不可能從任何一個推導出另一個。它的優點在於可以適應開放性的使用環境,可以實現數字簽名與驗證。
最常見的非對稱加密演算法是RSA,該演算法的名字以發明者的名字命名:Ron Rivest,AdiShamir 和Leonard Adleman。RSA演算法的密鑰長度為512位。RSA演算法的保密性取決於數學上將一個大數分解為兩個素數的問題的難度,根據已有的數學方法,其計算量極大,破解很難。但是加密/解密時要進行大指數模運算,因此加密/解密速度很慢,主要用在數字簽名中。
用公鑰進行加密,用私鑰進行解密
『叄』 非對稱加密演算法有哪些
RSA、Elgamal、背包演算法、Rabin、D-H、ECC橢圓曲線加密演算法。
非對稱加密(公鑰加密):指加密和解密使用不同密鑰的加密演算法,也稱為公私鑰加密。假設兩個用戶要加密交換數據,雙方交換公鑰,使用時一方用對方的公鑰加密,另一方即可用自己的私鑰解密。如果企業中有n個用戶,企業需要生成n對密鑰,並分發n個公鑰。假設A用B的公鑰加密消息,用A的私鑰簽名,B接到消息後,首先用A的公鑰驗證簽名,確認後用自己的私鑰解密消息。由於公鑰是可以公開的,用戶只要保管好自己的私鑰即可,因此加密密鑰的分發將變得十分簡單。同時,由於每個用戶的私鑰是唯一的,其他用戶除了可以通過信息發送者的公鑰來驗證信息的來源是否真實,還可以通過數字簽名確保發送者無法否認曾發送過該信息。
『肆』 常見的非對稱加密演算法包括
包括rsa加密和橢圓加密演算法。
『伍』 非對稱加密和對稱加密
非對稱加密和對稱加密在加密和解密過程、加密解密速度、傳輸的安全性上都有所不同,具體介紹如下:
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為即可。
『陸』 非對稱加密演算法 (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
『柒』 常用的非對稱密鑰密碼演算法包括des
DES全稱為DataEncryptionStandard,即數據加密標准。
是一種使用密鑰加密的塊演算法,1977年被美國聯邦政府的國家標准局確定為聯邦資料處理標准(FIPS),並授權在非密級政府通信中使用,隨後該演算法在國際上廣泛流傳開來。
DES是對稱性加密里常見的一種,是一種使用秘鑰加密的塊演算法。秘鑰長度是64位(bit),超過位數秘鑰被忽略。所謂對稱性加密,加密和解密秘鑰相同。
對稱性加密一般會按照固定長度,把待加密字元串分成塊。不足一整塊或者剛好最後有特殊填充字元。
常見的填充有:'pkcs5'、'pkcs7'、'iso10126'、'ansix923'、'zero'類型,包括DES-ECB、DES-CBC、DES-CTR、DES-OFB、DES-CFB。
『捌』 非對稱加密的代表例子有哪些
非對稱加密主要演算法:RSA、Elgamal、背包演算法、Rabin、D-H、ECC(橢圓曲線加密演算法)。
使用最廣泛的是RSA演算法,Elgamal是另一種常用的非對稱加密演算法。
經典的非對稱加密演算法如RSA演算法等安全性都相當高.
非對稱加密的典型應用是數字簽名。
『玖』 常用的非對稱加密演算法有哪些
稱加密技術的優點加密一計算量下,速度快。缺點是,加密方和解密方必須協商好秘鑰,且保證秘鑰安全,如果一方泄露了秘鑰整個通信就會被破解,加密信息就不再安全了。
和對稱加密技術只使用一個秘鑰不同,非對稱機密技術使用兩個秘鑰進行加解密,一個叫做公鑰,一個叫做私鑰,私鑰自己來保管,公鑰可以公開,使用公鑰加密的數據必須使用私鑰解密,反之亦然公鑰和私鑰是兩個不同的秘鑰,因為這種加密方法被稱為非對稱幾秒技術。相比於對稱加密技術,非對稱加密技術安全性更好,但性能更慢。
在互聯網後端技術中非對稱加密技術主要用於登錄、數字簽名、數字證書認證等場景。
常用的非對稱加密演算法有:
RSA:RSA 是一種目前應用非常廣泛、歷史也比較悠久的非對稱秘鑰加密技術,在1977年被麻省理工學院的羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)三位科學家提出,由於難於破解,RSA 是目前應用最廣泛的數字加密和簽名技術,比如國內的支付寶就是通過RSA演算法來進行簽名驗證。它的安全程度取決於秘鑰的長度,目前主流可選秘鑰長度為 1024位、2048位、4096位等,理論上秘鑰越長越難於破解,按照維基網路上的說法,小於等於256位的秘鑰,在一台個人電腦上花幾個小時就能被破解,512位的秘鑰和768位的秘鑰也分別在1999年和2009年被成功破解,雖然目前還沒有公開資料證實有人能夠成功破解1024位的秘鑰,但顯然距離這個節點也並不遙遠,所以目前業界推薦使用 2048 位或以上的秘鑰,不過目前看 2048 位的秘鑰已經足夠安全了,支付寶的官方文檔上推薦也是2048位,當然更長的秘鑰更安全,但也意味著會產生更大的性能開銷。
DSA:既 Digital Signature Algorithm,數字簽名演算法,他是由美國國家標准與技術研究所(NIST)與1991年提出。和 RSA 不同的是 DSA 僅能用於數字簽名,不能進行數據加密解密,其安全性和RSA相當,但其性能要比RSA快。
ECDSA:Elliptic Curve Digital Signature Algorithm,橢圓曲線簽名演算法,是ECC(Elliptic curve cryptography,橢圓曲線密碼學)和 DSA 的結合,橢圓曲線在密碼學中的使用是在1985年由Neal Koblitz和Victor Miller分別獨立提出的,相比於RSA演算法,ECC 可以使用更小的秘鑰,更高的效率,提供更高的安全保障,據稱256位的ECC秘鑰的安全性等同於3072位的RSA秘鑰,和普通DSA相比,ECDSA在計算秘鑰的過程中,部分因子使用了橢圓曲線演算法。
『拾』 非對稱加密演算法的主要演算法
RSA、Elgamal、背包演算法、Rabin、D-H、ECC(橢圓曲線加密演算法)。
使用最廣泛的是RSA演算法,Elgamal是另一種常用的非對稱加密演算法。
Elgamal由Taher Elgamal於1985年發明,其基礎是DiffieˉHellman密鑰交換演算法,後者使通信雙方能通過公開通信來推導出只有他們知道的秘密密鑰值[DiffieˉHellman]。DiffieˉHellman是Whitfield Diffie和Martin Hellman於1976年發明的,被視為第一種 非對稱加密演算法,DiffieˉHellman 與RSA的不同之處在於,DiffieˉHellman不是加密演算法,它只是生成可用作對稱密鑰的秘密數值。在DiffieˉHellman密鑰交換過程中,發送方和接收方分別生成一個秘密的隨機數,並根據隨機數推導出公開值,然後,雙方再交換公開值。DiffieˉHellman演算法的基礎是具備生成共享密鑰的能力。只要交換了公開值,雙方就能使用自己的私有數和對方的公開值來生成對稱密鑰,稱為共享密鑰,對雙方來說,該對稱密鑰是相同的,可以用於使用對稱加密演算法加密數據。
與RSA相比,DiffieˉHellman的優勢之一是每次交換密鑰時都使用一組新值,而使用RSA演算法時,如果攻擊者獲得了私鑰,那麼他不僅能解密之前截獲的消息,還能解密之後的所有消息。然而,RSA可以通過認證(如使用X.509數字證書)來防止中間人攻擊,但Diff ieˉHellman在應對中間人攻擊時非常脆弱。