- Panichi Leonardo (Leon421)
- Pesaresi Adriano (adrianopesaresi)
- Mazzaferro Sebastiano (SebastianoMazzaferro)
Realizzazione un’applicazione client-server per la comunicazione cifrata tra coppie di utenti. Codifica e decodifica dei messaggi deve avvenire tramite l’algoritmo asimmetrico RSA.
- Generazione di coppie di chiavi pubblica-privata. Ad ogni utente del sistema deve essere assegnata una coppia di chiavi per consentirgli di comunicare con altri utenti. La generazione delle chiavi viene eseguita lato client (per garantire la riservatezza della chiave privata). Ogni client, dopo aver generato la sua coppia di chiavi, deve inviare al server la sua chiave pubblica per consentirne la distribuzione ad altri utenti.
- Invio di messaggi cifrati;
- Ricezione di messaggi cifrati.
- Rimane in attesa di eventuali richieste di connessione da parte di client;
- Quando arriva una richiesta di connessione da parte di un client, avvia un thread che gestisce le richieste che vengono da quello specifico client.
- Memorizzare la chiave pubblica di C (chiave che viene inviata da C); questa informazione deve essere memorizzata in una struttura dati condivisa con altri thread;
- Inviare, su richiesta, a C la chiave pubblica di un’altro utente connesso in quel momento;
- Ricevere e memorizzare messaggi cifrati provenienti da C e diretti verso un altro client destinatario del messaggio cifrato; questi messaggi vanno memorizzati in una opportuna struttura dati condivisa tra tutti i thread.
- Inviare a C tutti i messaggi cifrati a lui indirizzati (selezionandoli dalla struttura dati condivisa descritta al punto 3).
- Generare la propria coppia di chiavi pubblica-privata;
- Inviare al server la propria chiave pubblica in modo che questa possa essere condivisa con altri client;
- Richiedere al server la chiave pubblica di un altro client a cui vuole mandare un messaggio;
- Cifrare un messaggio m usando la chiave pubblica di un client destinatario;
- Inviare al server un messaggio cifrato;
- Richiedere al server tutti i messaggi cifrati a lui indirizzati;
- Decifrare e visualizzare tutti i messaggi ricevuti da altri client.
Classe che rappresenta l'utente che vuole comunicare.
(Classe che implementa i metodi per la generazione delle chiavi di un qualsiasi utente che utilizzi l'applicazione)
(Classe che costruisce la struttura dati per la memorizzazione delle chiavi)
(Classe che costruisce la struttura dati per la memorizzazione del messaggio criptato)
(Classe che crea la stuttura che gestisce i messaggi con i relativi metodi)
(Classe che implementa la crittografia RSA del messaggio)
(Classe che accetta la connessione e fa partire il serverthread)
(La parte del server che risponde ai client)