Crittografia "chat di gruppo" end-to-end

4

Ho un caso qui, in cui ho bisogno di crittografare i messaggi a una squadra / gruppo. Tutti i membri del gruppo possono creare un nuovo messaggio e tutti gli altri membri del gruppo possono leggere / modificare / eliminare quel messaggio. Voglio le seguenti cose:

  1. Messaggi crittografati
  2. Decifrabile da tutti in un gruppo (nessun altro può sbloccarlo)
  3. I membri del gruppo possono leggere / modificare ogni messaggio
  4. Nessun riutilizzo dei messaggi (come la memorizzazione di tutte le chiavi pubbliche dei membri del team e quindi crittografia di tutti i messaggi con la loro chiave pubblica), poiché in questo caso non funzionerebbe
  5. È possibile aggiungere un nuovo membro al gruppo e concedere a quell'utente l'accesso a tutti i messaggi precedenti

La proprietà principale di questo è la sicurezza. Non voglio che nessuno sia in grado di accedere ai messaggi.

Ecco un possibile problema: se l'intero database viene eliminato e qualcuno ha già un account su quel sito, tale utente NON deve essere in grado di aggiungersi a quel gruppo, per visualizzare tutte le password memorizzate in quel gruppo (come se la persona ricrea l'applicazione utilizzando il database). I messaggi dovrebbero essere crittografati in qualche modo, nessuno (nemmeno con il database in mano) può accedere ai messaggi crittografati.

Che cosa sto cercando di fare qui? È un caso piuttosto unico che penso.

    
posta MortenMoulder 15.03.2017 - 11:37
fonte

2 risposte

5

Iniziamo con l'ultimo vincolo: se il database è compromesso, l'attaccante non deve essere in grado di estrarre una chiave dal database e decrittografare i messaggi. Un modo semplice per assicurarti che sia sicuro che la chiave non sia nel database . Cioè, qualunque chiave / ecc. sono obbligati a decifrare i messaggi vengono memorizzati da ciascun client, non centralmente.

Hai detto che non vuoi criptare ogni messaggio per ogni persona usando la sua chiave pubblica. È anche presente una chiave simmetrica per persona? Lo svantaggio è che in un gruppo di N persone ogni messaggio avrebbe N firme, e ci sarebbero bisogno di essere N 2 chiavi - quindi questo non è l'ideale per grandi gruppi.

Invece, se esistesse una sola "chiave di gruppo", che tutti usano per crittografare i loro messaggi? Tutti in questo gruppo avrebbero questa chiave. Parte di "unirsi" a un gruppo è dove un membro esistente condivide con sé la propria copia della chiave. Per provare la paternità (se lo desideri) puoi firmare ogni messaggio con la chiave pubblica dell'autore - i messaggi modificati saranno firmati con la chiave pubblica dell'editor.

Se è presente una singola chiave di gruppo, è necessario ruotare questa chiave ogni volta che qualcuno si disconnette dal gruppo. Ciò richiederebbe un utente comunemente accettato come "amministratore di gruppo" che invia un messaggio a ciascun singolo membro indicando la nuova chiave. Affinché i nuovi membri possano leggere l'intera cronologia, potrebbe avere senso che la vecchia chiave sia crittografata con la nuova chiave e pubblicata nel gruppo (probabilmente come parte della notifica "X ha lasciato il gruppo"), in modo che i nuovi membri possano seguire la cronologia dei messaggi attraverso questo limite.

Quindi: una singola chiave di gruppo memorizzata nei client e non nei server, le chiavi sostituite ogni volta che un membro lascia il gruppo e inviate a ciascun membro (chiave pubblica crittografata) da un amministratore e ogni messaggio / modifica firmato facoltativamente dalla chiave pubblica (diverso dal precedente, perché non si firma e non si cripta mai con la stessa chiave). Questo mi sembra che risponda alle tue esigenze, ma non soddisfa alcuni altri requisiti: il gold standard è Whisper Systems, quindi potresti leggi su come fanno le cose.

    
risposta data 15.03.2017 - 12:00
fonte
0

Non l'ho usato da un po ', ma Threema è un buon strumento di crittografia end-to-end che può fare chat di gruppo. Non posso parlare con il resto.

link

    
risposta data 15.03.2017 - 11:49
fonte

Leggi altre domande sui tag