Appendice


Home
Su
Presentazione
Cap1
Cap2
Cap3
Cap4
Cap5
Cap6
Cap7
Cap8
Appendice

APPENDICE

I. ALGORITMI E CONCETTI MATEMATICI DI CRITTOGRAFIA ASIMMETRICA - RSA

Tra gli algoritmi di crittografia a chiave pubblica il più famoso ed utilizzato va sotto il nome di RSA. RSA è l’acronimo di Rivest Shamir Adleman, ossia dei nomi degli autori di un testo rivoluzionario nel mondo della crittografia che nel 1978 introdusse questo cifrario a chiave pubblica.

La sua struttura è concettualmente molto semplice, ed è stata sottoposta all’analisi dei migliori crittoanalisti per anni. L’algoritmo è oggi utilizzato ampiamente in molti standard di crittografia, e rappresenta dunque uno strumento valido e testato. E’ riconosciuto come algoritmo crittografico nello standard ISO 9796 e come algoritmo di sicurezza nello standard ITU-T X.509, è inoltre parte degli standard SSL, S/MIME, IPSec, etc.

L’algoritmo sfrutta alcune proprietà dei numeri primi, e fa leva sulla difficoltà di fattorizzare un numero prodotto di due numeri primi.

Vediamo in dettaglio i processi di generazione delle chiavi e di cifratura per capire nel concreto come funzionano i meccanismi della crittografia a chiave pubblica.

Creazione della coppia di chiavi

I passi da seguire per la definizione di una coppia di chiavi pubblica/privata sono:

1) Si scelgono due numeri primi p e q molto grandi (in genere maggiori di 10100)

2) Si calcola n = p · q detto modulo

3) Si sceglie un intero e, detto esponente pubblico, più piccolo di n, tale che e sia primo rispetto all’intero (p-1)(q-1), cioè e non è divisibile per (p-1)(q-1).

4) Si sceglie un altro intero d, detto esponente privato, tale che (ed-1) è divisibile per (p-1)(q-1)

 

La coppia <n,e> è detta chiave pubblica, mentre la coppia <n,d> è detta chiave privata.

Dalla conoscenza della chiave publica <n,e> è difficile risalire a d, e dunque alla chiave privata. E analogamente, dalla conoscenza della chiave privata <n,d> è difficile risalire ad e, ossia alla chiave pubblica.

Va notato che il processo non è impossibile, ma è molto difficile. In linea di principio procedendo con una ricerca esaustiva si possono provare tutte le combinazioni ed arrivare alla soluzione, ma con numeri così grandi questo compito diventa improponibile.

In realtà c’è una strada più veloce della ricerca esaustiva, se infatti si riuscisse a fattorizzare n (il modulo, presente in entrambe le chiavi) e ricavare i due numeri p e q che lo generano, il processo sarebbe immediato.

Il presupposto su cui si basa l’intera crittografia a chiave pubblica è proprio nella difficoltà di risalire da un numero n al prodotto di numeri primi che lo genera: non esiste nessun algoritmo matematico che lo consenta allo stato attuale delle ricerche.

 

Consideriamo ora un messaggio m, che immagineremo per comodità come un numero intero, ma che è rappresentativo ad esempio di una sequenza di bit rappresentanti il messaggio in chiaro originale.

Dovremo poi verificare che

· m < n (ossia la lunghezza del messaggio sia inferiore a quella del modulo)

· m venga suddiviso in blocchi di k bit ciascuno tali che 2K<n

 

Vediamo allora come viene effettuata la cifratura del messaggio m usando le chiavi precedentemente introdotte.

Cifratura e Decifratura

Supponiamo che Alice voglia mandare un messaggio m a Bob:

1) Alice si procura la chiave pubblica di Bob: <n,e>

2) Alice crea il testo cifrato c da spedire, dove c=me mod n (e ed n fanno parte della chiave pubblica di Bob, mod indica qui la funzione di modulo matematico)

3) Alice spedisce il testo cifrato c a Bob

 

Quando Bob riceve il testo cifrato c gli è sufficiente usare la sua chiave privata <n,d> per decifrare il messaggio e riottenere m: Bob effettua cd mod n = m.

 

Esempio pratico di cifratura

 

Supponiamo di voler verificare numericamente queste procedure matematiche, useremo dei numeri molto piccoli, e “genereremo” la nostra coppia di chiavi.

 

1) Scegliamo due numeri primi: p=3 e q=11

2) n= p*q =33

3) (p-1)(q-1)=2*10=20

4) scegliamo allora un numero e non divisibile per 20, ad esempio e=3

5) scegliamo ora, attraverso l’algoritmo di Euclide il numero d tale che (ed-1) sia divisibile per (p-1)(q-1)=20. Ricaviamo allora d=7, infatti (ed-1)=(3*7-1)=20 che è appunto divisibile per 20.

 

Quindi le due chiavi sono kpub=<33,3> e kpriv=<33,7>

 

Per spedirci un messaggio cifrato il nostro interlocutore dovrà possedere la nostra chiave pubblica kpub.

Il messaggio da spedire m dovrà essere minore di n, cioè m<33 e il testo cifrato c sarà allora: c= me mod n=m3 mod 33.

Analogamente la decifratura sarà c7 mod 33=m

 

Per via dei piccoli numeri primi scelti, questo cifrario è appena sufficiente per cifrare blocchi di k bit dove deve essere 2k<33, e dunque k=5. Ma ci consente comunque di codificare semplici caratteri (in codifiche ASCII numeriche) a blocchi di un carattere per volta.

 

 

 

II. DOCUMENTI E NORMATIVA ITALIANA SULLA FIRMA DIGITALE

La documentazione si compone di:

· CIRCOLARE 26 luglio 1999, n. AIPA/CR/22: Modalità per presentare domanda di iscrizione nell’elenco pubblico dei certificatori.

· CIRCOLARE 19 giugno 2000, n. AIPA/CR/24 : Linee guida per l'interoperabilità tra i certificatori iscritti nell’elenco pubblico.

· Decreto del Presidente della Repubblica 10 novembre 1997, n. 513: Regolamento recante criteri e modalità per la formazione, l'archiviazione e la trasmissione di documenti con strumenti informatici e telematici.

· DECRETO DEL PRESIDENTE DEL CONSIGLIO DEI MINISTRI 8 FEBBRAIO 1999: Regole tecniche per la formazione, la trasmissione, la conservazione, la duplicazione, la riproduzione e la validazione, anche temporale, dei documenti informatici.