橢圓曲線的數學定義可以檢視Wolfram MathWorld:http://mathworld.wolfram.com/EllipticCurve.html。不是密碼學或者數學專業的小夥伴,看的是一頭霧水。便於工程理解,橢圓曲線是一系列滿足如下方程的點:
從方程可以看出,橢圓曲線是關於x座標對稱的曲線。除了座標系上曲線的點,橢圓曲線額外定義一個點(無窮遠處),記為 0。
也就是說,橢圓曲線是由如下的點組成:
1.2 基於橢圓曲線的群定義
在橢圓曲線的基礎上,可以定義一個加法群:
· 所有橢圓曲線上的點,就是這個群裡的元素
· 單位元就是0
· 點P的逆元是點P相對x座標的對稱點
結合群的定義,可以證明定義的這個加法群,就是阿貝爾群。
1.3 橢圓曲線加法計算
1.4 加法計算推導
當然,如果P/Q是同一個點的話,斜率的計算公式不同。
1.5 標量乘法(Scalar Multiplication)
在加法的基礎上,定義了標量乘法,同一個點相加多次:
1.6 對數問題
2. 有限域上的橢圓曲線
上面介紹的是基於實數的橢圓曲線的點,可以構造一個群。考慮特徵數為的有限域, 為素數。
2.1 擴充套件歐幾里得定理
給予二整數 a 與 b, 必存在有整數 x 與 y 使得ax + by = gcd(a,b)。gcd(a,b)是最大公約數。
2.2 模p運算下的乘法逆
透過擴充套件歐幾里得定理,可以求得x和y。x就是a的乘法逆。
2.3 在F_p定義橢圓曲線
在模p的情況下,這兩個等式相等。
2.4 點加
2.5 點加計算
其他條件下的推導,涉及的公式比較多。有興趣的小夥伴可以自行推導。
2.6 在有限群上的橢圓曲線有多少點?
橢圓曲線上的點的個數,稱為“階”。如果列舉0~p-1,檢視點的個數,不太現實,因為p是一個非常大的質數。Schoof演算法能在多項式時間確定橢圓曲線階:https://en.wikipedia.org/wiki/Schoof%27s_algorithm。
2.7 標量乘法
和實數域上一樣,可以使用double後相加的方法計算。在有限域上,有額外的特性,舉個例子:
很容易看出,在有限域上的橢圓曲線中一個點標量乘法的結果,組成一個在加法操作下的迴圈子群。在子群中的點,所有的加法的結果都還在子群中。而且,存在一個點,冪次(加法操作)能生成子群中的所有點。這樣的點,稱為“生成元”。
繞了一大圈,在有限域上的橢圓曲線上,存在很多個迴圈子群。子群是基於加法操作。
2.8 迴圈子群的階
Schoof演算法能確定整個基於有限域上的橢圓曲線上的點的個數,但是不能確定迴圈子群的個數。
拉格朗日定理指出,對於任何有限群G,G的每個子群H的階次(元素數)都會被G的階次整除。
https://en.wikipedia.org/wiki/Lagrange%27s_theorem_(group_theory)
該定理給尋找迴圈子群的階n,提供了一個思路:
1/ 利用Schoof演算法,計算出整個橢圓曲線的階
2/ 找出其所有的約數
2.9 尋找生成元
通常使用橢圓曲線演算法,先選擇曲線,計算橢圓曲線的階,然後在這條曲線上找到最大的子群。找子群,就是尋找子群對應的生成元。
2.10 離散對數問題
2.11 同態
總結:
有限域上的橢圓曲線是零知識證明的基礎。零知識的實現是基於離散對數問題。從計算的角度來看,F_p是個有限域,在之基礎上建立的橢圓曲線點的運算都是在這個域範圍內。有限域上的橢圓曲線上有很多迴圈子群F_r,具有加法同態的特性。離散對數問題指的是,在迴圈子群上已知兩點,卻很難知道兩點的標量。