當前位置:首頁 » 密碼管理 » ecc橢圓曲線加密

ecc橢圓曲線加密

發布時間: 2022-09-14 05:16:08

A. 橢圓曲線(ecc)加密,簽名(ecdsa)問題。

用asp實現橢圓曲線加密,簽名。
一個你可以下載一個加密軟體,可心在www,.com中搜索加密軟體,加密軟體很多,你要橢圓曲線加密,簽名,你先建立一個文件夾,然後將橢圓保存,對文件夾加密就行了!

B. ECC橢圓曲線密碼應用

1背景簡介
隨著通訊網路特別是Internet的高速發展,利用網路作為信息交流和信息處理變得越來越普遍,社會的傳統事務和業務運作模式受到前所未有的沖擊。目前,無論是國家政府還是企業都正融入這場網路革命中,從其原來的傳統經營模式向網路模式演化。未來的電子政務、電子商務、電子業務將成為不可逆轉的發展趨勢。在與日俱增的網路活動中,人們越來越關心信息安全這個問題。這集中體現在:

(1)網路的身份認證——確認網路客戶的真實身份
(2)信息和數據的保密性——個人或系統機密信息和數據保護
(3)信息和數據完整性——防止不合法的數據修改
(4)不可抵賴性——網路環境下行為的事後的不可抵賴(數字簽名)
信息安全中最核心的技術是密碼技術,基本上可分為序列密碼、對稱密碼(又稱分組密碼)、非對稱密碼(又稱公鑰密碼)三種。

非對稱密碼演算法是支撐解決以上所涉的四個關鍵方面的問題的核心。目前越來越流行的是基於PKI體系模型的解決方案。在PKI體系模型中,客戶端需要一較好的個人信息安全載體,智能卡或智能密碼鑰匙將是一較理想的方式,都必須支持公鑰演算法,而ECC是最適合使用在這一資源受限制的客戶端產品中。

2 橢圓曲線密碼演算法ECC

自公鑰密碼問世以來,學者們提出了許多種公鑰加密方法,它們的安全性都是基於復雜的數學難題。根據所基於的數學難題來分類,有以下三類系統目前被認為是安全和有效的:

(1)大整數因子分解系統(代表性的有RSA),

(2)有限域(數學中的一種代數結構)離散對數系統(代表性的有DSA),

(3)有限域橢園曲線離散對數系統(ECC)。

當前最著名、應用最廣泛的公鑰系統RSA是由Rivet、Shamir、Adelman提出 的(簡稱為RSA系統),它的安全性是基於大整數素因子分解的困難性,而大整數因子分解問題是數學上的著名難題,至今沒有有效的方法予以解決,因此可以確保RSA演算法的安全性。RSA系統是公鑰系統的最具有典型意義的方法,大多數使用公鑰密碼進行加密和數字簽名的產品和標准使用的都是RSA演算法。RSA方法的優點主要在於原理簡單,易於使用。但是,隨著分解大整數方法的進步及完善、計算機速度的提高以及計算機網路的發展(可以使用成千上萬台機器同時進行大整數分解),作為RSA加解密安全保障的大整數要求越來越大。為了保證RSA使用的安全性,其密鑰的位數一直在增加,比如,目前一般認為RSA需要1024位以上的字長才有安全保障。

但是,密鑰長度的增加導致了其加解密的速度大為降低,硬體實現也變得越來越難以忍受,這對使用RSA的應用帶來了很重的負擔,對進行大量安全交易的電子商務更是如此,從而使得其應用范圍越來越受到制約。DSA(Data Signature Algorithm)是基於有限域離散對數問題的數字簽名標准,它僅提供數字簽名,不提供數據加密功能。安全性更高、演算法實現性能更好的公鑰系統橢圓曲線加密演算法ECC(Elliptic Curve Cryptography)基於有限域上橢圓曲線的離散對數計算困難性。人類研究橢圓曲線已有百年以上的歷史,但真正把其應用到密碼學中是1985年由Koblitz(美國華盛頓大學)和Miller(IBM公司) 兩人提出。定義在有限域(Fp 或F(2m))的橢圓曲線(y2=x3+ax+b)上的點(x,y),再加上無窮點O,如按一定的規則運算(估且稱為乘法)將組成一個群(數學中的一種代數結構)。有限域上橢圓曲線乘法群也有相對應的離散對數計算困難性問題。因此,許多公開密碼系統都是基於此問題發展出來的,如類似ELGamal,DSA等密碼系統的ECES,ECDSA。

3 橢圓曲線加密演算法ECC的優點

橢圓曲線加密演算法ECC與RSA方法相比有著很多技術優點:

●安全性能更高

加密演算法的安全性能一般通過該演算法的抗攻擊強度來反映。ECC和其他幾種公鑰系統相比,其抗攻擊性具有絕對的優勢。橢圓曲線的離散對數計算困難性(ECDLP)在計算復雜度上目前是完全指數級,而RSA 亞指數級的。這體現ECC比RSA的每bit安全性能更高。

●計算量小和處理速度快

在一定的相同的計算資源條件下,雖然在RSA中可以通過選取較小的公鑰(可以小到3)的方法提高公鑰處理速度,即提高加密和簽名驗證的速度,使其在加密和簽名驗證速度上與ECC有可比性,但在私鑰的處理速度上(解密和簽名),ECC遠比RSA、DSA快得多。因此ECC總的速度比RSA、DSA要快得多。同時ECC系統的密鑰生成速度比RSA快百倍以上。因此在相同條件下,ECC則有更高的加密性能。

存儲空間佔用小

