最近在看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...