一、背景
據記載,公元前 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 證書相容性:
七牛雲獨家支援 ECC 演算法的 DV 單域名證書可免費申請及下載!
傳送門:七牛雲 SSL 證書服務