Sistema RSA

Fissiamo un primo p; per es. il piu' piccolo primo dopo 120.

> p:=nextprime(120);

p := 127

Fissiamo un altro primo q; per es. il piu' grande prima di 254.

> q:=prevprime(254);

q := 251

Ora dobbiamo scegliere le chiavi v e w; sappiamo che devono essere tali che v*w = a*(p-1)*(q-1) + 1. Prendiamo allora a:=1 e calcoliamo l.

> l:=(p-1)*(q-1)+1;

l := 31501

Fattorizzando l otteniamo una scelta per le due chiavi.

> ifactor(l);

``(17)^2*``(109)

Chiave pubblica:

> v:=17^2;

v := 289

Chiave segreta:

> w:=109;

w := 109

Modulo:

> m:=p*q;

m := 31877

Supponiamo di voler trasmettere il numero x:=123 crittato.

> x:=123;

x := 123

Trasmettiamo y:

> y:=x^v;

y := 960676585904628742351305747409073339595631629980271796890731296580956768455206083163769630311600301981399300179062150619466431192923034192526003343855767412226165218892323408482522910120005916649...y := 960676585904628742351305747409073339595631629980271796890731296580956768455206083163769630311600301981399300179062150619466431192923034192526003343855767412226165218892323408482522910120005916649...y := 960676585904628742351305747409073339595631629980271796890731296580956768455206083163769630311600301981399300179062150619466431192923034192526003343855767412226165218892323408482522910120005916649...y := 960676585904628742351305747409073339595631629980271796890731296580956768455206083163769630311600301981399300179062150619466431192923034192526003343855767412226165218892323408482522910120005916649...y := 960676585904628742351305747409073339595631629980271796890731296580956768455206083163769630311600301981399300179062150619466431192923034192526003343855767412226165218892323408482522910120005916649...y := 960676585904628742351305747409073339595631629980271796890731296580956768455206083163769630311600301981399300179062150619466431192923034192526003343855767412226165218892323408482522910120005916649...

Chi decodifica conosce w , conosce m, e riceve y; deve calcolare il resto della divisione di y^w per m:

> irem(y^w,m);

123

Supponiamo ora di ricevere z:=124537289:

> z:=124537289;

z := 124537289

Il numero decodificato e':

> irem(z^w,m);

25

FINE