ECC的密鑰尺寸和系統參數與RSA、DSA相比要小得多。160位 ECC與1024位 RSA、DSA有相同的安全強度。而210位 ECC則與2048bit RSA、DSA具有相同的安全強度。意味著它所佔的存貯空間要小得多。這對於加密演算法在資源受限環境上(如智能卡等)的應用具有特別重要的意義。

●帶寬要求低

當對長消息進行加解密時,三類密碼系統有相同的帶寬要求,但應用於短消息時ECC帶寬要求卻低得多。而公鑰加密系統多用於短消息,例如用於數字簽名和用於對對稱系統的會話密鑰傳遞。帶寬要求低使ECC在無線網路領域具有廣泛的應用前景。

4橢圓曲線加密演算法ECC的相關標准

ECC的這些特點使它在某些領域(如PDA、手機、智能卡)的應用將取代RSA,並成為通用的公鑰加密演算法。許多國際標准化組織(政府、工業界、金融界、商業界等)已將各種橢圓曲線密碼體製作為其標准化文件向全球頒布。ECC標准大體可以分為兩種形式:一類是技術標准,即描述以技術支撐為主的ECC體制,主要有IEEEP1363、ANSI X9.62、ANSI X9.63、SEC1、SEC2、FIP 186-2、ISO/IEC 14888-3。規范了ECC的各種參數的選擇,並給出了各級安全強度下的一組ECC參數。另一類是應用標准,即在具體的應用環境中建議使用ECC技術,主要有ISO/IEC 15946、IETF PKIX、IETF TLS、WAP WTLS等。在標准化的同時,一些基於標准(或草案)的各種橢圓曲線加密、簽名、密鑰交換的軟、硬體也相繼問世。美國RSA數據安全公司在1997年公布了包含ECC的密碼引擎工具包BSAFE 4.0; 以加拿大Certicom為首的安全公司和工業界聯合也研製、生產了以橢圓曲線密碼演算法為核心的密碼產品,還提出了各種安全條件下對橢圓曲線離散對數攻擊的懸賞挑戰。可以相信,ECC技術在信息安全領域中的應用會越來越廣。

C. 什麼是ECC

ECC
ECC是「Error Checking and Correcting」的簡寫,中文名稱是「錯誤檢查和糾正」。ECC是一種能夠實現「錯誤檢查和糾正」的技術,ECC內存就是應用了這種技術的內存,一般多應用在伺服器及圖形工作站上,這將使整個電腦系統在工作時更趨於安全穩定。

要了解ECC技術,就不能不提到Parity(奇偶校驗)。在ECC技術出現之前,內存中應用最多的是另外一種技術,就是Parity(奇偶校驗)。我們知道,在數字電路中,最小的數據單位就是叫「比特(bit)」,也叫數據「位」,「比特」也是內存中的最小單位,它是通過「1」和「0」來表示數據高、低電平信號的。在數字電路中8個連續的比特是一個位元組(byte),在內存中不帶「奇偶校驗」的內存中的每個位元組只有8位,若它的某一位存儲出了錯誤,就會使其中存儲的相應數據發生改變而導致應用程序發生錯誤。而帶有「奇偶校驗」的內存在每一位元組(8位)外又額外增加了一位用來進行錯誤檢測。比如一個位元組中存儲了某一數值(1、0、1、0、1、0、1、1),把這每一位相加起來(1+0+1+0+1+0+1+1=5)。若其結果是奇數,對於偶校驗,校驗位就定義為1,反之則為0;對於奇校驗,則相反。當CPU返回讀取存儲的數據時,它會再次相加前8位中存儲的數據,計算結果是否與校驗位相一致。當CPU發現二者不同時就作出視圖糾正這些錯誤,但Parity有個缺點,當內存查到某個數據位有錯誤時,卻並不一定能確定在哪一個位,也就不一定能修正錯誤,所以帶有奇偶校驗的內存的主要功能僅僅是「發現錯誤」,並能糾正部分簡單的錯誤。

通過上面的分析我們知道Parity內存是通過在原來數據位的基礎上增加一個數據位來檢查當前8位數據的正確性,但隨著數據位的增加Parity用來檢驗的數據位也成倍增加,就是說當數據位為16位時它需要增加2位用於檢查,當數據位為32位時則需增加4位,依此類推。特別是當數據量非常大時,數據出錯的幾率也就越大,對於只能糾正簡單錯誤的奇偶檢驗的方法就顯得力不從心了,正是基於這樣一種情況,一種新的內存技術應允而生了,這就是ECC(錯誤檢查和糾正),這種技術也是在原來的數據位上外加校驗位來實現的。不同的是兩者增加的方法不一樣,這也就導致了兩者的主要功能不太一樣。它與Parity不同的是如果數據位是8位,則需要增加5位來進行ECC錯誤檢查和糾正,數據位每增加一倍,ECC只增加一位檢驗位,也就是說當數據位為16位時ECC位為6位,32位時ECC位為7位,數據位為64位時ECC位為8位,依此類推,數據位每增加一倍,ECC位只增加一位。總之,在內存中ECC能夠容許錯誤,並可以將錯誤更正,使系統得以持續正常的操作,不致因錯誤而中斷,且ECC具有自動更正的能力,可以將Parity無法檢查出來的錯誤位查出並將錯誤修正。

2 ECC(Elliptic Curve Cryptosystems )橢圓曲線密碼體制

