ECC中計算倍點的兩種方法

2021-08-17 19:02:30 字數 2457 閱讀 2971

最近在看ecc的加密演算法,該演算法的安全性基於「求離散對數」的困難。下面主要介紹一下ecc在實現倍點過程中的演算法,分為兩部分:一是基於二進數的計算方法,二是基於naf序列的計算方法。

基於二進數的計算方法中,分為兩種遍歷方式,一是從左向右遍歷,二是從右向左遍歷,該演算法類似模冪運算中對於其指數的處理方式。具體演算法如下。

ecc中計算倍乘的演算法:現計算

kp,k=(k

t-1,kt-2,.....,k1,k0),pe(fq)

演算法1:從左向右遍歷

輸入:k=(kt-1,kt-2,.....,k1,k0),pe(fq)

輸出:q=k p

q←0(這裡0指的是群運算中的單位元)

for i=0 to t-1

begin

if ki=1 q=q+p

p=2p

endreturn q

演算法2:從右向左遍歷

輸入:k=(kt-1,kt-2,.....,k1,k0),pe(fq)

輸出:q=k p

q←0(這裡0指的是群運算中的單位元)

for i=t-1 to 0

begin

q=2q

if ki=1 q=q+p

endreturn q

基於naf序列計算點乘運算中也分為兩種情況,一種是基於naf2,一種是基於nafw,下面先介紹一下naf的定義,然後再介紹一下基於naf計算點乘的演算法。

標量的非相鄰表示稱為naf

定義:乙個正整數k的非相鄰表示型是表示式,其中,並且沒有兩個連續的數字ki

是非零的,naf的長度是

l.naf的性質:

1 k有唯一的

naf,

並記作naf(k)

。2 naf(k)在

k 的所有帶符號表示中具有最少的非零位。

3 naf(k)的長度最多比

k的二進位制表示的長度大

1.4 若naf(k)的長度是l,則

2l/3(l+1)/3.

5 所有長度為l的

naf中非零數字的平均密度約為

1/3.

計算乙個正整數的naf,演算法如下:

輸入:乙個正整數k

輸出:naf序列

1. i←0

2. while (k≥1)

3.   if(k mod 2==1) ki←2-(k mod 4),k ←k-ki

4.   else ki=0

5.   k ←k/2,i ←i+1

6. return (ki-1,ki-2,....,k0)

用二進位制naf的方法計算點乘

輸入:乙個正整數k, pe(fq)

輸出:kp

1. naf(k)=

2. q←0(這裡0指的是群運算中的單位元)

3. for i=l-1 to 0

4. begin

5.    q←2q

6.    if ki=1 q ←q+p

7.    if ki=-1 q ←q-p

8. return q

視窗方法:即基於nafw的計算方法。

可以利用額外的儲存器,採用一次處理k的

w位的視窗方法,可以將演算法的執行時間減小。

定義:令w≥2是正整數。正整數

k的寬度為w的

naf是表示式

,其中每乙個非零係數ki都是奇數,,,並且任何連續w個數字中最多

1位非零。寬度為w的

naf的長度是l。

寬度為w的

naf的性質:

1. k有唯一的寬度

naf,記作

nafw(k)

2. naf2(k)=naf

3. nafw(k)的長度最多比

k的二進位制表示的長度大1。

4. 在所有長度為l的寬度w的

naf中,平均非零數字的密度近似為

1/w+1

計算乙個正整數的視窗寬度w的

naf輸入:視窗寬度為w,乙個正整數

k輸出:nafw(k)

1. i←0

2. 當k≥1時,重複執行

3.    if(k mod 2 ==1) then ki ←k mod 2w,k ←k- ki

4.    else ki ←0

5.    k← k/2,i ←i+1

6. return (ki-1,ki-2,.....,k1,k0)

計算點乘的視窗naf方法

輸入:視窗寬度w,乙個正整數

k, pe(fq)

輸出:kp

1. 計算nafw(k)

2. 對於,計算pi=i p

3. q←0(這裡0指的是群運算中的單位元)

4. for i=l-1 to 0

5. q ←2q

6.  if ki≠0

7.    if ki>0 q ←q+pi

8.    else q← q-pi

9. return q

簡單計算器 兩種方法

讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。輸入 1 2 4 2 5 7 11 0輸出 3.00 13.36 這種型別題寫了很多,但每次變化一點點就會卡很久,而且中綴轉字尾也一直不熟練。今天再用兩種方法總結一次 相比於之前寫的中綴式轉字尾式,遇到的問題有 常量不再用a,b,c表示,而是具...

popup的兩種方法

1,popup var pop function window.onload function aaa function closediv 2,div var divtop,divleft,divwidth,divheight,docheight,docwidth,objtimer,i 0 var ...

排序的兩種方法

如果adt需要比較大小,或者要放入collections或arrays進行排序,可實現comparator介面並override compare 函式。第一種 構建乙個新的comparator類,重寫compare 函式,在客戶端直接呼叫靜態函式collections.sort 新的comparat...