Sunteți pe pagina 1din 9

Curbe eliptice

Alegem curba eliptica cu ecuatia y2=ax3+bx2+1: fie a=1 si b=1.


Alegem cimpul finit peste care este definite curba eliptica: fie p=5 => cimpul este
Z5.
Verificam: 4*a3+27*b2(mod p) = 4+27 (mod 5) = 31 mod 5= 1 ≠ 0.
Am obtinut curba eliptica cu ecuatia y2=x3+x2+1 peste cimpul Z5.
Pentru a afla punctele curbei eliptice E mai intii trebuie sa calculam resturile
patratice in Z5:
for a:=0 to p-1 do
a2:= a2 mod p

a 0 1 2 3 4
a2 2 2 2 2 2
0 mod 5=0 1 mod 5=1 2 mod 5=4 3 mod 5=4 4 mod 5=1

Calculam punctele lui E astfel:


for x:=0 to p-1 do
z:=(x3+x+1) mod 5

x=0 => z=x3+x+1(mod 5)=03+0+1(mod 5)=1 mod 5=1;


x=1 => z=x3+x+1(mod 5)=13+1+1(mod 5)=3 mod 5=3;
x=2 => z=x3+x+1(mod 5)=23+2+1(mod 5)=11 mod 5=1;
x=3 => z=x3+x+1(mod 5)=33+3+1(mod 5)=31 mod 5=1;
x=4 => z=x3+x+1(mod 5)=43+4+1(mod 5)=69 mod 5=4;
Inscriem datele obtinute in tabel astfel:
Cimpurile x si z le completam cu valorile obtinute mai sus, iar cimpul y dupa
urmatorul algoritm:
Fiecare valoare a lui z o cautam printre valorile lui a2 si in caz de egalitate inscriem
in cimpul y toate valorile lui a. Obtinem:
x z=x3+x+1 y
0 1 1, 4
1 3 -
2 1 1, 4
3 1 1, 4
4 4 2, 3
Din tabel rezulta ca curba eliptica E are 8 puncte + O (punctul la infinit) = 9
puncte.
Cele 8 puncte sunt:
(0,1), (0,4), (2,1), (2,4), (3,1), (3,4), (4,2), (4,3).
Calcularea puterilor lui α (multiplilor)
Alegem un element primitiv generator: fie α=(0,1). Vom calcula puterile lui α.
Avem formulele:

xi= λ2 - xi-2 - xi-1


yi= λ (xi-2 - xi), unde i=3,4,…,nr_puncte-1
Calculam:
 2α=α+α=(0,1)+(0,1) => P=(0,1) si Q=(0,1)
P=Q => λ se calculeaza dupa formula 2 astfel:
λ = (3*02+1) / 2*1 = 1/2 (mod 5) = 2-1 mod 5 = 3
!!! 2-1 mod 5 se calculeaza in baza algoritmului lui Euclid extins. (*)
x3 = 32 - 0 - 0 = 9 (mod 5) = 4
y3 = 3*(0 - 4) - 1 = -13 mod 5 = 2
!!! Numerele negative mod n se calculeaza dupa un anumit algoritm. (**)
2α = (x3,y3) = (4,2)
 3α=2α+α=(4,2)+(0,1) => P=(4,2) si Q=(0,1)
P≠Q => λ se calculeaza dupa formula 1 astfel:
λ=(1-2)/(0-4)=-1/-4=1/4 (mod 5) = 4-1 mod 5= 4
x4 = 42 - 4 - 0 = 16-4 (mod 5) = 12 mod 5 = 2
y4 = 4*(4 - 2) - 2 = 4*2-2=8-2=6 (mod 5) = 1
3α = (x4,y4) = (2,1)
 4α=3α+α=(2,1)+(0,1) => P=(2,1) si Q=(0,1)
P≠Q => λ se calculeaza dupa formula 1 astfel:
λ=(1-1)/(0-2)=0/-2=0 mod5 =0
x5 = 02 - 2 - 0 = -2 (mod 5) = 3
y5 = 0*(2 - 3) - 1 = 0*(-1)-1=0-1=-1 (mod 5) = 4
4α = (x5, y5) = (3,4)
si asa mai departe:
 5α=4α+α=(3,4)+(0,1) => P=(3,4) si Q=(0,1)