2002年,美國SUN公司將其開發的橢圓加密技術贈送給開放源代碼工程
公鑰密碼體制根據其所依據的難題一般分為三類:大整數分解問題類、離散對數問題類、橢圓曲線類。有時也把橢圓曲線類歸為離散對數類。
橢圓曲線密碼體制來源於對橢圓曲線的研究,所謂橢圓曲線指的是由韋爾斯特拉斯(Weierstrass)方程:
y2+a1xy+a3y=x3+a2x2+a4x+a6 (1)
所確定的平面曲線。其中系數ai(I=1,2,…,6)定義在某個域上,可以是有理數域、實數域、復數域,還可以是有限域GF(pr),橢圓曲線密碼體制中用到的橢圓曲線都是定義在有限域上的。
橢圓曲線上所有的點外加一個叫做無窮遠點的特殊點構成的集合連同一個定義的加法運算構成一個Abel群。在等式
mP=P+P+…+P=Q (2)
中,已知m和點P求點Q比較容易,反之已知點Q和點P求m卻是相當困難的,這個問題稱為橢圓曲線上點群的離散對數問題。橢圓曲線密碼體制正是利用這個困難問題設計而來。橢圓曲線應用到密碼學上最早是由Neal Koblitz 和Victor Miller在1985年分別獨立提出的。
橢圓曲線密碼體制是目前已知的公鑰體制中,對每比特所提供加密強度最高的一種體制。解橢圓曲線上的離散對數問題的最好演算法是Pollard rho方法,其時間復雜度為,是完全指數階的。其中n為等式(2)中m的二進製表示的位數。當n=234, 約為2117,需要1.6x1023 MIPS 年的時間。而我們熟知的RSA所利用的是大整數分解的困難問題,目前對於一般情況下的因數分解的最好演算法的時間復雜度是子指數階的,當n=2048時,需要2x1020MIPS年的時間。也就是說當RSA的密鑰使用2048位時,ECC的密鑰使用234位所獲得的安全強度還高出許多。它們之間的密鑰長度卻相差達9倍,當ECC的密鑰更大時它們之間差距將更大。更ECC密鑰短的優點是非常明顯的,隨加密強度的提高,密鑰長度變化不大。
德國、日本、法國、美國、加拿大等國的很多密碼學研究小組及一些公司實現了橢圓曲線密碼體制,我國也有一些密碼學者做了這方面的工作。許多標准化組織已經或正在制定關於橢圓曲線的標准,同時也有許多的廠商已經或正在開發基於橢圓曲線的產品。對於橢圓曲線密碼的研究也是方興未艾,從ASIACRYPTO』98上專門開辟了ECC的欄目可見一斑。
在橢圓曲線密碼體制的標准化方面,IEEE、ANSI、ISO、IETF、ATM等都作了大量的工作,它們所開發的橢圓曲線標準的文檔有:IEEE P1363 P1363a、ANSI X9.62 X9.63、 ISO/IEC14888等。
2003年5月12日中國頒布的無線區域網國家標准 GB15629.11 中,包含了全新的WAPI(WLAN Authentication and Privacy Infrastructure)安全機制,能為用戶的WLAN系統提供全面的安全保護。這種安全機制由 WAI和WPI兩部分組成,分別實現對用戶身份的鑒別和對傳輸的數據加密。WAI採用公開密鑰密碼體制,利用證書來對WLAN系統中的用戶和AP進行認證。證書裡麵包含有證書頒發者(ASU)的公鑰和簽名以及證書持有者的公鑰和簽名,這里的簽名採用的就是橢圓曲線ECC演算法。
加拿大Certicom公司是國際上最著名的ECC密碼技術公司,已授權300多家企業使用ECC密碼技術,包括Cisco 系統有限公司、摩托羅拉、Palm等企業。Microsoft將Certicom公司的VPN嵌入微軟視窗移動2003系統中。

D. ECC 演算法簡介

與 RSA(Ron Rivest,Adi Shamir,Len Adleman 三位天才的名字)一樣,ECC(Elliptic Curves Cryptography,橢圓曲線加密)也屬於公開密鑰演算法。

一、從平行線談起

平行線,永不相交。沒有人懷疑把:)不過到了近代這個結論遭到了質疑。平行線會不會在很遠很遠的地方相交了?事實上沒有人見到過。所以「平行線,永不相交」只是假設(大家想想初中學習的平行公理,是沒有證明的)。

既然可以假設平行線永不相交,也可以假設平行線在很遠很遠的地方相交了。即平行線相交於無窮遠點P∞(請大家閉上眼睛,想像一下那個無窮遠點P∞,P∞是不是很虛幻,其實與其說數學鍛煉人的抽象能力,還不如說是鍛煉人的想像力)。

給個圖幫助理解一下:

直線上出現P∞點,所帶來的好處是所有的直線都相交了,且只有一個交點。這就把直線的平行與相交統一了。為與無窮遠點相區別把原來平面上的點叫做平常點。

以下是無窮遠點的幾個性質。

直線 L 上的無窮遠點只能有一個。(從定義可直接得出)

平面上一組相互平行的直線有公共的無窮遠點。(從定義可直接得出)

平面上任何相交的兩直線 L1、L2 有不同的無窮遠點。(否則 L1 和 L2 有公共的無窮遠點 P ,則 L1 和 L2 有兩個交點 A、P,故假設錯誤。)

平面上全體無窮遠點構成一條無窮遠直線。(自己想像一下這條直線吧)

平面上全體無窮遠點與全體平常點構成射影平面。

二、射影平面坐標系

射影平面坐標系是對普通平面直角坐標系(就是我們初中學到的那個笛卡兒平面直角坐標系)的擴展。我們知道普通平面直角坐標系沒有為無窮遠點設計坐標,不能表示無窮遠點。為了表示無窮遠點,產生了射影平面坐標系,當然射影平面坐標系同樣能很好的表示舊有的平常點(數學也是「向下兼容」的)。

