国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

橢圓曲線加法運(yùn)算的數(shù)據(jù)仿真

2018-07-02 11:02:40劉增芳韋性佳蘆殿軍
關(guān)鍵詞:逆運(yùn)算素數(shù)模數(shù)

劉增芳,韋性佳,蘆殿軍

(青海師范大學(xué) 數(shù)學(xué)與統(tǒng)計學(xué)院,青海 西寧,810008)

隨著信息技術(shù)的高速發(fā)展,信息安全已經(jīng)成為全社會所面臨的重大挑戰(zhàn),橢圓曲線密碼體制(Elliptic curve cryptosystem,簡稱ECC)已經(jīng)廣泛的應(yīng)用于各類密碼學(xué)方案的構(gòu)造之中,作為保障信息安全性的核心工具之一,具有十分重要的研究價值。1985年Neal Koblitz和Victor Miller首次在密碼學(xué)的研究之中啟用了橢圓曲線公鑰密碼體制[1-2]。經(jīng)過研究發(fā)現(xiàn),ECC具有如下兩方面優(yōu)勢:1)密鑰具有較小的存儲空間與運(yùn)算量,這就極大的簡化了密碼體制的運(yùn)算成本,具有更高的實用性。2)可定義群之間基于Weil對或是Tate對的雙線性映射[3-4],基于此ECC已成為理想的公鑰密碼體制之一。3)橢圓曲線的加法運(yùn)算,在很大程度上加快了密碼體制的運(yùn)算速度。目前對于ECC的硬件實現(xiàn)已成為許多學(xué)者研究的重要課題之一。2013年,宋春玉[5]利用matlab軟件,編譯了橢圓曲線密碼系統(tǒng)的基本運(yùn)算與原理,并且第一次將其應(yīng)用于漢字的加密和解密之中。2016年,謝天藝等人[6]利用ECC硬件加速器實現(xiàn)了硬件可配的點(diǎn)乘和素數(shù)檢測。同年,王千喜等人[7]對于ECC算法的硬件的實現(xiàn)進(jìn)行了優(yōu)化,使得在主時鐘為300M、密鑰長度是160bit的條件下,ECC加密解密的效率提升至大約5k/s,這極大的提高了目前ECC加密和解密的速度。

文中討論的是基于有限域上橢圓曲線的群中加法運(yùn)算的實現(xiàn)方案。橢圓曲線加法運(yùn)算的數(shù)據(jù)模擬并不是一件簡單的事情,需要做如下幾項工作:第一,判斷兩數(shù)是否互素。這個工作是為下一步模逆運(yùn)算做準(zhǔn)備的,因為只有兩個互素的數(shù)才可求逆,否則不成立。第二,實現(xiàn)有限域上的模逆運(yùn)算,這也是橢圓曲線加法群運(yùn)算中的關(guān)鍵性算法。第三,對有限域上的橢圓曲線利用Euler準(zhǔn)則測試給定一個x對應(yīng)的y值是否是一個二次剩余,如果是二次剩余,文中將給出相應(yīng)的點(diǎn),并輸出點(diǎn)的個數(shù)。第四,實現(xiàn)橢圓曲線加法運(yùn)算。

1 預(yù)備知識

1.1 有限域Fp上的橢圓曲線

定義1 令p>3是一個奇素數(shù)。有限域Fp上的橢圓曲線E可以定義為等式[8]

y2=x3+ax+b,a,b∈Fp

并且4a3+27b2≠0(modp),集合E(Fp)包括所有的點(diǎn)(x,y),x∈Fp,y∈Fp,且點(diǎn)坐標(biāo)(x,y)滿足等式y(tǒng)2=x3+ax+b,集合E(Fp)還有一個特殊的點(diǎn)稱作無窮遠(yuǎn)點(diǎn)。

1.2 Euclidean算法

給出兩數(shù)a,b∈Z+,利用Euclidean算法求兩數(shù)的最大公因子。令r0=a,r1=b,ri(i=2,…,m):ri/ri+1所得余數(shù),qj(j=1,2,…,m):ri/ri+1所得商。具體算法執(zhí)行如下(即輾轉(zhuǎn)相除法):

