Fattorizzazione di numeri interi con Java unico, a meno dell’ordine dei fattori, nel prodotto di numeri

  • View
    236

  • Download
    0

Embed Size (px)

Text of Fattorizzazione di numeri interi con Java unico, a meno dell’ordine dei fattori,...

Universit degli Studi di Salerno

Facolt di Scienze Matematiche, Fisiche e Naturali

Corso di laurea Magistrale in Informatica

Corso di SISTEMI OPERATIVI II

Fattorizzazione di numeri interi con Java RMI

Studenti:

Valerio Cinque 0522500098

Francesco Testorio 0522500075

Domenico Viscito 0522500024

Docente:

Prof. G. Cattaneo

Anno Accademico 2010/2011

INDICE

1. INTRODUZIONE .................................................................................................................................................. 2

1.1 CRITTOGRAFIA RSA ............................................................................................................................................... 3

2. ALGORITMI DI FATTORIZZAZIONE ...................................................................................................................... 7

2.1 IL CRIVELLO QUADRATICO ....................................................................................................................................... 8

3. JAVA RMI ..........................................................................................................................................................10

3.1 ARCHITETTURA DI RMI ......................................................................................................................................... 11

3.2 RMI: IL PROCESSO DI CREAZIONE ............................................................................................................................ 12

3.3 IMPLEMENTARE UN COMPUTE SERVER .................................................................................................................... 13

3.4 IMPLEMENTAZIONE DEL CRIVELLO QUADRATICO IN JAVA RMI ................................................................................... 15

3.5 ESEMPIO DI ESECUZIONE DEL CRIVELLO QUADRATICO ................................................................................................. 16

4 TEST FATTORIZZAZIONE CON IL CRIVELLO QUADRATICO IN JAVA RMI ..............................................................22

4.1 CONFIGURAZIONE AMBIENTE ................................................................................................................................. 22

4.2 SCELTA DEGLI INTERI DA FATTORIZZARE .................................................................................................................... 27

4.3 GRANULARIT DIMENSIONE SIEVE ....................................................................................................................... 28

4.4 SCALABILIT........................................................................................................................................................ 30

4.5 NUMERO DI BIT DEGLI INTERI DA FATTORIZZARE ........................................................................................................ 32

5 CONCLUSIONI ....................................................................................................................................................35

1. Introduzione

Un numero primo un intero, maggiore a uno, che divisibile soltanto per uno e per se stesso,

per esempio 2, 3, 5, 7, 11, 13, . . . sono numeri primi. Ogni intero positivo si pu scomporre, in

modo unico, a meno dellordine dei fattori, nel prodotto di numeri primi.

Per esempio:

30 = 2 * 3 * 5;

60 = 2 * 2 * 3 * 5;

6 = 3 * 2;

3300 = 22 * 31 *52 * 111;

10001 = 73 * 137.

Nei giorni nostri, con lintensificarsi dei calcolatori elettronici e della loro potenza computazionale,

si cercano metodi efficienti per trovare la scomposizione in fattori di un dato intero. Questo

problema dinteresse sia pratico sia teorico.

Questo problema si divide in due parti:

Decidere se un dato numero primo o no: problema dei test di primalit. Questo test

una procedura algoritmica che, dato un numero naturale in input, restituisce PRIME se

un numero primo, COMPOSITE se un numero composto.

Determinare esplicitamente una scomposizione in fattori (non banali) di un numero

composto: problema della fattorizzazione. In particolare, fattorizzare o "ridurre in fattori"

un numero , significa trovare un insieme di numeri {0, 1, 2, , } tali che il loro

prodotto sia il numero originario ( = 0 1 2 ).

Questi due problemi, anche se chiaramente legati luno allaltro, sono di natura differente. Allo

stato attuale, il problema del test di primalit relativamente facile (algoritmo polinomiale nella

dimensione dellinput), mentre il secondo sembra essere piuttosto difficile.

La difficolt nel fattorizzare numeri molto grandi alla base di alcuni sistemi crittografici moderni,

per esempio RSA, che sono utilizzati per garantire la privacy nella trasmissione di documenti

riservati, la segretezza delle e-mail (per esempio, PGP), la sicurezza nel commercio elettronico,

ecc.

Trovare i fattori di un numero intero grande unimpresa assai ardua, e pu essere impossibile