我們對普通平面直角坐標繫上的點A的坐標(x, y)做如下改造:

令 x=X/Z ,y=Y/Z(Z≠0);則 A 點可以表示為(X:Y:Z)。

變成了有三個參量的坐標點,這就對平面上的點建立了一個新的坐標體系。

例 2.1:求點(1,2)在新的坐標體系下的坐標。

解:

∵X/Z=1 ,Y/Z=2(Z≠0)

∴X=Z,Y=2Z

∴坐標為(Z:2Z:Z),Z≠0。

即(1:2:1)(2:4:2)(1.2:2.4:1.2)等形如(Z:2Z:Z),Z≠0 的坐標,都是(1,2)在新的坐標體系下的坐標。

我們也可以得到直線的方程 aX+bY+cZ=0(想想為什麼?提示:普通平面直角坐標系下直線一般方程是 ax+by+c=0)。

新的坐標體系能夠表示無窮遠點么?那要讓我們先想想無窮遠點在哪裡。根據上一節的知識,我們知道無窮遠點是兩條平行直線的交點。那麼,如何求兩條直線的交點坐標?這是初中的知識,就是將兩條直線對應的方程聯立求解。

平行直線的方程是:

aX+bY+c1Z =0;

aX+bY+c2Z =0  (c1≠c2); (為什麼?提示:可以從斜率考慮,因為平行線斜率相同);

將二方程聯立,求解。有

c2Z= c1Z= -(aX+bY)

∵c1≠c2

∴Z=0 

∴aX+bY=0

所以無窮遠點就是這種形式(X:Y:0)表示。注意,平常點 Z≠0,無窮遠點 Z=0,因此無窮遠直線對應的方程是 Z=0。

例 2.2:求平行線 L1:X+2Y+3Z=0 與 L2:X+2Y+Z=0 相交的無窮遠點。

解:

因為 L1∥L2

所以有 Z=0, X+2Y=0

所以坐標為(-2Y:Y:0),Y≠0。

即(-2:1:0)(-4:2:0)(-2.4:1.2:0)等形如(-2Y:Y:0),Y≠0 的坐標,都表示這個無窮遠點。

看來這個新的坐標體系能夠表示射影平面上所有的點,我們就把這個能夠表示射影平面上所有點的坐標體系叫做射影平面坐標系。

練習:

1、求點A(2,4) 在射影平面坐標系下的坐標。

2、求射影平面坐標系下點(4.5:3:0.5),在普通平面直角坐標系下的坐標。

3、求直線X+Y+Z=0上無窮遠點的坐標。

4、判斷:直線aX+bY+cZ=0上的無窮遠點 和 無窮遠直線與直線aX+bY=0的交點,是否是同一個點?

三、橢圓曲線

上一節,我們建立了射影平面坐標系,這一節我們將在這個坐標系下建立橢圓曲線方程。因為我們知道,坐標中的曲線是可以用方程來表示的(比如:單位圓方程是 x2+y2=1)。橢圓曲線是曲線,自然橢圓曲線也有方程。

橢圓曲線的定義:

一條橢圓曲線是在射影平面上滿足如下方程的所有點的集合,且曲線上的每個點都是非奇異(或光滑)的。

Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z3                 [3-1]

定義詳解:

Y2Z+a1XYZ+a3YZ2 = X3+a2X2Z+a4XZ2+a6Z3 是 Weierstrass 方程(維爾斯特拉斯,Karl Theodor Wilhelm Weierstrass,1815-1897),是一個齊次方程。

橢圓曲線的形狀,並不是橢圓的。只是因為橢圓曲線的描述方程,類似於計算一個橢圓周長的方程(計算橢圓周長的方程,我沒有見過,而對橢圓線 積分 (設密度為1)是求不出來的),故得名。

我們來看看橢圓曲線是什麼樣的。

所謂「非奇異」或「光滑」的,在數學中是指曲線上任意一點的偏導數 Fx(x,y,z),Fy(x,y,z),Fz(x,y,z) 不能同時為0。如果你沒有學過高等數學,可以這樣理解這個詞,即滿足方程的任意一點都存在切線。下面兩個方程都不是橢圓曲線,盡管他們是方程 [3-1] 的形式,因為他們在(0:0:1)點處(即原點)沒有切線。

橢圓曲線上有一個無窮遠點O∞(0:1:0),因為這個點滿足方程[3-1]。

知道了橢圓曲線上的無窮遠點。我們就可以把橢圓曲線放到普通平面直角坐標繫上了。因為普通平面直角坐標系只比射影平面坐標系少無窮遠點。我們在普通平面直角坐標繫上,求出橢圓曲線上所有平常點組成的曲線方程,再加上無窮遠點O∞(0:1:0),不就構成橢圓曲線了么?

我們設 x=X/Z,y=Y/Z 代入方程 [3-1] 得到:

y2+a1xy+a3y = x3+a2x2+a4x+a6                            [3-2]

也就是說滿足方程 [3-2] 的光滑曲線加上一個無窮遠點O∞,組成了橢圓曲線。為了方便運算,表述,以及理解,今後論述橢圓曲線將主要使用 [3-2] 的形式。

本節的最後,我們談一下求橢圓曲線一點的切線斜率問題。由橢圓曲線的定義可以知道,橢圓曲線是光滑的,所以橢圓曲線上的平常點都有切線。而切線最重要的一個參數就是斜率 k 。

例 3.1:求橢圓曲線方程 y2+a1xy+a3y=x3+a2x2+a4x+a6上,平常點 A(x,y) 的切線的斜率 k 。

解:



F(x,y)= y2+a1xy+a3y-x3-a2x2-a4x-a6

