DOMANDA Scambio chiave crittografica in una chat

Pubblicità

MarkS3

Nuovo Utente
Messaggi
29
Reazioni
2
Punteggio
25
Ciao a tutti, come da titolo ho una domanda da porre.
Allora sto realizzando una piccola chat crittografata in java da portare come progetto per l'esame di maturità.
Si tratta di una chat UDP multicast con due classi. Una fondamentalmente che permette di inviare i messaggi e l'altra, un thread, che sta in attesa per ricevere messaggi dagli altri membri del gruppo.
Ora sorge il dubbio. Come faccio a crittografare il tutto?
Ho provato con l'RSA (uno degli algoritmi studiati quest'anno) ma ho problemi, perchè non riesco a capire come far prendere la chiave pubblica dalla parte che invia e quella privata dalla parte che riceve. E poi si prende la chiave pubblica del destinatario di solito, io ho un gruppo multicast, quindi non un unico destinatario.
Qualcuno conosce altri metodi più semplici per crittografare la stringa da inviare e decriptarla all'arrivo? Anche metodi semplici e banali.
Spero davvero che qualcuno possa aiutarmi, ci terrei a crittografare, anche molto più semplicemente di quanto io ho pensato, la chat.
 
In un sistema di chiavi asimmetriche la chiave pubblica di ogni utente deve essere nota, tipicamente fornita da una PKI (public key infrastructure) che può essere nel tuo caso un server o qualcosa di simile. Il problema è che se mandi il messaggio a più utenti, per garantirne la segretezza dovrai criptare il messaggio per ogni altro utente usando la sua chiave pubblica, in questo modo i singoli destinatari leggeranno il messaggio decriptandolo con la propria chiave privata. Se vuoi anche garantire l'identità del mittente, puoi calcolare l'hash del messaggio, criptarlo con la chiave privata del mittente e metterlo dentro al messaggio (che viene poi criptato con la chiave pubblica del destinatario). Ma penso che questo ti sia già noto, è la classica procedura di firma asimetrica.
Alternativamente puoi usare una crittografazione simmetrica, usando quindi la stessa chiave per tutti i messaggi da e verso qualsiasi utente. La chiave simmetrica è privata e per condividerla puoi usare le chiavi asimmetriche sopra citate per creare un canale sicuro. Una volta che tutti hanno ricevuto la chiave simmetrica, usi quella per criptare e spedire in multicast.
Altra alternativa, che non richiede una PKI, è l'utilizzo di Diffie-Helmann per creare un canale sicuro e scambiare la chiave simmetrica che poi utilizzi per continuare lo scambio messaggi. Ti conviene in questo caso scegliere un utente "master" (per esempio quello che avvia la chat di gruppo) che si preoccupa di scegliere e diffodere la chiave simmetrica a ogni utente che si aggiunge alla chat.
Queste sono solo alcune idee... sicuramente c'è di meglio.
 
Allora sto realizzando una piccola chat crittografata in java da portare come progetto per l'esame di maturità.
Mi sembra un po' pretenzioso per le tue competenze, obbiettivamente. E' un'impresa lunga ed astrusa, nonché richiedente di conoscenze piuttosto estensive sulla questione. Ti consiglio due vie alternative:
  • Usa un semplice algoritmo di mascheramento delle informazioni come il classico cifrario di cesare et similia. (osserva infatti non parliamo di crittografia dei dati) Puoi anche inventarne uno tuo, che credo darà una migliore impressione perché dà a vedere che effettivamente hai interesse nel spendere il tuo tempo in ciò.
  • Usa protocolli a più alto livello che si occupano del layer crittografico sottostante. Troverei interessante, ad esempio, WebSocket, di cui trovi una realizzazione crittografata (via HTTPS) e non qui.

Personalmente, far vedere "che sai mettere insieme RSA ed AES" mi significa ben poco, anzi che hai una conoscenza piuttosto bassa a riguardo; ci sono innumerevoli problematiche collaterali a ciò e nessuno vorrebbe metterci mano: per questo esiste TLS.

Poi non capisco perché usare UDP. E' totalmente insensata come scelta, perché sono necessari i servizi del TCP: non ha senso rendere i sicuri i messaggi se poi non hai un handshake a 3 o 4 vie e quindi sei soggetto a spoofing. Lasciando stare del tutto il fatto che i messaggi non hanno garanzia di essere trasmessi.
 
Pubblicità
Pubblicità
Indietro
Top