Un sistema di chat client-server sicuro implementato in Java.
Autori: Giovanni Battistelli - Enrico Negretto
Questo progetto implementa un sistema di comunicazione client-server sicuro utilizzando Java, con focus particolare sulla sicurezza e sulla gestione efficiente delle connessioni multiple.
- Java Development Kit (JDK) 8+
- Maven per la gestione delle dipendenze
La scelta di Java come linguaggio di programmazione è stata guidata da diverse caratteristiche chiave:
- Affidabilità e sicurezza integrate
- Eccellente gestione della concorrenza
- Robusto supporto per la crittografia
- Ricco ecosistema di librerie
- Gestione efficiente delle connessioni multiple
Il sistema utilizza un'architettura client-server con gestione centralizzata delle connessioni. Il server implementa un modello multithread, dove ogni client viene gestito da un thread dedicato, permettendo l'elaborazione parallela delle richieste senza blocchi reciproci.
Il server gestisce tre funzioni principali:
- Accettazione delle connessioni in entrata
- Gestione indipendente della comunicazione
- Elaborazione e risposta ai messaggi
Il client si occupa di:
- Stabilire e mantenere la connessione con il server
- Implementare la crittografia per la protezione dei dati
- Gestire l'invio e la ricezione di messaggi e/o file
Il progetto fa uso delle seguenti librerie Java:
java.net.Socketejava.net.ServerSocketper le connessioni TCPjavax.cryptoper la crittografia AESLog4jper logging
La sicurezza è implementata attraverso diversi livelli:
-
Protocollo base:
- Comunicazione basata su TCP per affidabilità e gestione errori
-
Misure di sicurezza:
- Crittografia AES-GCM con chiave a 32 byte
- Protocollo Diffie-Hellman per lo scambio sicuro delle chiavi
- Derivazione della chiave AES dalla chiave segreta condivisa
- Connessione stabile e affidabile client-server
- Sistema di messaggistica con crittografia
- Logging avanzato tramite Log4j
- Gestione concorrente delle connessioni multiple
Il progetto prevede l'implementazione delle seguenti funzionalità:
- Sistema di trasferimento file
- Interfaccia grafica utente
- Sistema di gestione utenti con database SQL
- Gestione dei permessi utente