求偏導數

Fx(x,y)= a1y-3x2-2a2x-a4

Fy(x,y)= 2y+a1x+a3

則導數為:

f'(x)=- Fx(x,y)/ Fy(x,y)=-( a1y-3x2-2a2x-a4)/(2y+a1x +a3) = (3x2+2a2x+a4-a1y) /(2y+a1x +a3)

所以

k=(3x2+2a2x+a4-a1y) /(2y+a1x +a3)             [3-3]

看不懂解題過程沒有關系,記住結論[3-3]就可以了。

練習:      

1、將給出圖例的橢圓曲線方程Y2Z=X3-XZ2 和Y2Z=X3+XZ2+Z3轉換成普通平面直角坐標繫上的方程。

四、橢圓曲線上的加法

上一節,我們已經看到了橢圓曲線的圖象,但點與點之間好象沒有什麼聯系。我們能不能建立一個類似於在實數軸上加法的運演算法則呢?天才的數學家找到了這一運演算法則

自從近世紀代數學引入了群、環、域的概念,使得代數運算達到了高度的統一。比如數學家總結了普通加法的主要特徵,提出了加群(也叫交換群,或 Abel(阿貝爾)群),在加群的眼中。實數的加法和橢圓曲線的上的加法沒有什麼區別。這也許就是數學抽象把。關於群以及加群的具體概念請參考近世代數方面的數學書。

運演算法則:任意取橢圓曲線上兩點 P、Q (若 P、Q兩點重合,則做 P 點的切線)做直線交於橢圓曲線的另一點 R』,過 R』 做 y 軸的平行線交於 R。我們規定 P+Q=R。(如圖)

法則詳解:

這里的 + 不是實數中普通的加法,而是從普通加法中抽象出來的加法,他具備普通加法的一些性質,但具體的運演算法則顯然與普通加法不同。

根據這個法則,可以知道橢圓曲線無窮遠點 O∞ 與橢圓曲線上一點 P 的連線交於 P』,過 P』 作 y 軸的平行線交於 P,所以有 無窮遠點 O∞ + P = P 。這樣,無窮遠點 O∞ 的作用與普通加法中零的作用相當(0+2=2),我們把無窮遠點 O∞ 稱為零元。同時我們把 P』 稱為 P 的負元(簡稱,負P;記作,-P)。(參見下圖)

根據這個法則,可以得到如下結論 :如果橢圓曲線上的三個點 A、B、C,處於同一條直線上,那麼他們的和等於零元,即 A+B+C= O∞

k 個相同的點 P 相加,我們記作 kP。如下圖:P+P+P = 2P+P = 3P。

下面,我們利用 P、Q點的坐標 (x1,y1),(x2,y2),求出 R=P+Q 的坐標 (x4,y4)。

例 4.1:求橢圓曲線方程 y2+a1xy+a3y=x3+a2x2+a4x+a6 上,平常點 P(x1,y1),Q(x2,y2) 的和 R(x4,y4) 的坐標。

解:

(1)先求點 -R(x3,y3)

因為 P, Q, -R 三點共線,故設共線方程為

y=kx+b

其中,若 P≠Q (P,Q兩點不重合),則直線斜率

k=(y1-y2)/(x1-x2)

若 P=Q (P,Q兩點重合),則直線為橢圓曲線的切線,

故由例 3.1 可知:

k=(3x2+2a2x+a4 -a1y) /(2y+a1x+a3)

因此 P, Q, -R 三點的坐標值就是以下方程組的解:

y2+a1xy+a3y=x3+a2x2+a4x+a6                                   [1]

y=(kx+b)                                                                      [2]

將 [2] 代入[1] 有

(kx+b)2+a1x(kx+b)+a3(kx+b) =x3+a2x2+a4x+a6        [3]

對 [3] 化為一般方程,根據三次方程根與系數關系(若方程x³+ax²+bx+c=0 的三個根是 x1、x2、x3,則: x1+x2+x3=-a,x1x2+x2x3+x3x1=b,x1x2x2=-c)

所以

-(x1+x2+x3)=a2-ka1-k2

x3=k2+ka1+a2+x1+x2    --------------------- 求出點 -R 的橫坐標

因為

k=(y1-y3)/(x1-x3)



y3=y1-k(x1-x3)    ------------------------------ 求出點 -R 的縱坐標

(2)利用 -R 求 R

顯然有

x4=x3=k2+ka1+a2+x1+x2   -------------- 求出點 R 的橫坐標

而 y3 y4 為 x=x4 時 方程 y2+a1xy+a3y=x3+a2x2+a4x+a6 的解化為一般方程 y2+(a1x+a3)y-(x3+a2x2+a4x+a6)=0 , 根據二次方程根與系數關系(如果方程 ax²+bx+c=0 的兩根為 x1、x2,那麼 x1+x2=-b/a,x1x2=c/a)

得:

-(a1x+a3)=y3+y4



y4=-y3-(a1x+a3)=k(x1-x4)-y1-(a1x4+a3)   ----- 求出點 R 的縱坐標

即:

x4=k2+ka1+a2+x1+x2

y4=k(x1-x4)-y1-a1x4-a3

本節的最後,提醒大家注意一點,以前提供的圖像可能會給大家產生一種錯覺,即橢圓曲線是關於 x 軸對稱的。事實上,橢圓曲線並不一定關於 x 軸對稱。如下圖的 y2-xy=x3+1

五、密碼學中的橢圓曲線

我們現在基本上對橢圓曲線有了初步的認識,這是值得高興的。但請大家注意,前面學到的橢圓曲線是連續的,並不適合用於加密。所以,我們必須把橢圓曲線變成離散的點。

