Sunteți pe pagina 1din 7

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=13 => cimpul este
Z13.
Verificam: 4*a3+27*b2(mod p) = 4+27 (mod 13) = 31 mod 13= 5 0.
Am obtinut curba eliptica cu ecuatia y2=x3+x2+1 peste cimpul Z13.
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
02

1
12

2
22

3
32

4
42

5
52

6
62

7
72

8
82

9
92

10
102

11
112

12
122

a2

mod

mod

mod

mod

mod

mod

mod

mod

mod

mod

mod

mod

mod

13=0

13=1

13=4

13=9

13=3

13=12

13=10

13=10

13=12

13=3

13=9

13=4

13=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 13)=03+0+1(mod 13)=1 mod 13=1;
x=1 => z=x3+x+1(mod 13)=13+1+1(mod 13)=3 mod 13=3;
x=2 => z=x3+x+1(mod 13)=23+2+1(mod 13)=11 mod 13=11;
x=3 => z=x3+x+1(mod 13)=33+3+1(mod 13)=31 mod 13=5;
x=4 => z=x3+x+1(mod 13)=43+4+1(mod 13)=69 mod 13=4;
x=5 => z=x3+x+1(mod 13)=53+5+1(mod 13)=131 mod 13=1;
x=6 => z=x3+x+1(mod 13)=63+6+1(mod 13)=223 mod 13=2;
x=7 => z=x3+x+1(mod 13)=73+7+1(mod 13)=351 mod 13=0;
x=8 => z=x3+x+1(mod 13)=83+8+1(mod 13)=521 mod 13=1;
x=9 => z=x3+x+1(mod 13)=93+9+1(mod 13)=739 mod 13=11;
x=10 => z=x3+x+1(mod 13)=103+10+1(mod 13)=1011 mod 13=10;
x=11 => z=x3+x+1(mod 13)=113+11+1(mod 13)=1343 mod 13=4;
x=12 => z=x3+x+1(mod 13)=123+12+1(mod 13)=1741 mod 13=12;

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
0
1
2
3
4
5
6
7
8
9
10
11
12

z=x3+x+1
1
3
11
5
4
1
2
0
1
11
10
4
12

y
1, 12
4, 9
2, 11
1, 12
0
1, 12
6, 7
2, 11
5, 8

Din tabel rezulta ca curba eliptica E are 17 puncte + O (punctul la infinit) = 18


puncte.
Cele 17 puncte sunt:
(0,1), (0,12), (1,4), (1,9), (4,2), (4,11), (5,1), (5,12) , (7,0), (8,1), (8,12), (10,6),
(10,7), (11,2), (11,11), (12,5), (12,8).
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)

PQ => 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)
PQ => 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)

PQ => 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)

PQ => 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)

PQ => 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)

PQ => 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.

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