一、背景
據記載, 西元前 400 年, 古希臘人發明了置換密碼。 1881 年世界上的第一個電話保密專利出現。 在第二次世界大戰期間, 德國軍方啟用「恩尼格瑪」密碼機, 密碼學在戰爭中起著非常重要的作用。 隨著資訊化和數位化社會的發展, 人們對資訊安全和保密的重要性認識不斷提高, 於是在 1997 年, 美國國家標準局公佈實施了「美國資料加密標準(DES)」, 民間力量開始全面介入密碼學的研究和應用中, 採用的加密演算法有 DES、RSA、SHA 等。 隨著對加密強度需求的不斷提高, 近期又出現了 AES、ECC 等。
使用密碼學可以達到以下目的:
保密性:防止使用者的標識或資料被讀取。
資料完整性:防止資料被更改。
身份驗證:確保資料發自特定的一方。
二、加密演算法
根據金鑰類型不同將現代密碼技術分為兩類:對稱加密演算法和非對稱加密演算法。 對稱鑰匙加密系統是加密和解密均採用同一把秘密鑰匙, 而且通信雙方都必須獲得這把鑰匙, 並保持鑰匙的秘密。 (本文不做贅述)
非對稱式金鑰密碼編譯系統採用的加密鑰匙(公開金鑰)和解密鑰匙(私密金鑰)是不同的。
常見的非對稱加密演算法如下:
RSA:由 RSA 公司發明, 是一個支持變長金鑰的公共金鑰演算法, 需要加密的檔塊的長度也是可變的;
DSA(Digital Signature Algorithm):數位簽章演算法, 是一種標準的 DSS(數位簽章標準);
ECC(Elliptic Curves Cryptography):橢圓曲線密碼編碼學。
三、ECC 和 RSA
在 1976 年, 由於對稱加密演算法已經不能滿足需要, Diffie 和 Hellman 發表了一篇叫《密碼學新動向》的文章, 介紹了公匙加密的概念, 由 Rivet、Shamir、Adelman 提出了 RSA 演算法。 RSA 就是他們三人姓氏開頭字母拼在一起組成的。
隨著分解大整數方法的進步及完善、電腦速度的提高以及電腦網路的發展, 為了保障資料的安全, RSA 的金鑰需要不斷增加, 但是, 金鑰長度的增加導致了其加解密的速度大為降低, 硬體實現也變得越來越難以忍受, 這對使用 RSA 的應用帶來了很重的負擔, 因此需要一種新的演算法來代替 RSA。
1985 年 N.Koblitz 和 Miller 提出將橢圓曲線用於密碼演算法, 全稱:Elliptic curve cryptography, 縮寫為 ECC, 根據是有限域上的橢圓曲線上的點群中的離散對數問題 ECDLP。 ECDLP 是比因數分解問題更難的問題, 它是指數級的難度。
現在 SSL 證書普遍使用的是 RSA 演算法, 由於上述的 RSA 演算法存在的缺點, 使用 ECC 作為其公開金鑰演算法的數位憑證近幾年的發展也不容小覷:2008 年左右 CA 開始儲備 ECC 根證書, 2012 年左右 CA 開始對外公開銷售 ECC 證書, 2014 年 ECC 證書在國外被普遍開始使用, 2015 年國內開始接受 ECC 證書。
ECC 和 RSA 相比, 在許多方面都有對絕對的優勢, 主要體現在以下方面:
抗攻擊性強
CPU 佔用少
內容使用少
網路消耗低
加密速度快
隨著安全等級的增加, 當前加密法的金鑰長度也會成指數增加, 而 ECC 金鑰長度 卻只是成線性增加。 例如, 128 位元安全加密需要3,072 位元 RSA 金鑰, 卻只需要一 個 256 位 ECC 金鑰。 增加到 256 位元安全加密需要一個 15,360 位 RSA 金鑰, 卻只 需要一個 512 位元 ECC 金鑰。 ECC 具有如此卓越的按位元比率加密的性能,
四、測試和分析
前面說了那麼多廢話, 接下來重頭來了, 接下來會著重從性能來測試兩種演算法的區別, 以下多圖預警:4.1 伺服器性能指標測試在兩大雲主機上執行。 本測試案例中使用了兩個不同的身份驗證演算法:
我們看到, ECC-256 層次結構優於 RSA-2048 和 RSA-3072
4.2 回應時間與輸送量指標之比較
下表中的條目和以下章節詳細說明了我們為雲主機運行的測試:測試「0K GET, 0% 的重用」使用超大型 ( XLarge ) 伺服器在超大型 ( XLarge ) 服桌面用戶端上運行, 適用於 Apache 和 IISweb 伺服器, 會話重用為 0%, 意味著每個 SSL 握手都是一個完整的握手而不是簡化版握手。 同時應注意,0K 檔並不表示空負載,在過程中仍有 HTTP 抬頭傳輸。
測試案例和場景
0K GET,重用為 0%
會話重用為 0%,表明每次握手是完整的握手,涉及所需 CPU 處理,我們已經發現運行 Apache 的雲主機出現 CPU 飽和受限,RSA-3072 在 500 次請求 / 秒左右; RSA-2048 在 1300 次左右,而 ECC-256 經證實在達 2800 次前呈現出極強的適應性。重要的一點是,ECC-256 能夠適應相當高的事務數量。雖然 Apache 和 IIS 背 後的資料點(如在輸送量和等待時間中的資料點)是完全不同的,但得出的結論是相同的,而且有利於 ECC-256。注意,ECC-256 與 RSA-3072 同等安全,效率可相差甚遠。
200K GET,重用為 0%
在雲主機上託管 web 伺服器的原因是要減少所需用戶端數,以便使伺服器能夠最大程度地利用 CPU。結果和「0K GET,重用為 0%」趨勢相同。
200K GET,重用為 68%
會話重用為 68% 的結果是三分之二的握手被簡化。與之前測試相比,平均回應時間下降,同時輸送量增加,三者間的飽和缺口縮小。如果重用百分比增加並繪製成圖,我們便可以看到差距在縮小。
1200K GET,重用為 0%
一個有趣的現象是,在 Apache 一例中我們觀察到 ECC-256 和 RSA-2048 的網路傳輸開始飽和,但 RSA-3072 卻達到了 CPU 利用極限。而對於 IIS,三者都達到了 CPU 利用極限。
五、不久,ECC 將無處不在
ECC 的這些特點使它必將取代 RSA,成為通用的公開金鑰加密演算法。比如 SET 協議的制定者已把它作為下一代 SET 協議中缺省的公開金鑰密碼演算法。
ECC 證書相容性:
最後,重點來了!!!
傳送門https://portal.qiniu.com/certificate/apply
同時應注意,0K 檔並不表示空負載,在過程中仍有 HTTP 抬頭傳輸。測試案例和場景
0K GET,重用為 0%
會話重用為 0%,表明每次握手是完整的握手,涉及所需 CPU 處理,我們已經發現運行 Apache 的雲主機出現 CPU 飽和受限,RSA-3072 在 500 次請求 / 秒左右; RSA-2048 在 1300 次左右,而 ECC-256 經證實在達 2800 次前呈現出極強的適應性。重要的一點是,ECC-256 能夠適應相當高的事務數量。雖然 Apache 和 IIS 背 後的資料點(如在輸送量和等待時間中的資料點)是完全不同的,但得出的結論是相同的,而且有利於 ECC-256。注意,ECC-256 與 RSA-3072 同等安全,效率可相差甚遠。
200K GET,重用為 0%
在雲主機上託管 web 伺服器的原因是要減少所需用戶端數,以便使伺服器能夠最大程度地利用 CPU。結果和「0K GET,重用為 0%」趨勢相同。
200K GET,重用為 68%
會話重用為 68% 的結果是三分之二的握手被簡化。與之前測試相比,平均回應時間下降,同時輸送量增加,三者間的飽和缺口縮小。如果重用百分比增加並繪製成圖,我們便可以看到差距在縮小。
1200K GET,重用為 0%
一個有趣的現象是,在 Apache 一例中我們觀察到 ECC-256 和 RSA-2048 的網路傳輸開始飽和,但 RSA-3072 卻達到了 CPU 利用極限。而對於 IIS,三者都達到了 CPU 利用極限。
五、不久,ECC 將無處不在
ECC 的這些特點使它必將取代 RSA,成為通用的公開金鑰加密演算法。比如 SET 協議的制定者已把它作為下一代 SET 協議中缺省的公開金鑰密碼演算法。
ECC 證書相容性:
最後,重點來了!!!
傳送門https://portal.qiniu.com/certificate/apply