讓我們想一想,為什麼橢圓曲線為什麼連續?是因為橢圓曲線上點的坐標,是實數的(也就是說前面講到的橢圓曲線是定義在實數域上的),實數是連續的,導致了曲線的連續。因此,我們要把橢圓曲線定義在有限域上(顧名思義,有限域是一種只有由有限個元素組成的域)。

域的概念是從我們的有理數,實數的運算中抽象出來的,嚴格的定義請參考近世代數方面的數。簡單的說,域中的元素同有理數一樣,有自己得加法、乘法、除法、單位元(1),零元(0),並滿足交換率、分配率。

下面,我們給出一個有限域 Fp,這個域只有有限個元素。

Fp 中只有 p(p為素數)個元素 0, 1, 2 …… p-2, p-1

Fp 的加法(a+b)法則是 a+b≡c (mod p) ,即 (a+c)÷p 的余數和 c÷p 的余數相同。

Fp 的乘法(a×b)法則是 a×b≡c (mod p)

Fp 的除法(a÷b)法則是 a/b≡c (mod p),即 a×b-1≡c  (mod p) ,b-1 也是一個 0 到 p-1 之間的整數,但滿足 b×b-1≡1 (mod p);具體求法可以參考初等數論。

Fp 的單位元是 1,零元是 0。

同時,並不是所有的橢圓曲線都適合加密。y2=x3+ax+b是一類可以用來加密的橢圓曲線,也是最為簡單的一類。下面我們就把 y2=x3+ax+b 這條曲線定義在 Fp 上:

選擇兩個滿足下列條件的小於 p ( p 為素數) 的非負整數 a、b

4a3+27b2≠0  (mod p)

則滿足下列方程的所有點 (x,y),再加上 無窮遠點 O∞ ,構成一條橢圓曲線。

y2=x3+ax+b  (mod p)

其中 x,y 屬於 0 到 p-1 間的整數,並將這條橢圓曲線記為 Ep(a,b)。

我們看一下 y2=x3+x+1  (mod 23) 的圖像

是不是覺得不可思議?橢圓曲線,怎麼變成了這般模樣,成了一個一個離散的點?橢圓曲線在不同的數域中會呈現出不同的樣子,但其本質仍是一條橢圓曲線。舉一個不太恰當的例子,好比是水,在常溫下,是液體;到了零下,水就變成冰,成了固體;而溫度上升到一網路,水又變成了水蒸氣。但其本質仍是 H2O。

Fp上的橢圓曲線同樣有加法,但已經不能給以幾何意義的解釋。不過,加法法則和實數域上的差不多,請讀者自行對比。

1. 無窮遠點 O∞ 是零元,有 O∞ + O∞ = O∞,O∞ + P = P

2. P(x,y) 的負元是 (x,-y),有 P + (-P) = O∞

3. P(x1,y1), Q(x2,y2) 的和 R(x3,y3) 有如下關系:

x3≡k2-x1-x2(mod p) 

y3≡k(x1-x3)-y1(mod p)

    其中

若 P=Q 則 k=(3x2+a)/2y1 

若 P≠Q 則 k=(y2-y1)/(x2-x1)

例 5.1:已知 E23(1,1) 上兩點 P(3,10),Q(9,7),求 (1)-P,(2)P+Q,(3) 2P。

解:

(1)  –P的值為(3,-10)

(2)  k=(7-10)/(9-3)=-1/2

2 的乘法逆元為 12, 因為 2*12≡1 (mod 23)

k≡-1*12 (mod 23)

故 k=11

x=112-3-9=109≡17 (mod 23)

y=11[3-(-6)]-10=89≡20 (mod 23)

故 P+Q 的坐標為 (17,20)

3)  k=[3(32)+1]/(2*10)=1/4≡6 (mod 23)

x=62-3-3=30≡20 (mod 23)

y=6(3-7)-10=-34≡12 (mod 23)

故 2P 的坐標為 (7,12)

最後,我們講一下橢圓曲線上的點的階。如果橢圓曲線上一點 P,存在最小的正整數 n,使得數乘 nP=O∞,則將 n 稱為 P 的階,若 n 不存在,我們說 P 是無限階的。 事實上,在有限域上定義的橢圓曲線上所有的點的階 n 都是存在的(證明,請參考近世代數方面的書)

練習:

1. 求出 E11(1,6) 上所有的點。

2.已知 E11(1,6) 上一點 G(2,7),求 2G 到 13G 所有的值。

六、橢圓曲線上簡單的加密/解密

公開密鑰演算法總是要基於一個數學上的難題。比如 RSA 依據的是:給定兩個素數 p、q 很容易相乘得到 n,而對 n 進行因式分解卻相對困難。那橢圓曲線上有什麼難題呢?

考慮如下等式:

K=kG     [其中 K, G為 Ep(a,b) 上的點,k 為小於 n(n 是點 G 的階)的整數]

不難發現,給定 k 和 G,根據加法法則,計算 K 很容易;但給定 K 和 G,求 k 就相對困難了。這就是橢圓曲線加密演算法採用的難題。我們把點 G 稱為基點(base point),k(key point)就是私有密鑰。

現在我們描述一個利用橢圓曲線進行加密通信的過程:

1、用戶 A 選定一條橢圓曲線 Ep(a,b),並取橢圓曲線上一點,作為基點 G。

2、用戶 A 選擇一個私有密鑰 k,並生成公開密鑰 K=kG。

3、用戶 A 將 Ep(a,b) 和點 K,G 傳給用戶 B。

