Titolo

La guerra alla crittografia - alcune questioni tecniche

7 commenti (espandi tutti)

Primo: la crittografia end-to-end in questo caso protegge, appunto, dall'intercettazione del flusso di dati, non dalla compromissione del dispositivo di uno degli utenti che stanno comunicando.

Se il dispositivo viene compromesso (i.e., NSA, Google, Apple, Whatsapp, virus nell'app della tastiera...) e l'utente non se ne accorge, è come quando ti mettono una microspia nel microfono del telefono.

D'altra parte, che WhatsApp mandi effettivamente messaggi criptati secondo il protocollo standard (e non altro) e usando solo le chiavi che deve usare, lo si può verificare abbasanza facilmente, quindi la fiducia non è necessaria "a monte": installo WhatsApp, blocco gli aggiornamenti automatici, verifico che la app mandi effettivamente le informazioni criptate secondo quel protocollo e sono "a posto", salvo che WhatsApp non inserisca una backdoor fin dall'inizio (il che, però, non è affatto detto); al momento non so se è possibile, inoltre, comunicare sull'infrastruttura WhatsApp usando client open source, ma non mi stupirebbe.

Secondo: il fatto che un utente che usa la crittografia non venga automaticamente "taggato" come sospetto non so quanto possa essere realmente un problema per l'NSA o la caccia ai terroristi (in fondo, l'intelligence si fa anche con le informazioni su "chi contatta chi", e i sospetti li si può seguire anche con i vecchi sistemi); di sicuro però può essere una manna per le agenzie di intelligence che operano con agenti all'estero... se un agente della CIA che opera in un paese pericoloso può usare WhatsApp (che oggi è usato a livello mondiale da più di un miliardo di utenti) senza essere "attenzionato" in automatico dal governo di quel paese, credo che ci sia un guadagno netto per la sicurezza nazionale USA.

Scommettiamo su quale sarà il primo paese a prendersela con WhatsApp?

D'altra parte, che WhatsApp mandi effettivamente messaggi criptati secondo il protocollo standard (e non altro) e usando solo le chiavi che deve usare, lo si può verificare abbasanza facilmente, quindi la fiducia non è necessaria "a monte": installo WhatsApp, blocco gli aggiornamenti automatici, verifico che la app mandi effettivamente le informazioni criptate secondo quel protocollo e sono "a posto", salvo che WhatsApp non inserisca una backdoor fin dall'inizio (il che, però, non è affatto detto); al momento non so se è possibile, inoltre, comunicare sull'infrastruttura WhatsApp usando client open source, ma non mi stupirebbe.

No Filippo, il protocollo di comunicazione di Whatsapp è proprietario, e non è integrabile con altri client di messaggistica open source. Per lo stesso motivo, non c'è modo di conoscere con certezza assoluta che la cifratura di Whatsapp rispetti le specifiche del protocollo di Signal: usando il metodo da te suggerito è possibile verificare la correttezza della cifratura soltanto per i messaggi in chiaro effettivamente testati, e quindi non è una condizione sufficiente, visto che l'insieme di possibili messaggi in chiaro è troppo grande per poterlo testare in maniera esaustiva. Come dice sopra ASTROLOGO, se il codice sorgente dell'applicazione non è disponibile occorre comunque avere una certa dose di fiducia nell'azienda che l'ha implementata. Poi non è detto che questa fiducia sia necessariamente "a monte" di tutto. Per esempio, nel caso di Whatsapp personalmente mi fiderei perché so che Open Whisper è un'azienda che gode di ottima reputazione nel campo della crittografia end-to-end.

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.