Metodo Di Crittografia RSA
La crittografia RSA e' un sistema per inviare messaggi in codice a chiave asimmetrica. Cio' vuol dire che chi vuole ricevere messaggi che nessun altro possa capire genera due chiavi: una pubblica e una privata. Tutte i messaggi criptati con la chiave pubblica possono essere decriptati solo con la chiave privata. Quindi la chiave pubblica puo' essere pubblicata su un sito, tutti quelli che vogliono inviare messaggi criptati la usano per offuscare i messaggi; solo il proprietario della chiave privata sara' in grado di ottenere di nuovo il testo in chiaro (leggibile) utilizzando la sua chiave privata.
Vediamo matematicamente come si fa.
Si scelgono due numeri primi p e q; nella pratica, per rendere questo sistema sicuro e complicato, il prodotto di questi numeri deve fare un numero molto grande, dell'ordine delle 300 cifre! Facciamo un esempio valido, ma con numeri piccoli:
- p = 107
- q = 127
A questo punto si calcolano due valori n e z con le seguenti formule:
` n=p * q `
` z= (p-1)*(q-1) `
nel nostro esempio abbiamo:
- n = 13589
- z = 13356
A questo punto si sceglie un numero e (chiave di criptazione o encription) tale che 2<e<n ma che non abbia fattori in comune con z (scomponendolo in fattori primi). Nel nostro esempio:
- z = 13356 = 22*32*7*53
- quindi e = 55 va bene, perche' 55 = 5*11
Ora dobbiamo trovare una chiave di decriptazione (decription) d tale che d<n ma (e*d)-1 sia un multiplo di z. Riscrivendo il tutto si puo' anche dire:
` d = (m*z +1)/ e ` ; con ` d in NN `
dove m e' il multiplo.
Nel nostro caso il primo multiplo valido e' 49, quindi:
` d=(m*z +1)/ e = (49*13356 + 1)/ 55 = 11899 `
Perfetto, ora e' tutto pronto per utilizzare il metodo RSA:
- la chiave pubblica e' la coppia di numeri n e e
- la chiave privata e' la coppia di numeri n e d
Proviamo a scrivere un messaggio da inviare in forma criptata, ad esempio:
Ciao a tutti
Questa semplice frase e' in realta' una sequenza di numeri, per l'esattezza in codifica ASCII, quella piu' usata sui computer dove ad ogni lettera e' associato un numero, e':
67 105 97 111 32 97 32 116 117 116 116 105
per criptare si usa la seguente formula su ogni numero:
` c r y p t =(m e x)^e mod n `
dove
- crypt e' il numero criptato
- mex e' il numero originale
- mod e' il resto della divisione per n
mentre per decriptare abbiamo:
` m e x =(c r y p t)^d mod n `
Nel nostro esempio abbiamo che il primo numero del messaggio (67) diventa:
` c r y p t =(m e x)^e mod n = 67^55 mod 13589 = 10384 `
mentre per ottenere il numero originale:
` m e x =(c r y p t)^d mod n = 10384^11899 mod 13589 = 67 `
Come vedete la chiave pubblica e quella privata hanno poco in comune, quella privata è più grande e quindi per ottenere il messaggio originale si impiega più tempo rispetto a quello per criptarlo. Nella maggior parte delle calcolatrici avrete dei problemi a riottenere il numero di partenza, perche' l'elevamento a potenza per numeri cosi' alti manda in tilt i sistemi classici di calcolo. La sicurezza di questo metodo e' dovuta solo all'elevamento a potenza per numeri molto grandi. Andare per tentativi per trovare la chiave privata e' un procedimento lungo.
Firma digitale
Per firmare digitalmente un file:
- si prende il file
- si calcola l'hash del file
- si firma con la propria chiave privata l'hash
Chiunque voglia verificare il file, decripta l'hash con la chiave pubblica e vede se è corretto. Si utilizza l'hash del file per fare prima, altrimenti la firma sarebbe grossa quanto il file. Se non sapete cosa e' l'hash, leggete qui: Hash Dei File MD5
Considerazioni
I sistemi per decriptare testi cifrati con chiave asimmetrica sono molto lenti. Come abbiamo visto servono funzioni di calcolo appositamente progettate per lavorare con numeri cosi' grandi. Nella pratica nessun sistema utilizza realmente la cifratura asimmetrica. Per ridurre i tempi per decriptare i messaggi cifrati, tutti i sistemi utilizzano una sistema a chiave simmetrica, e solo la chiave simmetrica e' cifrata asimmetricamente. E' ovvio che è molto meno sicuro, ma attualmente e' l'unico realmente adottato in pratica.
Il sistema AES e' un sistema di crittografia simmetrica utilizzato spessissimo, con la stessa chiave si cifra e si decifra un messaggio.
I sistemi di crittografia moderna di solito cifrano con AES un messaggio, inviano il messaggio cifrato con AES e inviano la chiave di AES cifrandola con un sistema asimmetrico.