容易看到

gcd(r0,r1)=gcd(r1,r2)=…=gcd(rm-1,rm)=rm

因此,可以得到gcd(a,b)=rm。

擴(kuò)展的Euclidean算法,它以兩個整數(shù)a和b作為輸入,計算出整數(shù)r,s和t使得r=gcd(a,b)且sa+tb=r。若r=1即gcd(a,b)=1,則有b-1moda=tmoda。

1.3 二次剩余

設(shè)E是Zp上的橢圓曲線y2=x3+ax+b。首先確定E的點(diǎn)。這可以通過對每個x∈Zp,計算x3+ax+b(modp)解方程

y2≡x3+ax+b(modp)

求y。對于給定的x,可用Euler準(zhǔn)則測試是否z=x3+ax+b是一個二次剩余。對于素數(shù)p≡3(mod4),利用公式z(p-1)/2modp判斷z是否為一個二次剩余。若此值等于1,則說明z是一個二次剩余,否則z不是一個二次剩余。二次剩余z的平方根是±z(p+1)/4modp。

1.4 橢圓曲線的群的加法運(yùn)算

橢圓曲線上的加法運(yùn)算定義如下(這里的所有運(yùn)算都在Zp中)。假設(shè)P=(x1,y1)并且Q=(x2,y2)是E上的點(diǎn)。

1)如果x1=x2且y1=-y2,則P+Q=O(無窮遠(yuǎn)點(diǎn))

2)否則P+Q=(x3,y3),其中

并且對λ有如下定義:

3)最后,對于所有的P∈E,有P+O=O+P=P

需要注意的是,Zp上的橢圓曲線沒有像實數(shù)域上的橢圓曲線那樣直觀的幾何解釋。然而,定義加法運(yùn)算亦可用同樣的公式,(E,+)仍是一個阿貝爾群。

2 模素數(shù)的橢圓曲線加法

2.1 判斷兩數(shù)互素

利用Euclidean算法計算兩數(shù)的最大公約數(shù),若最大公約數(shù)為1,則說明兩數(shù)互素。C語言程序如下:

#include

void main()

{int a,b,m;printf("please input two number:");

{scanf("%d%d",&a,&b);if(a==0‖b==0)

{printf("wrong input ");}

else{m=a%b;while(m!=0)

{ a=b;b=m;m=a%b;}

printf("%d ",b);}}}

2.2 模逆運(yùn)算

設(shè)對于任意的a,b∈Zn,且gcd(a,b)=1。因為模逆運(yùn)算所得到的值不唯一,文中取其最小值,利用擴(kuò)展Euclidean算法可實現(xiàn)模逆運(yùn)算。基本思想如下(分情況論述):

1)當(dāng)b>0時,計算模數(shù)a的正整數(shù)倍:1×a,2×a,3×a,…,n×a,將所得到的模數(shù)a的正整數(shù)倍加1,即1×a+1,2×a+1,3×a+1,…,n×a+1 。采用試除法,將模數(shù)a的倍數(shù)加1的每一項都除以b,直到余數(shù)為0即正好整除,則所得到的商即為b-1moda的值。

2)當(dāng)b<0時,計算模數(shù)a的負(fù)整數(shù)倍:(-1)×a,(-2)×a,(-3)×a,…,(-n)×a,將所得到的模數(shù)a的負(fù)整數(shù)倍加1,即(-1)×a+1,(-2)×a+1,(-3)×a+1,…,(-n)×a+1。利用試除法,將模數(shù)a的倍數(shù)加1的每一項都除以b,直到余數(shù)為0即正好整除,這時將所得到的商是負(fù)數(shù),因此文中再將商模a得到正值,故而此時的正值即為b-1moda的值。

根據(jù)上述算法,相應(yīng)的C語言程序如下所示:

#include

#include

int gcd(int a,int b);

void main()

