密碼演算法之ECC初探

2021-09-29 19:47:12 字數 1733 閱讀 7508

使用者a先選擇一條橢圓曲線eq(a,b),然後選擇其上的乙個生成元g,假設其階為n,之後再選擇乙個正整數na作為金鑰,計算pa=na*g。其中eq(a,b),q,g都會被公開。公鑰為pa。私鑰為na。

使用者b在向使用者a傳送訊息m,這裡假設訊息m已經被編碼為橢圓曲線上的點,其加密步驟如下:

1,查詢使用者a的公鑰eq(a,b),q,pa,g。

2,在(1,q-1) 的區間內選擇隨機數k 。

3,根據a的公鑰計算點(x1,y1)=kg。

4,計算點(x2,y2)=kpa。

5,如果為o,則從第二步重新開始。計算c=m+(x2,y2)

6,將((x1,y1),c)((x1,y1),c) 傳送給a。

解密步驟如下:

1,利用私鑰計算點na(x1,y1)=nakg=kpa=(x2,y2)na(x1,y1)。

2,計算訊息m=c−(x2,y2)。

1,橢圓曲線中計算g = p + q

p(x1,y1)

q(x2,y2)

對於 (y2)= (mod q)

g(x3,y3)

其中 x3 =(mod q)

y3 =(mod q)

其中 m = (y2-y1)[(x2-x1)(-1)]mod q #p != q

m = (3*(x12)+a)[(2y1)(-1)]mod q # p=q

其中 x-1 為x模q的逆元

例如 q = 23, x = 4 那麼 6便是它的乙個逆元 因為 46 = 24 =1mod2。

已知橢圓曲線加密ep(a,b)引數為:

p = 15424654874903

a = 16546484

b = 4548674875

g(6478678675,5636379357093)

私鑰為k = 546768

求公鑰k(x,y)

這裡知道原理後編寫指令碼求取公鑰:

gx =

6478678675

gy =

5636379357093

a =16546484

b =4548674875

p =15424654874903

k =546768

x = gx

y = gy

defpower

(x,y,mod)

: r =

1while

( y )

:if y &1:

r =(r * x)

% mod

x =(x * x)

% mod

y >>=1

return r

for i in

range

(k-1):

if(x==gx)

and(y == gy)

: m =((

(3*gx*gx)

+a)*power(

2*gy,p-

2,p))%p

else

: m =

((y-gy)

*power(x-gx,p-

2,p))%p

xr =

(m*m-gx-x)

%p yr =

(m*(x-xr)

-y)%p

x = xr

y = yr

print

(xr,yr,x+y)

密碼演算法之ElGamal初探

1,選取大素數p 採用miller和rabin素數測試快速得到 g屬於zp是乙個本原元,公開p和g。這裡zp 指的是p的素數域 即比p小的與它互素的數的集合 求一素數最小生成元的 temp input 請輸入素數p p int temp p need list range 1 p c 存放某一元的集...

ECC演算法介紹

ecc elliptic curves cryptography 加密演算法是一種公鑰加密演算法,與主流的rsa演算法相比,ecc演算法可以使用較短的金鑰達到相同的安全程度。近年來,人們對ecc的認識已經不再處於研究階段,開始逐步進入實際應用,如國家密碼管理局頒布的sm2演算法就是基於ecc演算法的...

現代密碼學之橢圓曲線ECC

橢圓曲線乘法 橢圓曲線結合 elgamal cryptosystem計算例子展示 手算帶步驟 判斷乙個橢圓曲線上有幾個點 reference ecc是由victor miller and neal koblitz1985引入的。對於dsa,rsa,我們需要很大的金鑰長度,而ecc只需要特別餓小的金鑰...