LUCRARE PRACTICA: Exponentierea Modulară: Z 1 Z Z Mod N 1 Then Z Z X Mod N 1550 Mod 4444 560

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 4

LUCRARE PRACTICA: Exponentierea modulară

Algoritmul:

z=1;
for i =s-1
Exemplul downto
practic: 0 do
z= z2 mod n
if ci =1 then z=z*x mod n
1550 2789 mod 4444 = 560
c = 2789
x = 1550
n = 4444

(2789)10 = (101011100101)2
i ci Z=1
13 1 z= z2 mod n = 12 mod 4444=1 * 1550 mod 4444 = 1550
12 0 15502 mod 4444 = 2740
11 1 27402 mod 4444 = 1684 * 1550 mod 4444 = 1572
10 0 15722 mod 4444 = 320
9 1 3202 mod 4444 = 188 * 1550 mod 4444 = 2540
8 1 25402 mod 4444 = 3356 * 1550 mod 4444 = 2320
7 1 23202 mod 4444 = 716 * 1550 mod 4444 = 3244
6 0 32442 mod 4444 = 144
5 0 1442 mod 4444 = 2960
4 1 29602 mod 4444 = 2476 * 1550 mod 4444 = 2628
3 0 26282 mod 4444 = 408
2 1 4082 mod 4444 = 2036 * 1550 mod 4444 = 560

Algoritmul lui Euclid


Algoritmul:

n0 = n; b0 = b; t0 = 0; t = 1;
q = n0 / b0; r = n0 – q*b0;
while r > 0 do
temp = t0 – q*t;
if temp >= 0 then temp = temp mod n
else temp = n – ((- temp) mod n)
n0 = b0; b0 = r; t0 = t; t= temp;
q = n0/ b0; r = n0 – q*b0;
if b0 != 1 then b nu are inversă mod n
else b-1 mod n = t;
Exemplul practic nr. 1:
2000-1 mod 662 =

b = 2000
n = 662
b nu are inversă, b0 != 1 , b0 = 2

n0 b0 q r t0 t temp
1 662 2000 0 662 0 1 0
2 2000 662 2 676 1 0 1
3 662 676 0 662 0 1 0
4 676 662 1 14 1 0 1
5 662 14 47 564 0 1 615
6 14 564 0 14 1 615 1
7 564 14 40 4 615 1 575
8 14 4 3 2 1 575 262
9 4 2 2 0 575 262

Calcule matematice:

1. n0 = 662; b0 = 2000; t0 = 0; t = 1; q = 662 / 2000 = 0; r = 662 - (0 * 200) = 662; temp = 0 – (0 * 1) = 0;


temp = 0 mod 662;
2. n0 = 2000; b0 = 662; t0 = 1; t = 0; q = 2000 / 662 = 2; r = 2000 - (2 * 662) = 676; temp = 1 – (2 * 0) = 1;
temp = 1 mod 662 = 1;
3. n0 = 662; b0 = 676; t0 = 0; t = 1; q = 662 / 676 = 0; r = 662 - (0 * 676) = 662; temp = 0 – (0 * 1) = 0;
temp = 0 mod 662 = 0;
4. n0 = 676; b0 = 662; t0 = 1; t = 0; q = 676 / 662 = 1; r = 676 – (1 * 662) = 14; temp = 1 – (1 * 0) = 1;
temp = 1 mod 662 = 1;
5. n0 = 662; b0 = 14; t0 = 0; t = 1; q = 662 / 14 = 47; r = 662 - (7 * 14) = 564; temp = 0 – (47 * 1) = - 47;
temp = 662 - (- (- 47) mod 662) = 615;
6. n0 = 14; b0 = 564; t0 = 1; t = 615; q = 14 / 564 = 0; r = 14 - (0 * 564) = 14; temp = 1 – (0 * 615) = 1;
temp = 1 mod 662 = 1;
7. n0 = 564; b0 = 14; t0 = 615; t = 1; q = 564 / 14 = 40; r = 564 - (40 * 14) = 4; temp = 615 – (40 * 1) = 575;
temp = 575 mod 662 = 575;
8. n0 = 14; b0 = 4; t0 = 1; t = 575; q = 14 / 4 = 3; r = 14 - (3 * 4) = 2; temp = 1 – (3 * 575) = - 1724;
temp = 662 - (- (- 1724) mod 662) = 262;
9. n0 = 4; b0 = 2; t0 = 575; t = 262; q = 4 / 2 = 2; r = 4 - (2 * 2) = 0; temp = 575 – (2 * 262) = 51;
temp = 51 mod 662 = 51;
Răspuns: b nu are inversă, b0 != 1 , b0 = 2
211-1 mod 890 = 561
b = 211
Exemplul practic nr. 2:
n = 890

