Titolo

La guerra alla crittografia - alcune questioni tecniche

5 commenti (espandi tutti)

Whatsapp ora usa Signal Protocol, gia' Axolotl. Il protocollo in se' e open source.

edit: noise pipes non e' open source, hai ragione. noise e signal protocol lo sono ma non questa particolare implementazione

In ogni caso, e' un'applicazione parzialmente server side quindi se anche fosse tutto open source uno dovrebbe comunque fidarsi del fatto che la versione che girano sia la stessa che e' open source. Comunque, come giustamente dici tu, il nome di Moxie e' sigillo di garanzia.

Sì, il fatto che non sia possibile utilizzare un'implementazione completamente open source sul client lascia sempre aperta la possibilità di una falla (o una backdoor) nel codice implementato da WhatsApp.

Però, mi sembra, se fosse tutto open source sui client, o comunque fossi sicuro che sui client non è stata implementata nessuna backdoor, il fatto che il server sia closed source, o compromesso comunque in qualche modo, non detrarrebbe dalla sicurezza della comunicazione. Sbaglio?

L'unico problema che intravedo (poi magari ce ne sono altri a cui non ho pensato) è che la verifica delle chiavi pubbliche degli utenti comunicate dal server di Whatsapp non viene fatta tramite una certificate authority esterna. Bisogna quindi fidarsi del fatto che, quando chiedo la chiave pubblica di un altro utente per mandargli un messaggio cifrato, il server di Whatsapp mi dia effettivamente la sua chiave pubblica e non un'altra. Questo potrebbe dare luogo ad un attacco del tipo man in the middle.

A ben vedere, due utenti di Whatsapp hanno modo di verificare che le chiavi pubbliche che stanno utilizzando per cifrare siano effettivamente le loro e non quelle di un man in the middle verificando un QR code. Il problema è che la verifica deve essere fatta offline, cioè i due utenti devono incontrarsi di persona per scannerizzarsi a vicenda i propri QR codes.

Ho provato lo scambio di chiavi off-line, effettivamente si tratta di un lungo codice numerico e il sistema richiede di verificare che sia lo stesso su entrambi i dispositivi. Quindi le chiavi vengono generate in maniera centrale e l'utente non puo' fare altro che accettarle o meno.

Da  questa procedura non traspare che ci siano due chiavi pubbliche, una per ciascuna parte della comunicazione. Non ho provato con le chat multiutente.

Mi e' sembrato restrittivo che due utenti non possano generarsi le chiavi al di fuori del software di WA e poi importarle (chiaro che non e' una procedura adatta a tutti). Ma non essendo un esperto, forse la mia e' solo una paranoia.

Se guardi, il numero che viene generato è composto di un pezzo fisso e un pezzo che cambia con il contatto, i due pezzi corrispondano alle due chiavi pubbliche dei due contatti. Per le chat di gruppo lo scambio di chiavi avviene con ogni partecipante a livello di client: il server non ha mai accesso alle chiavi private o alle chiavi di sessione. Esiste un white paper "Whatsapp Encryption Overview" che spiega abbastanza bene come è (o dovrebbe essere) implementato il meccanismo. Non riesco a linkarlo ora, ma credo si trovi facilmente su google.