區塊鏈教程區塊鏈資訊保安3橢圓曲線加解密及簽名演算法的技術原理一,2018年下半年,區塊鏈行業正逐漸褪去發展之初的浮躁、迴歸理性,表面上看相關人才需求與身價似乎正在回落。但事實上,正是初期泡沫的漸退,讓人們更多的關注點放在了區塊鏈真正的技術之上。

橢圓曲線加解密及簽名演算法的技術原理及其Go語言實現

橢圓曲線加密演算法,即:Elliptic Curve Cryptography,簡稱ECC,是基於橢圓曲線數學理論實現的一種非對稱加密演算法。
相比RSA,ECC優勢是可以使用更短的金鑰,來實現與RSA相當或更高的安全。
據研究,160位ECC加密安全性相當於1024位RSA加密,210位ECC加密安全性相當於2048位RSA加密。

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

橢圓曲線

一般,橢圓曲線可以用如下二元三階方程表示:
y² = x³ + ax + b,其中a、b為係數。

如果滿足條件4a³+27b²≠0,則可以基於E(a, b)定義一個群。

定義橢圓曲線的運算規則

橢圓曲線上的運算規則,由如下方式定義:

加法:過曲線上的兩點A、B畫一條直線,找到直線與橢圓曲線的交點,交點關於x軸對稱位置的點,定義為A+B,即為加法。

二倍運算:上述方法無法解釋A + A,即兩點重合的情況。
因此在這種情況下,將橢圓曲線在A點的切線,與橢圓曲線的交點,交點關於x軸對稱位置的點,定義為A + A,即2A,即為二倍運算。

A + A = 2A = B

正負取反:將A關於x軸對稱位置的點定義為-A,即橢圓曲線的正負取反運算。

無窮遠點:如果將A與-A相加,過A與-A的直線平行於y軸,可以認為直線與橢圓曲線相交於無窮遠點。

綜上,定義了A+B、2A運算,因此給定橢圓曲線的某一點G,可以求出2G、3G(即G + 2G)、4G......。
即:當給定G點時,已知x,求xG點並不困難。反之,已知xG點,求x則非常困難。
此即為橢圓曲線加密演算法背後的數學原理。

有限域上的橢圓曲線運算

橢圓曲線要形成一條光滑的曲線,要求x,y取值均為實數,即實數域上的橢圓曲線。
但橢圓曲線加密演算法,並非使用實數域,而是使用有限域。
按數論定義,有限域GF(p)指給定某個質數p,由0、1、2......p-1共p個元素組成的整數集合中定義的加減乘除運算。

假設橢圓曲線為y² = x³ + x + 1,其在有限域GF(23)上時,寫作:

y² ≡ x³ + x + 1 (mod 23)

此時,橢圓曲線不再是一條光滑曲線,而是一些不連續的點。
以點(1,7)為例,7² ≡ 1³ + 1 + 1 ≡ 3 (mod 23)。如此還有如下點:

(0,1) (0,22)
(1,7) (1,16)
(3,10) (3,13)
(4,0)
(5,4) (5,19)
(6,4) (6,19)
(7,11) (7,12)
(9,7) (9,16)
(11,3) (11,20)
等等。

另外,如果P(x,y)為橢圓曲線上的點,則-P即(x,-y)也為橢圓曲線上的點。
如點P(0,1),-P=(0,-1)=(0,22)也為橢圓曲線上的點。

計算xG

相關公式如下:
有限域GF(p)上的橢圓曲線y² = x³ + ax + b,若P(Xp, Yp), Q(Xq, Yq),且P≠-Q,則R(Xr,Yr) = P+Q 由如下規則確定:

  • Xr = (λ² - Xp - Xq) mod p
  • Yr = (λ(Xp - Xr) - Yp) mod p
  • 其中λ = (Yq - Yp)/(Xq - Xp) mod p(若P≠Q), λ = (3Xp² + a)/2Yp mod p(若P=Q)

因此,有限域GF(23)上的橢圓曲線y² ≡ x³ + x + 1 (mod 23),假設以(0,1)為G點,計算2G、3G、4G...xG等等,方法如下:

計算2G:

  • λ = (3x0² + 1)/2x1 mod 23 = (1/2) mod 23 = 12
  • Xr = (12² - 0 - 0) mod 23 = 6
  • Yr = (12(0 - 6) - 1) mod 23 = 19
    即2G為點(6,19)

計算3G:
3G = G + 2G,即(0,1) + (6,19)

  • λ = (19 - 1)/(6 - 0) mod 23 = 3
  • Xr = (3² - 0 - 6) mod 23 = 3
  • Yr = (3(0 - 3) - 1) mod 23 = 13
    即3G為點(3, 13)

同理計算4G、5G...xG

未完待續感謝關注兄弟連區塊鏈教程分享!