lunedì 30 luglio 2018

Aiuto, non ci sono più siti sicuri!

Pochi giorni fa è stata rilasciata la versione del browser Chrome che implementa la già annunciata funzionalità di segnalazione per i siti che non usano HTTPS.
Sul web molti siti specializzati (un esempio) ne hanno parlato, ma omettendo le informazioni basilari, per aiutare a capire l'importanza di questa scelta: ci provo io.

HTTP e HTTPS
HTTP (HyperText Transfer Protocol) è il protocollo di comunicazione su cui si basa il web, ossia internet come è conosciuta da tutti: i siti "parlano" con i browser utilizzando HTTP come linguaggio. HTTP è bidirezionale, nel senso che permette di inviare dati anche dal browser al server: funzionalità che viene usata per inviare i nostri parametri al server in modo da ottenere una risposta personalizzata.
HTTPS è la versione sicura, cioè crittografata, di HTTP. Il che vuol dire che HTTP invia i dati, in entrambe le direzioni, in chiaro, quindi facilmente leggibili (credetemi, l'intercettazione delle comunicazioni è banale).

La Crittografia di HTTPS
La crittografia trasforma un dato comprensibile in uno incomprensibile, tramite complesse funzioni matematiche. Mentre le funzioni sono sempre le stesse, ciò che rende unica ogni trasformazione è l'utilizzo di un altro dato, detto chiave, unico. Con la chiave si effettua sia la cifratura che la decifratura, il che vuol dire che la chiave deve essere conosciuta sia dal mittente che dal ricevente una comunicazione, e da nessun altro, altrimenti chiunque è in grado di decifrare la comunicazione. Questa modalità è scomoda perché mittente e destinatario devono scambiarsi la chiave in modo sicuro, e soprattutto ogni coppia mittente-destinatario deve avere chiavi diverse.
Per fortuna esistono metodi di cifratura con 2 chiavi diverse (ma correlate l'una all'altra): una deve essere tenuta segreta e l'altra può essere liberamente divulgata, semplicemente perché la cifratura avviene con una chiave e la decifratura con l'altra. Ebbene, HTTPS usa questa modalità: il server ha la chiave privata, ed il browser ha la chiave pubblica, che si scarica prima di iniziare a comunicare.


Riservatezza
Il difetto della chiave pubblica è che è, appunto, uguale per tutti, per cui chiunque sarebbe in grado di decifrare le comunicazioni provenienti dal servizio: per renderla univoca, si aggiunge un codice di sessione (creato alla prima comunicazione tra il server ed ogni singolo browser); in questa maniera, HTTPS è in grado di scambiare dati mantenendo la riservatezza degli stessi.

Autenticazione
Il fatto che il servizio possegga una chiave unica, creata appositamente e tenuta segreta comporta una seconda caratteristica: la corrispondente chiave pubblica funziona solo e esclusivamente con quel servizio, per cui il browser è sicuro di comunicare proprio con quel servizio e con nessun altro: potrei quindi autenticare il servizio.
Purtroppo, poiché la chiave pubblica è fornita dal servizio stesso, a meno di non fidarsi ciecamente, non possiamo essere sicuri che il servizio sia effettivamente quello che dichiara di essere. Per cui la vera autenticazione di un servizio ha bisogno di un ulteriore passaggio: la chiave pubblica, prima di essere utilizzata, viene a sua volta autenticata (e firmata digitalmente) da una entità terza, che effettua dei controlli per verificare che il servizio (in realtà, il proprietario, azienda o persona che sia) sia realmente chi dichiara di essere.

Siti sicuri e non sicuri
Il browser è in grado di riconoscere la firma digitale della chiave pubblica: quindi, se riconosce la firma come valida, e la chiave pubblica funziona rispetto al servizio (e quindi alla sua chiave privata), si è certi che stia parlando proprio col servizio (sito) giusto, quindi sicuro. In tutti gli altri casi, è considerato non sicuro.
Quindi i fornitori di siti hanno tutti gli interessi a farsi considerare sicuri, per le ragioni suddette: per un discorso di reputazione possono voler essere riconosciuti con certezza (es. un giornale online); per un discorso di segretezza delle informazioni (es. tutti i casi in cui si usano password); per entrambe (es. banca online).

Altre considerazioni
Tutto a posto? Ovviamente no. Ecco alcune questioni a cui fare attenzione.
  • Un sito non sicuro può non essere un problema: dipende dalla criticità delle informazioni che tratta.
  • Le chiavi possono avere una scadenza: se non vengono rinnovate in tempo, il sito può improvvisamente essere considerato non sicuro, pur essendolo fino a poco prima. La comunicazione rimane cifrata, ma non si può più fare completo affidamento sull'identità del servizio.
  • I criminali informatici cercano continuamente metodi per ingannarci e farci considerare come sicuro un sito che non lo è. Un metodo divertente ed esemplificativo è questo. Inoltre, l'iconcina del lucchetto non è sufficiente perché banalmente falsificabile.
  • La segnalazione di sito sicuro può essere assolutamente valida anche per siti con nomi simili a quelli più famosi: quindi, sempre occhio al nome del servizio nella barra degli indirizzi! Se notate qualcosa di strano, verificate che il proprietario del sito sia chi vi aspettate, e non qualcun altro.
  • Tutti i metodi crittografici sono comunque vulnerabili al cosiddetto attacco a forza bruta, ossia cercare di trovare le chiavi semplicemente provando tutte le combinazioni possibili; per questo motivo la lunghezza della chiave è un fattore determinante (all'aumentare della lunghezza, il numero di tentativi aumenta in maniera esponenziale).
  • Una pagina web può essere composta di parti diverse, che possono provenire da siti differenti (questo post ne è un esempio); ognuna di queste parti può utilizzare HTTPS oppure HTTP semplice, per cui la sicurezza complessiva potrebbe essere compromessa. In realtà i browser segnalano anche questa situazione (in particolare, pagine miste HTTP e HTTPS sono viste con sospetto).

Quindi: bisogna (tanto per cambiare) usare la testa. Mai e poi mai accedere al proprio conto corrente online (è solo un esempio) senza l'indicazione di sito sicuro; negli altri casi, cliccando sull'indicazione, è possibile avere i dettagli della segnalazione, e sulla base di quella decidere se andare avanti o no; e comunque si può considerare la reputazione di un sito anche sulla base dell'utilizzo e della relativa manutenzione dei certificati necessari all'HTTPS.
Anche gli altri browser permettono di fare le stesse verifiche, semplicemente (al momento) non danno l'indicazione nella stessa maniera come ora ha introdotto Chrome. Quest'ultimo ha "solo" fatto la scelta di spingere l'adozione di HTTPS anche nei casi in cui finora non se ne era sentita la necessità.