P≠Q => λ se calculeaza dupa formula 1 astfel:
λ=(1-4)/(0-3)=-3/-3=1 mod 5=1
x6 = 12 - 3 - 0 = -2 (mod 5) = 3
y6 = 1*(3 - 3) - 4 = 1*(0)-4=0-4=-4 (mod 5) = 1
5α = (x6, y6) = (3,1)
 6α=5α+α=(3,1)+(0,1) => P=(3,1) si Q=(0,1)
P≠Q => λ se calculeaza dupa formula 1 astfel:
λ=(1-1)/(0-3)=0/-3=0 mod 5=0
x7 = 02 - 3 - 0 = -3 (mod 5) = 2
y7 = 0*(3 - 2) - 1 = 0*(1)-1=0-1=-1 (mod 5) = 4
6α = (x7, y7) = (2,4)
 7α=6α+α=(2,4)+(0,1) => P=(2,4) si Q=(0,1)
P≠Q => λ se calculeaza dupa formula 1 astfel:
λ=(1-4)/(0-2)=-3/-2=3/2 mod 5=3*2-1 mod 5=3*3 mod 5=9 mod 5=4
x8 = 42 - 2 - 0 = 14 (mod 5) = 4
y8 = 4*(2 - 4) - 4 = 4*(-2)-4=-8-4=-12 (mod 5) = 3
7α = (x8, y8) = (4,3)
 8α=7α+α=(4,3)+(0,1) => P=(4,3) si Q=(0,1)
P≠Q => λ se calculeaza dupa formula 1 astfel:
λ=(1-3)/(0-4)=-2/-4=1/2 mod 5=2-1 mod 5=3
x9 = 32 - 4 - 0 = 5 (mod 5) = 0
y9 = 3*(4 - 0) - 3 = 3*4-3=12-3=9 (mod 5) = 4
8α = (x9, y9) = (0,4)
 9α=O (punct la infinit)

Criptarea: (cu el gamal)