4、用戶 B 接到信息後,將待傳輸的明文編碼到 Ep(a,b) 上一點 M(編碼方法很多,這里不作討論),並產生一個隨機整數 r(random)。

5、用戶 B 計算點 C1=M+rK;C2=rG。

6、用戶 B 將 C1、C2 傳給用戶A。

7、用戶 A 接到信息後,計算 C1-kC2,結果就是點 M。因為 C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M ,再對點 M 進行解碼就可以得到明文。

在這個加密通信中,如果有一個偷窺者 H ,他只能看到 Ep(a,b)、K、G、C1、C2 而通過 K、G 求 k 或通過 C2、G 求 r 都是相對困難的。因此,H 無法得到 A、B 間傳送的明文信息。

密碼學中,描述一條 Fp 上的橢圓曲線,常用到六個參量:

T=(p,a,b,G,n,h)

p 、a 、b 用來確定一條橢圓曲線,G 為基點,n 為點 G 的階,h 是橢圓曲線上所有點的個數 m 與 n 相除的整數部分。這幾個參量取值的選擇,直接影響了加密的安全性。參量值一般要求滿足以下幾個條件:

1、p 當然越大越安全,但越大,計算速度會變慢,200 位左右可以滿足一般安全要求;

2、p≠n×h;

3、pt≠1 (mod n),1≤t<20;

4、4a3+27b2≠0 (mod p);

5、n 為素數;

6、h≤4。

七、橢圓曲線簽名在軟體保護的應用

我們知道將公開密鑰演算法作為軟體注冊演算法的好處是:黑客很難通過跟蹤驗證演算法得到注冊機。下面,將簡介一種利用 Fp(a,b) 橢圓曲線進行軟體注冊的方法。

軟體作者按如下方法製作注冊機(也可稱為簽名過程)

1、選擇一條橢圓曲線 Ep(a,b) 和基點 G;

2、選擇私有密鑰 k;

3、產生一個隨機整數 r ;

4、將用戶名和點 R 的坐標值 x,y 作為參數,計算 SHA(Secure Hash Algorithm 安全散列演算法,類似於 MD5)值,即 Hash=SHA(username,x,y);

5、計算 sn≡r - Hash * k (mod n)

6、將 sn 和 Hash 作為用戶名 username 的序列號

軟體驗證過程如下:(軟體中存有橢圓曲線 Ep(a,b) 和基點 G 以及公開密鑰 K)

1、從用戶輸入的序列號中,提取 sn 以及 Hash;

2、計算點 R≡sn*G+Hash*K ( mod p ),如果 sn、Hash 正確,其值等於軟體作者簽名過程中點 R(x,y) 的坐標,

因為 sn≡r-Hash*k (mod n)

所以 sn*G+Hash*K=(r-Hash*k)*G+Hash*K=rG-Hash*kG+Hash*K=rG-Hash*K+Hash*K=rG=R;

3、將用戶名和點 R 的坐標值 x,y 作為參數,計算 H=SHA(username,x,y);

4、如果 H=Hash 則注冊成功,如果 H≠Hash ,則注冊失敗(為什麼?提示注意點 R 與 Hash 的關聯性)。

簡單對比一下兩個過程:

作者簽名用到了:橢圓曲線 Ep(a,b),基點 G,私有密鑰 k,及隨機數 r。

軟體驗證用到了:橢圓曲線 Ep(a,b),基點 G,公開密鑰 K。

黑客要想製作注冊機,只能通過軟體中的 Ep(a,b),點 G,公開密鑰 K ,並利用 K=kG 這個關系獲得 k 才可以,而求 k 是很困難的。

練習:

下面也是一種常於軟體保護的注冊演算法,請認真閱讀,並試回答簽名過程與驗證過程都用到了那些參數,黑客想製作注冊機,應該如何做。

軟體作者按如下方法製作注冊機(也可稱為簽名過程)

1、選擇一條橢圓曲線 Ep(a,b),和基點 G;

2、選擇私有密鑰 k;

3、產生一個隨機整數 r;

4、將用戶名作為參數,計算 Hash=SHA(username);

5、計算 x』=x  (mod n)

6、計算 sn≡(Hash+x』*k)/r (mod n)

7、將 sn 和 x』 作為用戶名 username 的序列號

軟體驗證過程如下:(軟體中存有橢圓曲線 Ep(a,b) 和基點 G 以及公開密鑰 K)

1、從用戶輸入的序列號中,提取 sn 以及 x』;

2、將用戶名作為參數,計算 Hash=SHA(username);

3、計算 R=(Hash*G+x』*K)/sn,如果 sn、Hash 正確,其值等於軟體作者簽名過程中點 R(x,y)

因為 sn≡(Hash+x』*k)/r (mod n)

所以 (Hash*G+x』*K)/sn=(Hash*G+x』*K)/[(Hash+x』*k)/r]=(Hash*G+x』*K)/[(Hash*G+x』*k*G)/(rG)]=rG*[(Hash*G+x』*K)/(Hash*G+x』*K)]=rG=R (mod p)

4、v≡x (mod n)

5、如果 v=x』 則注冊成功。如果 v≠x』 ,則注冊失敗。

主要參考文獻

張禾瑞,《近世代數基礎》,高等 教育 出版社,1978

閔嗣鶴 嚴士健,《初等數論》,高等教育出版社,1982

段雲所,《網路信息安全》第三講,北大計算機系

Michael Rosing ,chapter5《Implementing Elliptic Curve Cryptography》,Softbound,1998

《SEC 1: Elliptic Curve Cryptography》,Certicom Corp.,2000

《IEEE P1363a / D9》,2001

E. 首次將橢圓曲線用於密碼學,建立公開密鑰加密的演演算法是在那一年

