橢圓曲線複習
參考:https://blog.csdn.net/m0_54743939/article/details/121441004
橢圓曲線算法可以看作是定義在特殊集合下數的運算,滿足一定的規則。
橢圓曲線在如下兩個域中定義:\(F_p\)域和\(F_{2^m}\)域。
-
\(F_p\)域,素數域,\(p\)爲素數;
-
\(F_{2^m}\)域:特徵爲2的有限域,稱之爲二元域或者二進制擴展域。該域中元素的個數爲\(2^m\)個。
橢圓曲線標準文檔如下:
- X9.62
Public Key Cryptography For The Financial Services Industry: The Elliptic Curve Digital Signature Algorithm (ECDSA);
- SEC 1
SEC 1:Elliptic Curve Cryptography;
- SEC 2
SEC 2: Recommended Elliptic Curve Domain Parameters;
- NIST
(U.S.) National Institute of Standards and Technology,美國國家標準;
- SM2
SM2橢圓曲線公鑰密碼算法第1部分:總則
這些標準一般都描述了\(F_p\)域和\(F_{2^m}\)域、橢圓曲線參數、數據轉換、密鑰生成以及推薦了多種橢圓曲線。
術語說明
- 橢圓曲線的階(order of a curve)
橢圓曲線所有點的個數,包含無窮遠點;
如何確定一條曲線上的點數,即橢圓曲線的階:
定理:\(F_p\)域上的橢圓曲線\(y^2=x^3+ax+b(a,b\in F_p,4a^3+27b^2\neq 0)\)在第象限中的整數點(包括無窮遠點)共有:\(1+p+\varepsilon,|\varepsilon|\le 2\sqrt{p}\)個;若是在\(F_{2^p}\)域上,則曲線的階數爲\(2^p+1-2^{1+p/2}\le 2^p+1-2^{1+p/2}\)
例如:\(p=5\),則\(|\varepsilon|\le 4\),所以\(F_5\)上的橢圓曲線\(y^2=x^3+ax+b\)上的點數在2~10之間,\(F_{2^5}\)上的橢圓曲線的階數爲25~41之間。
- 橢圓曲線上點的階(order of a point)
P爲橢圓曲線上的點,\(nP\)=無窮遠點,\(n\)取最小整數,即是點\(P\)的階;
- 基點(base point)
橢圓曲線參數之一,用\(G\)表示,是橢圓曲線上的一個點,常用於密鑰生成,一旦選定,不能隨意更改
從數學上看:基點是橢圓曲線有限加法羣的大素因子子羣的一個隨機選取的生成元。基點雖是隨機產生的,但爲保證系統安全性,一般要求所選取的基點必須具有大素數階。
- 餘因子(cofactor)
橢圓曲線的餘因子,用\(h\)表示,爲橢圓曲線點的個數 / 基點的階,即橢圓曲線的階 / 基點的階
- 橢圓曲線參數
(1)素數域:\((p,a,b,G,n,h)\)
其中,\(p\)爲素數,確定\(F_p\),\(a\)和\(b\)確定橢圓曲線方程,\(G\)爲基點,\(n\)爲\(G\)的階,\(h\)爲餘因子。
(2)二進制擴展域:\((m,f(x),a,b,G,n,h)\)
其中,\(m\)確定\(F_{2^m}\),\(f(x)\)爲不可約多項式,\(a\)和\(b\)用於確定橢圓曲線方程,\(G\)爲基點,\(n\)爲\(G\)的階,\(h\)爲餘因子。
- 橢圓曲線公鑰和私鑰
橢圓曲線的私鑰是一個隨機整數,小於\(n\);
橢圓曲線的公鑰是橢圓曲線上的一個點:\(Q=私鑰*G\)。
在線生成曲線,即點:https://graui.de/code/elliptic2/
- 點的逆
對於一個點\(P=(x,y)\),則\((x,-y)\)就是\(P\)的加法逆元,記爲\(-P\)
計算
點加
對於曲線\(E_p(a,b)\)上的兩個點:\(P=(x_1,y_1),Q=(x_2,y_2)\),計算\(P+Q\):
\(\lambda=\left\{\begin{matrix}\frac{y_2-y_1}{x_2-x_2},P\ne Q \\\frac{3x_1^2+a}{2y_1},P=Q \end{matrix}\right.\)
\(x_3=\lambda^2-x_1-x_2(mod p),y_3=\lambda(x_1-x_3)-y_1(mod p)\)
點乘
點乘(倍點)支持重複加法,即\([3]P=P+P+P\)
另外還有其他的計算方法:計算\([k]P\)
參考:GMT 0003.1-2012 SM2橢圓曲線公鑰密碼算法第1部分:總則
以下給出三種方法:
- 二進制展開法
- 加減法
- 滑動窗口法
SM2
SM2使用的是素數域256位的橢圓曲線,即: