Penso che tu intenda Perfetta segretezza avanzata , che WhatsApp fa supporta nella sua fine- crittografia fino alla fine. PFS è difficile per le app di chat, a causa dell'incertezza nella connessione, ed è la ragione per cui molte app di chat lo ignorano.
In PFS normale (come TLS o SSH) viene stabilita una connessione in corso e le chiavi vengono ricalcolate ogni volta in numero di byte o minuti. Le app di chat non sono in grado di riconoscere un messaggio (o qualsiasi dato) ricevuto. In effetti, l'altra estremità del canale potrebbe non aver mai inviato alcun dato a modo tuo, oppure era offline per tutto il tempo. In ogni caso, tu come emittente dovresti essere in grado di proteggere i messaggi che hai inviato, indipendentemente dall'altra estremità.
Per superare l'intero problema, protocolli come OTR en Axolotl usa prekeys . Questi prekey sono tasti Diffie-Hellman (o EC come Curve25519) precalcolati. È normale calcolare alcune centinaia di chiavi in anticipo. Tutte le chiavi pubbliche di questi keypair precalcolati vengono inviate al server relay (chat) e pubblicizzate insieme alla tua chiave di identità pubblica (la chiave di identità pubblica è in realtà il tuo 'nome' verso gli altri) . Ora che i prekeys pubblici si trovano sul server relay, chiunque desideri inviarti un messaggio può semplicemente scegliere uno dei tuoi prekeys e calcolare il segreto condiviso.
Il messaggio viene quindi crittografato e autenticato utilizzando il segreto condiviso e inviato al destinatario insieme all'ID prekey. Una volta che il ricevente estrae il messaggio dal server, può decodificare il messaggio con la prekey privata corrispondente. Un nuovo prekeypair viene generato e inviato al server per prendere il suo posto. Questo sistema funziona all'infinito.
Sia il mittente che il destinatario devono tenere traccia di tutti i loro prekeys ancora in uso. L'intero algoritmo è noto come Double Ratchet .
App che utilizzano Axolotl :
- WhatsApp
- Google Allo
- Facebook Messenger
- Signal
- Viber (richiesto)
Aggiorna
Il protocollo è autopulente perché ogni messaggio è crittografato con un'altra chiave. Questa chiave non è più nota quando il messaggio viene decifrato e il messaggio stesso viene memorizzato nel database dell'app locale. Ecco il trucco: i messaggi sono not concatenati in ordine, quindi al meglio una pre-chiave (un messaggio) è compromessa. Questo non ha alcun effetto sugli altri messaggi. Ogni messaggio è crittografato con un'altra chiave (segretezza perfetta). I messaggi di per sé non dipendono l'uno dall'altro e quindi un attacco all'ultimo messaggio non conferisce al malintenzionato il controllo sulle comunicazioni future (segreto futuro). Nota: il protocollo presenta anche alcuni svantaggi, ad esempio ordini di messaggi o messaggi persi.
Aggiornamento 2: chat di gruppo
Dal punto di vista del protocollo, non esiste una "chat di gruppo". È lo stesso messaggio che invia più volte alle persone, come le e-mail possono essere inviate anche a più destinatari. Ognuno di questi messaggi è crittografato con la prekey del destinatario. Ad esempio, se il gruppo contiene un totale di 4 persone, incluso te, lo stesso messaggio viene inviato 3 volte (tecnicamente, invia una sola volta, contenente 3 messaggi) a ciascuno dei membri del gruppo. Pertanto è necessario che ogni messaggio sia firmato e crittografato con il segreto condiviso tra te e il destinatario. Nota: l'ultima versione del protocollo TextSecure può ottimizzare questo processo in qualche modo crittografando il messaggio una volta e firmandolo più volte. C'è una proposta per introdurre chiavi di gruppo temporanee per gruppi più grandi. Per quanto ne so, questo non è ancora arrivato a WhatsApp.
Se un nuovo utente si unisce alla chat, non vi è alcuna cronologia per quell'utente poiché i messaggi di chat sono tenuti sul dispositivo locale (ovviamente). Vedi questo come un vantaggio, ogni utente del gruppo è responsabile per mantenere privati i messaggi. Sarà una soluzione di sincronizzazione; 1) aumentare la superficie di attacco, 2) aumentare la complessità del criptosistema e 3) spostare la proprietà dei messaggi in giro.