!!!La criptare si descriptare toti coeficientii se calculeaza mod nr de puncte =>
mod 9
Amintim: p=5, elementul primitv α=(0,1).
Se ia un numar a, fie a=7.
Se calculeaza β=a*α=7α.
Operatia de criptare:
eK(M, k) = (k * α , M + k * β), unde M apartine curbei E, 0 <= k <= nr de puncte-1
=> 0 <= k <=8
Se alege mesajul care va fi criptat, care trebuie sa fie un punct de pe curba E (noi
am calculat punctele curbei E):
Fie M=(3,1)=5α.
Se alege un numar k aleator, fie k=3. Se calculeaza:
y1=k * α = 3 * α =3α
y2=M + k * β = 5α +3*7α= 5α+ 21α=26α=(26 mod 9) α= 8α
Am obtinut:
y=( y1, y2)= ( 3α, 8α ).
Acest mesaj y este trimis lui Bob.
Operatie de decriptare:
dK(y1, y2) = y2 − a*y1
Bob decripteaza:
Amintim a=7.
M= y2 − 7*y1 = 8α – 7*3α = 8α - 21α = (-13)α =(-13 mod 9 )α =5α
Decripatare cu success!!!
Generarea cheii pentru semnatura digtala:
Consideram aceeasi curba eliptica cu ecuatia y2=x3+x2+1 peste cimpul Z5.
Numarul de puncte ale curbei il notam cu n. In cazul nostru el este 9.
Se alege un punct P de pe curba: fie P=3α=(2,1).
Se alege un numar aleator d, 1<=d<=n-1: fie d=5.
Se calculeaza punctul Q=d * P=5*3α=15α=(15 mod 9)α=6α=(2,4).
Cheia inchisa este d=5, cheia deschisa este (E,P,n,Q)=( y2=x3+x2+1, (2,1),9, (2,4)).
Generarea semnaturii digitale:
Se alege un numar aleator k, 1<=k<=n-1, fie k=2.
Se calculeaza k*P=2*3α=6α=(6 mod 9)α=6α=(2,4)=(x1,y1).
Se calculeaza r=x1 mod n=2 mod 9=2.
Se verifica conditia ca r sa fie diferit de 0, deoarece in caz contrar semnatura nu va
depinde de cheia inchisa. Daca r=0 se alege alt numar k.
Se calculeaza k-1 mod n=2-1 mod 9=5.
Se calculeaza s=k-1(hash(M)+d*r)(mod n). Fie hash(M)=3 => s=2-1(3+5*2)(mod
9)=5*13 mod 9=65 mod 9=2.
Se verifica conditia ca s să fie diferit de 0, deoarece in caz contrar nu exista s-1 mod
n necesar pentru verificare. Daca s=0 se alege alt numar k.
Semnatura epentru mesajul M este perechea de numere (r,s)=(2,2).
Verificarea semnaturii:
Se verifica daca numerele r si s apartin intervalului [1,n-1]. In caz contrar
semnatura se respinge.
Se calculeaza w=s-1 mod n=2-1 mod 9=5.
Se calculeaza hash(M), fie este acelasi 3.
Se calculeaza u1=hash(M)*w(mod n)=3*5 mod 9=15 mod 9=6.
Se calculeaza u2=r*w mod n=2*5 mod 9=10 mod 9=1.
Se calculeaza u1P+u2Q=6*3α+1*6α=18α+6α=24α=(24 mod 9)α=6α=(2,4)=(x0,y0).
Se calculeaza v=x0=2.
Se verifica daca v=r => semnatura este corecta, in caz contrar ea este respinsa.
Schimbul de chei cu Diffi-Helman
Consideram aceeasi curba eliptica E cu ecuatia y2=x3+x2+1 peste cimpul Z5 si
acelasi element generator α=(0,1).
Curba eliptica E si punctual α sunt publici.
Utilizatorul A alege cheia sa privata nA<nr_de_puncte: fie nA=3 si calculeaza cheia
publica PA= nA* α=3α.
Utilizatorul B alege cheia sa privata nB<nr_de_puncte: fie nB=7 si calculeaza cheia
publica PB= nB* α=7α.
Utilizatorii A si B fac schimb de chei publice (PA si PB) si calculeaza cheia comuna
K in modul urmator:
A: K= nA* PB=3*7α=21α=(21 mod 9)α=3α.
B: K= nB* PA=7*3α=21α=(21 mod 9)α=3α.
Se obtine cheia comuna K=3α.
(*) Algoritmul lui Euclid extins
Algoritmul lui Euclid extins permite determinarea inverseleroe elementelor dintr-
un corp finit Zn.

Acest algorimt determina b−1 mod n (daca exista), unde n > 1 si .


Exemplu:
Calculam 2-1 mod 5.
b=2, n=5.
Pas 1.
n0=n=5;
b0=b=2
t0=0
t1=1
Pas 2.
q=[n0/b0]=[5/2]=2
r=n0-q*b0=5-2*2=1
Pas 3. Ciclul while:
3a) r > 0 ? - da
3.1. temp = t0-q*t=0-2*1=-2
3.2. temp>=0 ? – da => temp = n-(- (-2) mod 5)=
5-(2 mod 5) = 5-2 = 3
3.3. n0=b0=2
b0=r=1
to=t=1
t=temp=3
3.4. q=[n0/b0]=[2/1]=2
r=n0-q*b0=2-2*1=0
3b) r > 0 ? – nu => iesim din ciclu
Pas 4.
b0 ≠ 1 ? – nu => b=2 are inversa mod 5 si 2-1 mod 5=t=3
(**) Numere negative mod n
Numerele negative mod n se calculeaza astfel:
b mod n, unde b<0
b mod n = b-( (-b) mod n ).
Exemplu:
-13 mod 5 = 5 – ( 13 mod 5) = 5 – 3 =2.

S-ar putea să vă placă și