椭圆曲线加密原理与应用
一. 概述
由于RSA、AES等國際算法面臨高強度算法禁售和被部署后門風險,我國基于ECC橢圓曲線,自研SM2/SM3/SM4/SM9一套安全算法。根據國家整體戰略,金融及重要領域要逐步實現國密算法替換,另根據人民銀行總體規劃,在2022年金融行業要全面應用國密算法。
在FireFly移動金融開發平臺中,完善的提供了支持國密算法的加解密算法包。為了更好的使用和推廣國密算法,下面具體分析ECC橢圓曲線的加密原理。
二. 橢圓曲線算法原理
橢圓曲線(Elliptic Curve Cryptography)加密算法是一種公鑰加密技術,以橢圓曲線理論為基礎。利用有限域上橢圓曲線的點構成的Abel群離散對數難解性,實現加密、解密和數字簽名。將橢圓曲線中的加法運算與離散對數中的模乘運算相對應,就可以建立基于橢圓曲線的對應密碼體制。
三. 橢圓曲線算法優化
1. 更適合于移動互聯網
在同等加密安全強度下,ECC密鑰長度為163bit,而RSA密鑰長度為1024bit。ECC加密算法的密鑰長度很短,意味著占用更少的存儲空間,更低的CPU開銷和占用更少的帶寬。隨著越來越多的用戶使用移動設備來完成各種網上活動,ECC加密算法為移動互聯網安全提供更好的客戶體驗。### 2. 更好的安全性
ECC加密算法提供更強的保護,比目前的其他加密算法能更好的防止攻擊,使你的網站和基礎設施比用傳統的加密方法更安全,為移動互聯網安全提供更好的保障。### 3. 更好的性能
ECC加密算法需要較短的密鑰長度來提供更好的安全。
四.橢圓曲線理論基礎
1. 定義
一條橢圓曲線是在射影平面上滿足方程
Y2Z + a1XYZ + a3Yz2 = X3+ a2X2Z + a4XZ2 + a5Z3
所有點的集合,且曲線上的每個點都是非奇異(或光滑)的。* 該方程是Weierstrass方程,是一個齊次方程。* 橢圓曲線的形狀,并不是橢圓的。只是因為橢圓曲線的描述方程,類似于計算一個橢圓周長的方程,故得名。下面是橢圓曲線的形狀:
- 由橢圓曲線的定義可以知道,橢圓曲線是光滑的,所以橢圓曲線上的平常點都有切線。
2. 橢圓曲線上的加密
① 運算法則
任意取橢圓曲線上兩點P、Q (若P、Q兩點重合,則做P點的切線)做直線交于橢圓曲線的另一點R’,過R’做y軸的平行線交于R。我們規定P+Q=R。(如圖)
② 運算法則詳
- 這里的+是從普通加法中抽象出來的加法,他具備普通加法的一些性質,但具體的運算法則顯然與普通加法不同。* k個相同的點P相加,我們記作kP。如下圖:P+P+P = 2P+P = 3P,3P即為P點的3倍點。
- 3. 有限域上的橢圓曲
① 有限域
前面講到的橢圓曲線是定義在實數域上的,實數是連續的,導致了橢圓曲線的連續,但是并不適合用于加密。所以,必須把橢圓曲線變成離散的點,需要把橢圓曲線定義在有限域上(顧名思義,有限域是一種只有由有限個元素組成的域)。
下面,給出一個有限域Fp,這個域只有有限個元素。
Fp中只有p(p為素數)個元素0,1,2 …… p-2,p-1;
Fp 的加法(a+b)法則是a+b≡c (mod p);即(a+b)÷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)的圖像
這樣橢圓曲線,就成了一個一個離散的點,橢圓曲線在不同的數域中會呈現出不同的樣子,但其本質仍是一條橢圓曲線。③ 計算橢圓曲線上點的坐標
Fp上的橢圓曲線同樣有加法,根據加法法則,可以計算出橢圓曲線上點的坐標。
已知點P(x1, y1), Q(x2,y2),計算點R(x3, y3):
X3 ≡ k2 – x1 – y1 (mod p)
Y3 ≡ k(x1–x3) –y1 (mod p)
若P≠Q,PQR三點共線,其斜率 k=(y2–y1) / (x2 –x1) 。
其中若P=Q,PR為過P點的橢圓切線,其斜率 k=(3x12+ a) / 2y1④ 橢圓曲線上的點的階
如果橢圓曲線上一點P,存在最小的正整數n,使得數乘nP=O∞,則將n稱為P的階,若n不存在,我們說P是無限階的。事實上,在有限域上定義的橢圓曲線上所有的點的階n都是存在的。
五. 橢圓曲線加解密原理
1. 加解密依據
公開密鑰算法總是要基于一個數學上的難題。比如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(k<n,n為基點G的階)稱為私有密鑰(privte key),K稱為公開密鑰(public key)。
k = 2,K為G的2倍點;
k = 3,K為G的3倍點;
k = 4,K為G的4倍點;
…
如果給定橢圓曲線上K為G的一個倍點,如何計算K為G的多少倍?直觀上理解,正向計算一個倍點是容易的,反向計算一個點K是G的幾倍點則困難的多。因此在橢圓曲線算法中,將倍數k做為私鑰,將K做為公鑰。### 2. 加解密過程
現在我們描述一個利用橢圓曲線進行加密通信的過程:
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(r<n)。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間傳送的明文信息。### 3. 加解密參數
密碼學中,描述一條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。
六.橢圓曲線數字簽名原理
1. 概述
橢圓曲線數字簽名算法(ECDSA)是使用橢圓曲線密碼(ECC)對數字簽名算法(DSA)的模擬。
ECDSA是ECC與DSA的結合,整個簽名過程與DSA類似,所不一樣的是簽名中采取的算法為ECC,最后簽名出來的值也是分為r,s。### 2. 簽名過程
1.選擇一條橢圓曲線Ep(a,b),和基點G;2.選擇私有密鑰k(k<n,n為G的階),利用基點G計算公開密鑰K=kG;3.產生一個隨機整數r(r<n),計算點R=rG;4.將原數據和點R的坐標值x,y作為參數,計算SHA1做為hash,即Hash=SHA1(原數據,x,y);5.計算s≡r - Hash * k (mod n);6.r和s做為簽名值,如果r和s其中一個為0,重新從第3步開始執行。### 3. 驗簽過程
接受方在收到消息(m)和簽名值(r,s)后,進行以下運算:
1.計算:sG+H(m)P=(x1,y1), r1≡x1 mod p。2.驗證等式:r1 ≡r mod p。3.如果等式成立,接受簽名,否則簽名無效。
七.橢圓曲線算法應用
橢圓加密算法的應用范圍很廣,如 TLS、openPGP以及SSH都在使用,在比特幣以及其他加密數字貨幣中也得到廣泛使用。另外我國重點推廣的國密SM2算法也正是基于橢圓曲線算法。下面以SM2和TLS為例進行說明:
1. SM2
① 概述
SM2算法和RSA算法都是公鑰密碼算法,隨著密碼技術和計算技術的發展,目前常用的1024位RSA算法面臨嚴重的安全威脅,我們國家密碼管理部門經過研究,決定采用SM2橢圓曲線算法替換RSA算法。SM2算法在安全性、性能上都具有優勢,參見表1算法攻破時間,表2算法性能。
RSA密鑰強度 | 橢圓曲線密鑰強度 | 是否攻破 |
512 | 106 | 已被攻破 |
768 | 132 | 已被攻破 |
1024 | 160 | |
2048 | 210 |
表1 算法攻破時間
算法 | 簽名速度(次/秒) | 驗簽速度(次/秒) |
1024位RSA | 2792 | 51224 |
2048位RSA | 455 | 15122 |
256位SM2 | 4095 | 871 |
表2 算法性能② SM2和橢圓曲線算法之間的關系
SM2算法采用的橢圓曲線方程為:y2= x3+ ax + b,在SM2算法標準中,通過指定a、b系數,確定了唯一的標準曲線。同時,為了將曲線映射為加密算法,SM2標準中還確定了其它參數,供算法程序使用。③ SM2加解密過程
下面是SM2加解密流程中使用到的符號縮略語:
A, B 使用公鑰密碼系統的兩個用戶。
dB 用戶B 的私鑰。
E(Fq) Fq 上橢圓曲線E 的所有有理點(包括無窮遠點O)組成的集合。
Fq 包含q 個元素的有限域。
G 橢圓曲線的一個基點,其階為素數。
Hash() 密碼雜湊算法。
Hv( ) 消息摘要長度為v 比特的密碼雜湊算法。
KDF( ) 密鑰派生函數。
h 余因子,h=#E(Fq)/n,其中n 是基點G 的階。
M 待加密的消息。
M’ 解密得到的消息。
n 基點G 的階(n 是#E(Fq)的素因子)。
O 橢圓曲線上的一個特殊點,稱為無窮遠點或零點,是橢圓曲線加法群的單位元。
PB 用戶B 的公鑰。
q 有限域Fq 中元素的數目。
a, b Fq 中的元素,它們定義Fq 上的一條橢圓曲線E。
x||y x 與y 的拼接,x、y 是比特串或字節串。
[k]P 橢圓曲線上點P 的k 倍點。
E(Fq) E(Fq)上點的數目,稱為橢圓曲線E(Fq)的階。
M⊕t xor運算a. 加密算法流程
SM2加密使用公鑰加密,公鑰由一個曲線坐標點組成,在X.509證書中的公鑰表示為04標記開始的2個32byte的BigInteger,即曲線點P(x,y)。SM2公鑰加密算法比RSA相對復雜,加密結果由3個部分組成,SM2加密過程中使用了隨機數,因此同樣的明文數據每一次加密結果都不一樣。
設需要發送的消息為比特串M,klen 為M 的比特長度。
為了對明文M 進行加密,作為加密者的用戶A 應實現以下運算步驟:
A1:用隨機數發生器產生隨機數k∈[1, n-1];
A2:計算橢圓曲線點C1 = [k]G=(x1, y1),按SM2 橢圓曲線公鑰密碼算法第1 部分3.2.9 和3.2.5 給
出的方法,將C1 的數據類型轉換為比特串;
A3:計算橢圓曲線點S= [h]PB,若S 是無窮遠點,則報錯并退出;
A4:計算橢圓曲線點[k]PB=(x2, y2),按SM2 橢圓曲線公鑰密碼算法第1 部分3.2.6 和3.2.5 給出的
方法,將坐標x2、y2 的數據類型轉換為比特串;
A5:計算t = KDF(x2||y2,klen),若t 為全0 比特串,則返回A1;
A6:計算C2=M⊕t;
A7:計算C3= Hash (x2||M|| y2);
A8:輸出密文C=C1||C3||C2。
根據國密推薦的SM2橢圓曲線公鑰密碼算法,首先產生隨機數計算出曲線點C1,2個32byte的BigInteger大數,即為SM2加密結果的第1部分。第2部分則是真正的密文,是對明文的加密結果,長度和明文一樣。第3部分是雜湊值,用來效驗數據。按國密推薦的256位橢圓曲線,明文加密結果比原長度會大96byte。
b. 解密算法流
SM2解密算法是加密逆運算。首先需要從密文中取出加密結果的3部分值,然后通過私鑰計算出M’明文值,最后效驗數據
設klen 為密文中C2 的比特長度。
為了對密文C=C1||C3||C2 進行解密,作為解密者的用戶B 應實現以下運算步驟:
B1:從C 中取出比特串C1,按SM2 橢圓曲線公鑰密碼算法第1 部分3.2.4 和3.2.10 給出的方法,
將C1 的數據類型轉換為橢圓曲線上的點,驗證C1 是否滿足橢圓曲線方程,若不滿足則報錯
并退出;
B2:計算橢圓曲線點S= [h]C1,若S 是無窮遠點,則報錯并退出;
B3:計算[dB]C1= (x2, y2),按SM2 橢圓曲線公鑰密碼算法第1 部分3.2.6 和3.2.5 給出的方法,將
坐標x2、y2 的數據類型轉換為比特串;
B4:計算t = KDF(x2||y2,klen),若t 為全0 比特串,則報錯并退出;
B5:從C 中取出比特串C2,計算M’=C2⊕t;
B6:計算u = Hash (x2||M’|| y2),從C 中取出比特串C3,若u≠C3,則報錯并退出;
B7:輸出明文M’。
SM2解密同樣也可以使用軟算法實現。但因為涉及到私鑰運算,為保護私鑰安全,建議在硬件設備中運行,例如UKey等存儲介質這樣可以更好的保護密鑰安全。拿文件加密來說,首先拿UKey里面的加密證書加密,這部分可在應用系統內完成。解密的話則需要加密證書對應UKey才能做解密,由應用系統調用UKey解密接口,在物理硬件內完成數據解密,同時可以受設備PIN碼保護。④ SM2算法的速度和結果長" style=“margin: auto” />
簡單講,SM2簽名速度快,驗簽速度慢,這點和RSA算法的特性正好相反。參見上表2。另外,加解密速度和驗簽速度相當。
SM2支持近128G字節數據長度,加密結果增加96個字節。
SM2簽名算法對原始數據量長度無限制,簽名結果為64字節。### 2. TLS
① 概述
HTTPS 通過TLS 層和證書機制提供了內容加密、身份認證和數據完整性三大功能,可以有效防止數據被監聽或篡改,還能抵御MITM(中間人)攻擊。TLS 在實施加密過程中,需要用到非對稱密鑰交換和對稱內容加密兩大算法。對稱內容加密強度非常高,加解密速度也很快,只是無法安全地生成和保管密鑰。在TLS 協議中,應用數據都是經過對稱加密后傳輸的,傳輸中所使用的對稱密鑰,則是在握手階段通過非對稱密鑰交換而來。② TLS中密鑰交換算法
目前最常用的密鑰交換算法有RSA 和ECDHE:RSA 歷史悠久,支持度好,但不支持PFS(Perfect Forward Secrecy);而ECDHE 是使用了ECC(橢圓曲線)的DH(Diffie-Hellman)算法,計算速度快,支持PFS。③ 基于ECC的密鑰交換算法
下面是五種常見的基于ECC的TLS 密鑰交換算法,它們分別模仿DH_DSS,DHE_DSS,DH_RSA,DHE_RSA和DH_anon。
" style=“margin: auto” />
以ECDHE_ECDSA為例:
證書包含ECDSA-capable 公鑰,使用ECDHE 算法協商預備主密鑰; 證書必須允許密鑰用于使用將在Server 密鑰交換消息中使用的散列算法進行簽名;公鑰必須使用一個能夠被Client 支持的曲線和點格式,Client 通過Client Hello 消息中的ec_point_formats 擴展指定支持的命名曲線,正如 [TLSECC] 中描述的那樣。這是TLS 1.2 中最安全,性能最高的密碼套件。④ ECDHE密鑰交換的完整握手流程
A: 客戶端向服務器發送Client Hello,告知服務器,客戶端支持的協議版本、加密套件等信息。
B: a. 服務端收到響應,選擇雙方都支持的協議、套件,向客戶端發送Server Hello,同時服務器也將自己的證書發送到客戶端(Certificate)。
b. 服務器利用私鑰將客戶端隨機數、服務器隨機數、服務器DH參數簽名,生成服務器簽名。
C: 服務端向客戶端發送服務器DH參數以及服務器簽名(Server Key Exchange)。
D: 客戶端向服務端發送客戶端DH參數(Client Key Exchange)。
之后,客戶端利用公鑰驗證服務器簽名,客戶端與服務器各自利用服務端DH參數、客戶端DH參數生成預主密鑰,再通過預主密鑰、客戶端隨機數、服務端隨機數生成主密鑰(會話密鑰)。最后握手完成,所有的消息都通過主密鑰加密。如圖:
八. 結論
橢圓曲線ECC算法基于橢圓曲線理論,可以用較少的計算能力提供更高的安全強度,有效地解決了“提高安全強度必須增加密鑰長度”的工程實現問題,且已經得到廣泛的支持和使用,讀者在選擇加密算法時,ECC算法不失為一個優秀的選擇。
九. 參考資料
ECC加密算法入門介紹https://www.pediy.com/kssd/pediy06/pediy6014.htmElliptic
Curve Cryptography: a gentle introductionhttps://andrea.corbellini.name/2015/05/17/elliptic-curve-cryptography-a-gentle-introduction/
國家密碼管理局http://www.oscca.gov.cn/
國家商用密碼(一)SM2橢圓曲線公鑰密碼算法http://www.firstsolver.com/wordpress/?p=1938TLS_
ECChttps://tools.ietf.org/html/rfc4492
網絡安全成長路線圖
這個方向初期比較容易入門一些,掌握一些基本技術,拿起各種現成的工具就可以開黑了。不過,要想從腳本小子變成hei客大神,這個方向越往后,需要學習和掌握的東西就會越來越多,以下是學習網絡安全需要走的方向:
? 上面介紹了技術分類和學習路線,這里來談一下學習方法:
? ## 視頻學習
? 無論你是去B站或者是油管上面都有很多網絡安全的相關視頻可以學習,當然如果你還不知道選擇那套學習,我這里也整理了一套和上述成長路線圖掛鉤的視頻教程,完整版的視頻已經上傳至CSDN官方,朋友們如果需要可以點擊這個鏈接免費領取。網絡安全重磅福利:入門&進階全套282G學習資源包免費分享!
292b4efcfed27bf4d.png#pic_center)
? 上面介紹了技術分類和學習路線,這里來談一下學習方法:
? ## 視頻學習
? 無論你是去B站或者是油管上面都有很多網絡安全的相關視頻可以學習,當然如果你還不知道選擇那套學習,我這里也整理了一套和上述成長路線圖掛鉤的視頻教程,完整版的視頻已經上傳至CSDN官方,朋友們如果需要可以點擊這個鏈接免費領取。網絡安全重磅福利:入門&進階全套282G學習資源包免費分享!
總結
以上是生活随笔為你收集整理的椭圆曲线加密原理与应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IT猿助手 宝宝取名助手 App Te
- 下一篇: 达内重磅推出校园版“非你莫属”《名企有约