date le risorse disponibili. Come detto, non si conoscono metodi polinomiali per la fattorizzazione,

come invece accade per i test di primalit.

1.1 Crittografia RSA

La crittografia si occupa delle "scritture nascoste", in altre parole dei metodi per rendere un

messaggio "offuscato" in modo da non essere comprensibile a persone non autorizzate a leggerlo.

La crittografia tratta della lettura di messaggi dati in forma cifrata, cosicch solo i destinatari siano

in grado di decifrarli e di leggerli. Si tratta di una materia molto antica, che si sviluppa

specialmente in tempo di guerra.

In crittografia l'acronimo RSA indica un algoritmo di crittografia asimmetrica, utilizzabile per cifrare

o firmare informazioni. Un sistema di crittografia asimmetrico si basa sull'esistenza di due chiavi

distinte, che sono usate per cifrare e decifrare. Se una chiave usata per la cifratura, laltra deve

necessariamente essere utilizzata per la decifratura. La questione fondamentale che, nonostante

le due chiavi siano fra loro dipendenti, non sia possibile risalire dall'una all'altra, in modo che se

anche si a conoscenza di una delle due chiavi, non si possa risalire all'altra, garantendo in questo

modo l'integrit della crittografia.

Per realizzare con il cifrario asimmetrico un sistema crittografico pubblico, importante che un

utente si crei autonomamente entrambe le chiavi, denominate "diretta" e "inversa", e ne renda

pubblica una soltanto. Cos facendo si viene a creare una sorta di "elenco telefonico" a

disposizione di tutti gli utenti, che raggruppa tutte le chiavi dirette, mentre quelle inverse saranno

tenute segrete dagli utenti che le hanno create e da questi utilizzate solo quando ricevono un

messaggio cifrato con la rispettiva chiave pubblica dell "elenco" da parte di un certo mittente,

ottenendo in questo modo i presupposti necessari alla sicurezza del sistema.

I ricercatori del MIT, Ronald Rivest, Adi Shamir e Leonard Adleman, nel 1978 hanno saputo

implementare tale logica utilizzando particolari propriet formali dei numeri primi con alcune

centinaia di cifre. L'algoritmo da loro inventato, denominato RSA, acronimo indicante le iniziali dei

loro cognomi, non sicuro da un punto di vista matematico teorico, perch esiste la possibilit che

tramite la conoscenza della chiave pubblica si possa decifrare un messaggio. Lenorme dispendio

in termini di tempo necessario per risolvere dei calcoli, fa di questalgoritmo un sistema

abbastanza affidabile, perch c bisogno di eseguire una fattorizzazione di un numero intero

molto grande al fine di decifrare il messaggio.

Come detto, RSA basato sull'elevata complessit computazionale della fattorizzazione in numeri

primi. Il suo funzionamento base il seguente:

Si scelgono a caso due numeri primi, e , l'uno indipendentemente dall'altro, abbastanza

grandi da garantire la sicurezza dell'algoritmo.

Si calcola il loro prodotto = , chiamato modulo, perch tutta l'aritmetica seguente

modulo .

Si sceglie poi un numero chiamato esponente pubblico, coprimo e pi piccolo di

( ) ( ).

In matematica, gli interi e si dicono coprimi o primi tra loro se e solo se essi non hanno

nessun divisore comune eccetto 1 e 1, o, equivalentemente, se il loro massimo comun

divisore 1. Per esempio, 6 e 35 sono coprimi, ma 6 e 27 non lo sono perch entrambi

sono divisibili per 3; 1 coprimo con ogni numero intero; 0 coprimo solo ad 1 e 1.

Infine, si calcola il numero , chiamato esponente privato:

((( ) ( )))

La chiave pubblica la coppia (, ), mentre la chiave privata (, ). I fattori e possono

essere distrutti, anche se spesso sono memorizzati allinterno della chiave privata.

La forza dellalgoritmo sta nel fatto che per calcolare da o viceversa, non basta la conoscenza

di , ma serve il valore ( ) ( ), infatti fattorizzare, cio scomporre lintero nei suoi

divisori, unoperazione molto lenta, ma soprattutto loperazione di modulo non invertibile,

dunque anche conoscendo non si pu risalire al prodotto modulo di e .

Un messaggio originario