{int a,b,i,s;printf("input two number:");scanf("%d%d",&a,&b);a=a%b;

if(gcd(a,b)==1){for(i=1;i<100000;i++)

{if(a>0){if((i*b+1)%a==0) s=(i*b+1)/a;s=s%b;}

else{if(((-1)*i*b+1)%a==0)

{s=((-1)*i*b+1)/a;s=s+b;s=(b+s%b)%b;}}}

printf("%d ",s);}

else {printf("waring ! waring ! wrong input: ");}

int gcd(int a,int b){int m;if(a>0) {m=a%b;while(m!=0) {a=b;b=m;m=a%b;} return b;}

else{a=a+b;m=a%b;while(m!=0) {a=b; b=m;m=a%b;} return b;}}

2.3 判斷二次剩余

判斷二次剩余的目的是為了選取生成元。對于橢圓曲線y2=x3+ax+b,令a=-1,b=8即y2=x3-x+8,如圖1所示:

圖1 y2=x3-x+8的函數(shù)圖像Fig.1 The functional image of y2=x3-x+8

依據(jù)模數(shù)要求選取模數(shù)p為11。相應(yīng)的C語言程序如下:

#include

#include

void main()

{int z,x,p,y1,y2,k=0;scanf("%d",&p);

if(p%4!=3) {printf("wrong input,please change the number: ");scanf("%d",&p);}

else{for(x=0;x<=p-1;x++) {z=(x*x*x-x+8)%p;if((int)(pow(z,(p-1)/2))%p==1)

{y1=(int)(pow(z,(p+1)/4))%p; y2=(p-(int)(pow(z,(p+1)/4))%p)%p;

printf("x=%d,y1=%d,y2=%d ",x,y1,y2);k=k+2;}}printf("k=%d ",k);}}

運(yùn)行此程序,文中得到了相應(yīng)的數(shù)據(jù),如表1所示:

表1Z11上的橢圓曲線y2=x3-x+8的點(diǎn)

Table 1 The point of the elliptic curvey2=x3-x+8inZ11

xx3-x+8(mod11)是二次剩余嗎y08否18否23是5,6310否42否57否69是3,873是5,686否92否108否

由上表可知產(chǎn)生6個點(diǎn),還有一個點(diǎn)是無窮遠(yuǎn)點(diǎn),所以E共有7個點(diǎn)。

2.4 橢圓曲線加法運(yùn)算

對于模素數(shù)橢圓曲線y2≡x3-x+8(mod 11)加法運(yùn)算的C語言程序如下:

#include

#include

int ECCadd(int x1,int y1,int x2,int y2,int k,int p)

{int x3,y3,r,m,i;for(i=2;i<=k;i++) {if(x1==x2&&y1==-y2) {printf("無窮遠(yuǎn)點(diǎn) ");}

else if(x1==x2&&y1==y2)

{m=invert(2*y1,p);r=((3*x1*x1-1)*m)%p;x3=(p*p+(r*r-x1-x2))%p;

y3=(p*p+(r*(x1-x3)-y1))%p;printf("%da=(%d,%d) ",i,x3,y3);}

else{m=invert(x2-x1,p);r=(p*p+((y2-y1)*m)%p)%p;x3=(p*p+(r*r-x1-x2)%p)%p;

y3=(p*p+(r*(x1-x3)-y1)%p)%p;printf("%da=(%d,%d) ",i,x3,y3);} x2=x3;y2=y3;}}

int sy(int p) {int z,x,y1,y2,k=0;if(p%4!=3) {printf("please change the number: ");}

else{for(x=0;x<=p-1;x++) {z=(x*x*x-x+8)%p;if((int)(pow(z,(p-1)/2))%p==1)

{y1=(int)(pow(z,(p+1)/4))%p;y2=(p-(int)(pow(z,(p+1)/4))%p)%p;

printf("x=%d,y1=%d,y2=%d ",x,y1,y2);k=k+2;}} printf("k=%d ",k);}}

void main()

{int x1,y1,t,u,p,z,x,k=0;printf("p=");scanf("%d",&p);sy(p);

for(x=0;x<=p-1;x++) {z=(x*x*x-x+8)%p;if((int)(pow(z,(p-1)/2))%p==1){ k=k+2;}}

printf("x1=");scanf("%d",&x1);printf("y1=");scanf("%d",&y1);

printf("a=(%d,%d) ",x1,y1);t=x1;u=y1;ECCadd(x1,y1,t,u,k,p);}

運(yùn)行程序后得到的結(jié)果如下:由判斷二次剩余的表可知,任意選取一對生成元α=(2,5)。則相應(yīng)的結(jié)果為:

α=(2,5) 2α=(7,6) 3α=(6,3)

4α=(6,8) 5α=(7,5) 6α=(2,6)

由此可以看出,α=(2,5)確是本原元。因此,完成了對橢圓曲線y2=x3-x+8,且模素數(shù)11的數(shù)據(jù)仿真。

3 總結(jié)

文中運(yùn)用C語言完成了判斷兩數(shù)互素,利用擴(kuò)展的Euclidean算法實現(xiàn)有限域上的模逆運(yùn)算,對模素數(shù)橢圓曲線y2≡x3-x+8(mod 11)利用Euler準(zhǔn)則判斷二次剩余且給出列表。以及任意選取一個生成元,實現(xiàn)有限域上橢圓曲線的群的加法運(yùn)算,并給出相應(yīng)的結(jié)果。

參考文獻(xiàn):

[1]KOBLITZ N.Elliptic curve cryptosystems[J].Mathematics of Computation,1987,48(177):203-209.

[2]MILLER VS.Use of elliptic curve in cryptography[J].Lecture Notes in Computer Science,1986,218(01):417-426.

[3]MENEZES A,OKAMOTO T,VANSTONE S.Reducing elliptic curve logarithms to logarithms in a finite field[J].IEEE Transaction on Information Theory,1993,39(05):1639-1646.

[4]CHEN L,HARRISION K,MOSS A,et al.Certification of public keys within an identity based system[C]//Lecture Notes in Computer Science.5th International Conference on Information Security.Berlin Germany:Springer-Verlag,2002,2433:322-333.

[5]宋春玉.橢圓曲線密碼系統(tǒng)的matlab實現(xiàn)[J].西北民族大學(xué)學(xué)報(自然科學(xué)版),2013,34(02):14-17.

[6]謝天藝,黃凱,修思文,等.素數(shù)域橢圓曲線密碼加速器的VLSI實現(xiàn)[J].計算機(jī)工程與應(yīng)用,2016,52(01):89-94.

[7]王千喜,劉海法,王占厚,等.橢圓曲線密碼(ECC)算法的一種硬件實現(xiàn)方案[J].信息通信,2016,(08):87-88.

[8]戶占良.橢圓曲線密碼體制的研究與應(yīng)用[J].山西師范大學(xué)學(xué)報(自然科學(xué)版),2010,24(03):13-17.

猜你喜歡
逆運(yùn)算素數(shù)模數(shù)
孿生素數(shù)
兩個素數(shù)平方、四個素數(shù)立方和2的整數(shù)冪
“逆運(yùn)算”的內(nèi)涵解析及其表現(xiàn)標(biāo)準(zhǔn)
基于單片機(jī)和模數(shù)化設(shè)計的低壓側(cè)電壓監(jiān)視與保護(hù)裝置
能源工程(2021年2期)2021-07-21 08:40:02
模數(shù)化設(shè)計方法在景觀鋪裝設(shè)計中的應(yīng)用
綠色科技(2020年11期)2020-08-01 02:23:58
關(guān)于兩個素數(shù)和一個素數(shù)κ次冪的丟番圖不等式
逆向思維
基于LID模式的城區(qū)排澇模數(shù)探析
除法也有分配律嗎
一種新型的RSA密碼體制模數(shù)分解算法
门源| 大余县| 论坛| 都安| 宜川县| 临沭县| 日土县| 衡阳县| 孟村| 本溪市| 郓城县| 涪陵区| 阿克苏市| 金山区| 通城县| 铜梁县| 商洛市| 米脂县| 贵德县| 越西县| 沙坪坝区| 盐边县| 青铜峡市| 隆尧县| 南郑县| 临洮县| 阳东县| 本溪| 焦作市| 贵南县| 乡宁县| 太湖县| 兰考县| 东乡族自治县| 米林县| 深泽县| 南通市| 邳州市| 建平县| 达拉特旗| 耿马|