domenica 27 gennaio 2013

L'algoritmo di Crittografia asimmetrica R.S.A. in Java

Nell’ambito della sicurezza informatica e in particolare della sicurezza nelle comunicazioni, la crittografia ricopre un ruolo fondamentale per garantire la riservatezza. Questa utilizza algoritmi in grado di cifrare in maniera reversibile un messaggio o un documento rendendolo illeggibile da chiunque non sia in possesso della chiave in grado di decifrare lo stesso.
Attualmente possiamo suddividere la crittografia informatica in due categorie:
  • Crittografia Simmetrica
  • Crittografia Asimmetrica
Per Crittografia simmetrica si intende un metodo crittografico che utilizza la stessa chiave per cifrare e per decifrare un documento. Nella Crittografia Asimmetrica invece vengono utilizzate due chiavi:
  • Chiave Pubblica
  • Chiave Privata
E' possibile scegliere con quale delle due chiavi cifrare il documento, dopo di ché la decifratura sarà possibile solo attraverso l'utilizzo dell'altra chiave. Solitamente la chiave pubblica viene resa disponibile a chiunque, mentre quella che deve assolutamente rimanere segreta è la chiave privata. 
L'algoritmo R.S.A. ideato da Rivest Shamir Adleman, implementa la crittografia simmetrica attraverso l'utilizzo di numeri primi e di alcune operazioni tipiche dell'aritmetica modulare. 
Per il mio esame di Sicurezza Informatica ho deciso di implementare nel linguaggio di programmazione Java questo algoritmo. In Java esistono già delle librerie che realizzano questo algoritmo, tuttavia sarebbe stato troppo facile, e allora ho deciso di implementarlo. Per farlo tuttavia ho avuto bisogno di alcune librerie di Java che mi hanno dato una grossa mano con i numeri primi e con l'aritmetica modulare, sto parlando delle classi BigInteger. Il resto dell'applicazione si è basata sull'elaborazione di stringhe per poter permettere la cifratura di un certo numero di caratteri alla volta, ovvero ottenere una cifratura a blocchi
Per chi volesse provare l'applicazione, il file .jar è disponibile al seguente LINK.