橢圓曲線的純量乘法:修订间差异

维基百科,自由的百科全书
删除的内容 添加的内容
Wolfch留言 | 贡献
Wolfch留言 | 贡献
第59行: 第59行:


其中''a''是方程式''E''裡的係數。
其中''a''是方程式''E''裡的係數。

==點乘法==
最直接計算點乘法的方式就是反覆的執行加法。不過也有其他更有效率的算法。

===Double-and-add===
最簡單的方式就是double-and-add法<ref name="guide">{{cite book|last1=Hankerson|first1=Darrel|last2=Vanstone|first2=Scott|last3=Menezes|first3=Alfred|title=Guide to Elliptic Curve Cryptography|year=2004|publisher=Springer-Verlag|location=New York|isbn=0-387-95273-X|series=Springer Professional Computing|doi=10.1007/b97644|s2cid=720546}}</ref>,其作法類似模乘幂中的[[平方求幂]]。其演算法如下:

要計算''sP'',要先將''s''以二進制表示{{tmath|s {{=}} s_0 + 2s_1 + 2^2s_2 + \cdots + 2^ms_m }}, where {{tmath|s_0 ~..~ s_m \in \{0, 1\}, m{{=}}\lfloor \log_2{s} \rfloor }}:

以下是迭代演算法,其迴圈變數i遞減:

let bits = bit_representation #為s的二進制表示(從MSB到LSB)
let res = <math>\begin{align}\mathcal{O}\end{align}</math> #無窮遠點
for bit in bits:
res = res + res # double
if bit == 1:
res = res + P # add
i = i - 1
return res

在資訊安全上,此方法會容易受到{{le|le|計時攻擊|timing attack}}的攻擊。以下的Montgomery Ladder法是可以避免計時分析的作法。

以下則是使用遞迴函數的作法:

f(P, d) is
if d = 0 then
return 0 # 已計算完成
else if d = 1 then
return P
else if d mod 2 = 1 then
return point_add(P, f(P, d - 1)) # 若d為奇數,進行addition
else
return f(point_double(P), d/2) # d為偶數,進行doubling

其中''f''是乘法的函數,''P''是要乘的座標,''d''是要加的次數。例如''100P''可以寫成 ''{{nowrap|2(2[P + 2(2[2(P + 2P)])])}}'',需要六個點乘二和二個點加運算,''100P''等於''f(P, 100)''。

此一演算法需要執行log<sub>2</sub>(''d'')個運算(點乘二或點加)。有許多演算法是以此為基礎來進行的修改,例如window、sliding window、NAF、NAF-w、vector chains和Montgomery ladder。


==參考資料==
==參考資料==

2021年12月23日 (四) 04:45的版本

橢圓曲線點的乘法也稱為橢圓曲線的純量乘法,是將椭圆曲线上的一點反覆和自身相加的運算。此運算在椭圆曲线密码学(ECC)中可以用來產生單向函數。 此條目中將這種乘法用标量乘法來表示,再配合海賽形式的橢圓曲線英语Hessian form of an elliptic curve。此運算也稱為橢圓曲線點的乘法(elliptic curve point multiplication),不過此名稱有時會誤解為二個點之間的乘法(其實是整數純量和點的乘法)。

基礎

假定在有限域上定義的曲線E(例如E: y2 = x3 + ax + b),其點乘定義為重覆的進行在曲線上點的加法,表示為nP = P + P + P + … + P,其中n是係數(整數)以及在曲線E上的一點P = (x, y),這類的曲線稱為魏尔施特拉斯曲線(Weierstrass curve)。