n0 b0 q r t0 t temp
1 890 211 4 46 0 1 886
2 211 46 4 27 1 886 17
3 46 27 1 19 886 17 869
4 27 19 1 8 17 869 38
5 19 8 2 3 869 38 793
6 8 3 2 2 38 793 232
7 3 2 1 1 793 232 561
8 2 1 2 0 232 561

Calcule matematice:

1. n0 = 890; b0 = 211; t0 = 0; t = 1; q = [890 / 211] = 4; r = 890 - (4 * 211) = 46; temp = 0 – (4 * 1) = -4;


temp = 890 - (- (- 4) mod 890) = 886;
2. n0 = 211; b0 = 46; t0 = 1; t = 886; q = 211 / 46 = 4; r = 211 - (4 * 46) = 27; temp = 1 – (4 * 886) = - 3543;
temp = 890 - (- (- 3543) mod 890) = 17;
3. n0 = 46; b0 = 27; t0 = 886; t = 17; q = 46 / 27 = 1; r = 46 - (1 * 27) = 19; temp = 886 – (1 * 17) = 869;
temp = 869 mod 890 = 869;
4. n0 = 27; b0 = 19; t0 = 17; t = 869; q = 27 / 19 = 1; r = 27 – (1 * 19) = 8; temp = 17 – (1 * 869) = -852;
temp = 890 - (- (- 852) mod 890) = 38;
5. n0 = 19; b0 = 8; t0 = 869; t = 38; q = 19 / 8 = 2; r = 19 - (2 * 8) = 3; temp = 869 – (2 * 38) = 793;
temp = 793 mod 890 = 793;
6. n0 = 8; b0 = 3; t0 = 38; t = 793; q = 8 / 3 = 2; r = 8 - (2 * 3) = 2; temp = 38 – (2 * 793) = - 1548;
temp = 890 - (- (- 1548) mod 890) = 232;
7. n0 = 3; b0 = 2; t0 = 793; t = 232; q = 3 / 2 = 1; r = 3 - (1 * 2) = 1; temp = 793 – (1 * 232) = 561;
temp = 561 mod 890 = 561;
8. n0 = 2; b0 = 1; t0 = 232; t = 561; q = 2 / 1 = 2; r = 2 - (2 * 1) = 0; temp = 232 – (2 * 561) = - 890;
temp = 890 - (- (- 890) mod 890) = 0;
Operațiuni în câmpul Gallois

Operații în câmpul Gallois GF (256): Adunarea

Câmpul Gallois analizat este format din 256 de elemente.


Include elemente 0x00 - 0xFF.

Adăugarea în câmpul Gallois este o operație XOR. De exemplu:


A = 4010 = 001010002
B = 20010 = 110010002
A + B = A xor B = 001010002 xor 110010002 = 111000002 = 22410

Operații de câmp Gallois GF (256): Înmulțire

Reguli de multiplicare în câmpul Gallois:


1. Când se înmulțește cu 1, numărul nu se schimbă.
2. Când se înmulțește cu 2, există 2 opțiuni:

I. Dacă numărul este mai mic decât 0x80, atunci trece doar 1 bit spre stânga
Exemplu: 25 * 2 = 00011001 << 1 = 00110010 = 50

II. Dacă numărul este mai mare de 0x80, atunci este XORed cu 0x1b (00011011), și este
deplasat 1 bit spre stânga
Exemplu: 148 * 2 = (10010100 xor 00011011) << 1 = 10001011 << 1 = 00010111 = 23

3. Înmulțirea cu orice alt număr este descompusă în multiplicări cu 1 și 2.

Exemplu: 14 * 0x03 = 14 * (0x02 + 0x01) = (14 * 0x02) + (14 * 0x01) = 42

148 * 4: 23 + 23 = 46
148 * 2 = (10010100 xor 00011011) << 1 = 10001011 << 1 = 00010111 = 23
148 * 2 = (10010100 xor 00011011) << 1 = 10001011 << 1 = 00010111 = 23

You might also like