第二十六個知識點:描述NAF標量乘法算法


第二十六個知識點:描述NAF標量乘法算法

NAF標量乘法算法是標量乘法算法的一種增強,該算法使用了非鄰接形式(Non-Adjacent Form)表達,減少了算法的期望運行時間。下面是具體細節:

\(k\)是一個正整數,\(P\)是一個在域\(F_q\)上橢圓曲線\(E\)上的點。這個計算乘法操作\(Q = k * P\)就是圓曲線上的標量乘法操作(點乘)。一個最簡單計算的方法就是基於雙倍-加法的霍納規則的變體。顧名思義,該方法最突出的兩個構建塊是點加倍和點添加原語。就像名字那樣,算法也十分簡單。把\(k\)寫成

\[k=k_{n-1}2^{n-1}+k_{n-2}2^{n-2}+ \cdots +k_{1}+k_{0} \]

,其中\(k \in \{0,1\},i = 0,1,2,...,n-1\)。下面有兩種算法來表達。

INPUT: k = (kt−1,..., k1, k0)2, P ∈ E(Fq).

OUTPUT: k ⋅ P.

​ Q←∞.

​ For i from 0 to t−1 do

​ If ki = 1 then Q←Q+P.

​ P←2P.

Return(Q).

INPUT: k = (kt−1,..., k1, k0)2, P ∈ E(Fq).

OUTPUT: k ⋅ P.

​ Q←∞.

​ For i from t−1 down to 0 do

​ Q←2Q.

​ If ki = 1 then Q←Q+P.

Return(Q).

第一個算法計算\(k\)從右到左,第二個算法計算從左到右。在一個二進制表示中,1的數量大概是t/2=m/2。因此期望的運行時間是

\[\frac{m}{2} * A + m * D \]

在1951年,Booth[3]提出了一個新的標量二進制表達被叫做有符號二進制方法。然后Rietweisner[4]證明了每個整數在這種表達下都是獨一無二的[5]。尤其,如果\(p=(x,y) \in E(F_q)\),那么有\(-P=(x,x+y)\),如果\(F_q\)是二進制域。同時如果\(F_q\) 的階大於3,就有\(-P = (x,-y)\)。計算減法就會很有效。這讓我們想出了另一種有符號整數的表達方式。\(k = \sum^{l-1}_{i=0}k_i * 2^i\),其中\(k_i \in \{0,+,-\}\)。一個十分有用的有符號整數表達就是不相鄰范式(NAF)。NAF的形式就是上面那樣,但是規定了 \(k_{l-1} \neq 0\),同時沒有兩個相鄰的\(k_i\)都是0。NAF的長度是\(l\)

NAF的性質[1]

  • 每個正整數k都有獨一無二的NAF表達。記作NAF(k)。
  • NAF(k)有所有\(k\)的有符號表達最少的非零數字。
  • NAF(k)的長度最多比二進制表達多一個。
  • 如果NAF(k)的長度是l,那么有\(\frac{2^l}{3}<k<\frac{2^{l+1}}{3}\)
  • 在所有長度為\(l\)的NAF中,非零系數的概率約為1/3。

NAF(k)能夠通過下面的算法有效率的計算。

INPUT: A positive integer k.
OUTPUT: NAF(k).
​ i←0.
​ While k≥1 do
​ If k is odd then: ki ←2−(k mod 4), k←k−ki;
​ Else: ki ←0.
​ k←k/2, i←i+1.
Return(ki−1, ki−2,..., k1, k0).

最后一個算法給出了我們可以用NAF(k)代替k[1]的二進制表示來修改標量乘法從左到右的二進制方法:

INPUT: Positive integer k, P ∈ E(Fq).
OUTPUT: k ⋅ P.
​ Based on previous algorithm compute NAF(k) =∑l−1i=0ki⋅2i.
​ Q←∞.
​ For i from l−1 down to 0 do
​ Q←2Q.
​ If ki = 1 then Q←Q+P.
​ If ki = −1 thenQ←Q−P.
Return(Q).

基於NAF的第三個和第四個屬性,我們能計算上述算法的平均時間復雜度。

\[\frac{m}{3} * A + m * D \]

[1] Hankerson, Darrel, Scott Vanstone, and Alfred J. Menezes. "Guide to elliptic curve cryptography". Springer Science & Business Media, 2004.
[2] Jonathan Taverne, Armando Faz-Hernández, Diego F. Aranha, Francisco Rodríguez-Henríquez, Darrel Hankerson, Julio López. "Speeding scalar multiplication over binary elliptic curves using the new carry-less multiplication instruction", Journal of Cryptographic Engineering, Vol. 1, No 3, pp. 187-199, 2011.
[3] A.D.Booth, “A Signed binary multiplication technique”, Journal of Applied Mathematics, Vol. 4. No. 2, pp.236-240, 1951
[4] G.W.Reitwiesner, “Binary Arithmetic”, Advances in computers, Academic Press, Vol. 1, pp.231-308, 1960
[5] Karthikeyan, E. “Survey of elliptic curve scalar multiplication algorithms.” International Journal of Advanced Networking and Applications, Vol. 4, No 2, pp. 1581-1590, 2012


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM