Crittografia chiave asimmetrica nella chat di gruppo

5

Sto lavorando su un'applicazione di chat che supporta sia la chat per singolo utente che la chat di gruppo.

Abbiamo pianificato di crittografare i messaggi nella chat per utente singolo con la chiave pubblica del destinatario e decrittografarlo utilizzando la chiave privata del destinatario.

Se seguiamo questo approccio, non abbiamo alcuna possibilità di implementarlo in caso di chat di gruppo.

Qualche idea?

    
posta Devarshi 28.04.2014 - 12:32
fonte

3 risposte

6

Dipende dal modello che usi per la chat di gruppo:

  • Peer-to-peer: è necessario crittografare ogni messaggio con la chiave puiblic del destinatario e inviarlo a ciascun utente separatamente e creare l'illusione di una chat di gruppo. Ciò impedirà ai nuovi membri del gruppo di vedere i messaggi precedenti.
  • Client-Server: carichi i messaggi "firmati" sul server e li crittografi a ciascun utente.

In alternativa, puoi creare una coppia di chiavi per questo "gruppo" e inviare una copia del privato a tutti i membri del gruppo, ma sono sicuro che già vedi il problema.

    
risposta data 28.04.2014 - 15:00
fonte
2

La tua migliore scommessa è probabilmente quella di avere l'idea di una sessione di chat e usare una chiave di sessione per tutta la durata. La crittografia simmetrica è molto più veloce e più sicura di quella asimmetrica, quindi se l'host della sessione decide una chiave di sessione e quindi la crittografa con ciascun membro della chiave pubblica della conversazione e la invia, allora ogni parte avrà la stessa chiave di sessione e essere in grado di partecipare alla conversazione.

In alternativa, puoi semplicemente crittografare il messaggio per ogni destinatario o configurare sessioni univoche con ciascun destinatario, ma questo è un processo molto più lento e più impegnativo per il processore, sebbene utilizzi ancora approssimativamente la stessa quantità di dati da quando i messaggi devono essere inviati individualmente per ogni destinatario (a meno che non si stia utilizzando un relay basato sul server).

    
risposta data 28.04.2014 - 15:46
fonte
2

Non sono a conoscenza di alcun modo standard per implementare ciò che stai richiedendo. Tuttavia, puoi prendere come modello il tipo di sistema utilizzato in EFS (e altre soluzioni software simili):

  • chiedi a qualcuno di creare la chat di gruppo. Il creatore genererà una chiave univoca valida solo per questa specifica chat.
  • Ogni messaggio chat viene crittografato utilizzando un algoritmo di crittografia simmetrico utilizzando la chiave di sessione (chat room) univoca.
  • Ogni volta che un nuovo cliente si unisce, dovrà chiedere a un membro della chat esistente la chiave (come si autentica che il nuovo client non rientra nell'ambito). Quella chiave di chat viene crittografata dal mittente utilizzando la chiave pubblica del nuovo client.

Il problema principale con questo è come controllare il nuovo client: ovviamente, è necessario eseguire tale convalida in un modo "strong" perché una volta che qualcuno ottiene la chiave di sessione, tutti i messaggi - passati e futuri usando quella chiave possono essere decifrati.

Se le tue sessioni dovrebbero durare a lungo, potrebbe essere utile avere un meccanismo per rinegoziare le chiavi ad un certo punto.

Inoltre, poiché in questo sistema il client iniziale decide sulla chiave di crittografia, dovrai essere molto attento a come viene scelta tale chiave in modo da non indebolire l'intera sicurezza usando una semplice chiave e dovresti implementare un modo per le altre parti nella conversazione rifiutano una chiave "debole" (non forzando una rinegoziazione, semplicemente rifiutando la connessione)

    
risposta data 28.04.2014 - 15:49
fonte

Leggi altre domande sui tag