現代橢圓曲線密碼學安全性的基礎是在給定QP,以及Q = nP的情形下,若n很大,無法求得n的特性而來(類似其他的迪菲-赫爾曼密鑰交換問題,此問題稱為橢圓曲線離散對數英语Discrete_logarithm_records問題)。此原因是因為橢圓曲線上兩點的相加(或是某一個點加上自身)會得到第三點,而這個點的位置和前一點或前二點沒有明確的關係,重覆很多次之後,nP可能會在曲線上的任何位置。在直覺上,橢圓曲線的純量乘法和以下例子類似:假設在圓上選一個點P,再將其角度加上42.57度,所得的點離P會有一些距離,不過不會太遠,不過若加上1000次或1001次的42.57度,需要需比較複雜的運算才能求出所得的點的位置。回到橢圓曲線的純量乘法,若要進行逆運算,給定Q=nP,已知PQ,要求n,只能一個一個的針對可能的n來檢查,若n的可能範圍很大的話,這在計算上就是不可行的。

點運算

橢圓曲線的點乘法:相加(圖1)、加倍(圖2和圖4)和反相(圖3)

橢圓曲線上的點,一般會定義三種運算:相加、加倍和反相。

無窮遠點

無窮遠點是橢圓曲線算術中的單位元。任意點和此點相加,相加前和相加後的結果不變。若無窮遠點加上無窮遠點,結果仍為無窮遠點。

也就是:

無窮遠點也會寫成0.

反相

點的反相是指針對某一個點,可以找到另一個點,與其相加後為無窮遠點()。

在橢圓曲線上,一點反相點的x座標會和該點相同,而y座標會為該點座標的負值:

點的相加

針對二個相異點PQ,其加法定義為PQ所形成的直線,和曲線E交點的反相點R.[1]

假設橢圓曲線的方程式是y2 = x3 + ax + b,可以計算得到:

若其中沒有任何一點是無窮遠點,且這些點的x座標都不同,則上式正確。這在椭圆曲线数字签名算法(ECDSA)上非常重要,因為hash值有可能為0。

點的加倍

假設點PQ重合(座標相同),其加法類似,但無法依上述方式定義直線,因此使用極限的作法,取曲線EP點的切線。

計算同上,取導數(dE/dx)/(dE/dy)可得[1]

其中a是方程式E裡的係數。

點乘法

最直接計算點乘法的方式就是反覆的執行加法。不過也有其他更有效率的算法。

Double-and-add

最簡單的方式就是double-and-add法[2],其作法類似模乘幂中的平方求幂。其演算法如下:

要計算sP,要先將s以二進制表示, where

以下是迭代演算法,其迴圈變數i遞減:

   let bits = bit_representation #為s的二進制表示(從MSB到LSB)
   let res =  #無窮遠點
   for bit in bits:
       res = res + res # double
       if bit == 1:            
           res = res + P # add
       i = i - 1
   return res

在資訊安全上,此方法會容易受到timing attack的攻擊。以下的Montgomery Ladder法是可以避免計時分析的作法。

以下則是使用遞迴函數的作法:

  f(P, d) is
     if d = 0 then
         return 0                         # 已計算完成
     else if d = 1 then
         return P
     else if d mod 2 = 1 then
         return point_add(P, f(P, d - 1)) # 若d為奇數,進行addition
     else
         return f(point_double(P), d/2)   # d為偶數,進行doubling

其中f是乘法的函數,P是要乘的座標,d是要加的次數。例如100P可以寫成 2(2[P + 2(2[2(P + 2P)])]),需要六個點乘二和二個點加運算,100P等於f(P, 100)

此一演算法需要執行log2(d)個運算(點乘二或點加)。有許多演算法是以此為基礎來進行的修改,例如window、sliding window、NAF、NAF-w、vector chains和Montgomery ladder。

參考資料

  1. ^ 1.0 1.1 https://crypto.stanford.edu/pbc/notes/elliptic/explicit.html
  2. ^ Hankerson, Darrel; Vanstone, Scott; Menezes, Alfred. Guide to Elliptic Curve Cryptography. Springer Professional Computing. New York: Springer-Verlag. 2004. ISBN 0-387-95273-X. S2CID 720546. doi:10.1007/b97644.