橢圓曲線密碼學(英語:Elliptic curve cryptography,縮寫為 ECC),一種建立公開密鑰加密的演算法,基於橢圓曲線數學。

橢圓曲線在密碼學中的使用是在1985年由Neal Koblitz和Victor Miller分別獨立提出的。

橢圓曲線密碼學:

橢圓曲線密碼學(英語:Elliptic curve cryptography,縮寫為ECC),一種建立公開密鑰加密的演算法,基於橢圓曲線數學。橢圓曲線在密碼學中的使用是在1985年由Neal Koblitz和Victor Miller分別獨立提出的。

ECC的主要優勢是在某些情況下它比其他的方法使用更小的密鑰——比如RSA加密演算法——提供相當的或更高等級的安全。ECC的另一個優勢是可以定義群之間的雙線性映射。

基於Weil對或是Tate對;雙線性映射已經在密碼學中發現了大量的應用,例如基於身份的加密。其缺點是同長度密鑰下加密和解密操作的實現比其他機制花費的時間長。

但由於可以使用更短的密鑰達到同級的安全程度,所以同級安全程度下速度相對更快。一般認為160比特的橢圓曲線密鑰提供的安全強度與1024比特RSA密鑰相當。

F. 什麼是RSA和ECC演算法

RSA(Rivest-Shamir-Adleman)加密演算法:它是第 一個既能用於數據加密也能用於數字簽名的演算法。比較易於理解和操作,是高強度非對稱加密系統,密鑰長度少則512位,多則2048位,非常難破解,安全系數是非常高的。ECC(Elliptic Curve Cryptosystems )加密演算法:橢圓曲線密碼體制,它同樣也是在數據位上額外的位存儲一個用數據加密的代碼。橢圓曲線其實可能比RSA更復雜。國內的老品牌CA機構-天威誠信,旗下的vTrus SSL證書,該證書支持 SHA256 with RSA 2048 演算法/ECC 256 演算法。

G. 非對稱加密演算法有哪些

RSA、Elgamal、背包演算法、Rabin、D-H、ECC橢圓曲線加密演算法。
非對稱加密(公鑰加密):指加密和解密使用不同密鑰的加密演算法,也稱為公私鑰加密。假設兩個用戶要加密交換數據,雙方交換公鑰,使用時一方用對方的公鑰加密,另一方即可用自己的私鑰解密。如果企業中有n個用戶,企業需要生成n對密鑰,並分發n個公鑰。假設A用B的公鑰加密消息,用A的私鑰簽名,B接到消息後,首先用A的公鑰驗證簽名,確認後用自己的私鑰解密消息。由於公鑰是可以公開的,用戶只要保管好自己的私鑰即可,因此加密密鑰的分發將變得十分簡單。同時,由於每個用戶的私鑰是唯一的,其他用戶除了可以通過信息發送者的公鑰來驗證信息的來源是否真實,還可以通過數字簽名確保發送者無法否認曾發送過該信息。

H. 非對稱加密演算法 (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

I. 什麼是RSA和ECC演算法

RSA(Rivest-Shamir-Adleman)加密演算法:它是第 一個既能用於數據加密也能用於數字簽名的演算法。比較易於理解和操作,是高強度非對稱加密系統,密鑰長度少則512位,多則2048位,非常難破解,安全系數是非常高的。ECC(Elliptic Curve Cryptosystems )加密演算法:橢圓曲線密碼體制,它同樣也是在數據位上額外的位存儲一個用數據加密的代碼。橢圓曲線其實可能比RSA更復雜,但其安全性比較高,離散對數問題對於計算機而言幾乎不可解。所以其位數不用太高,速度反而快些。如果想買該類型的證書,推薦國內的老品牌CA機構-天威誠信,旗下的vTrus SSL證書,該證書支持 SHA256 with RSA 2048 演算法/ECC 256 演算法。

J. SSL證書是選擇ECC演算法加密好還是RSA演算法好呢

ECC演算法更安全一些。

RSA演算法相比,ECC演算法擁有哪些優勢:

  1. 更適合於移動互聯網:ECC加密演算法的密鑰長度很短(256位),意味著佔用更少的存儲空間,更低的CPU開銷和佔用更少的帶寬。隨著越來越多的用戶使用移動設備來完成各種網上活動,ECC加密演算法為移動互聯網安全提供更好的客戶體驗。
  2. 更好的安全性:ECC加密演算法提供更強的保護,比目前的其他加密演算法能更好的防止攻擊,使你的網站和基礎設施比用傳統的加密方法更安全,為移動互聯網安全提供更好的保障。

  3. 更好的性能: ECC加密演算法需要較短的密鑰長度來提供更好的安全,例如,256位的ECC密鑰加密強度等同於3072位RSA密鑰的水平(目前普通使用的RSA密鑰長度是2048位)。其結果是你以更低的計算能力代價得到了更高的安全性。經國外有關權威機構測試,在Apache和IIS伺服器採用ECC演算法,Web伺服器響應時間比RSA快十幾倍。

  4. 更大的IT投資回報:ECC可幫助保護您的基礎設施的投資,提供更高的安全性,並快速處理爆炸增長的移動設備的安全連接。 ECC的密鑰長度增加速度比其他的加密方法都慢(一般按128位增長,而 RSA則是倍數增長,如:1024 –2048--4096),將延長您現有硬體的使用壽命,讓您的投資帶來更大的回報。

應用說明:如果對瀏覽器信任沒有要求,可以選擇ECC證書,如果存在較低的瀏覽器使用那麼必須採用RSA證書。

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:336
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:612
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:945
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:742
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:372