Ormai è stato ripetuto almeno un paio di volte a tutti di inserire i propri dati sensibili (password, codici bancari, ecc…) solo all’interno di pagine protette da crittografia, cioè di fare attenzione alla presenza alternativamente del lucchetto verde, della barra verde, del prefisso https:// nella barra degli indirizzi, o di qualche altro dettaglio che sicuramente avrò dimenticato di citare. Ma nello specifico, come fa una pagina ad essere sicura e trasmettere informazioni senza che queste vengano carpite da terzi non autorizzati?

Molti giustamente fanno riferimento all’HTTPS. Il protocollo di riferimento per trasferire ipertesti (pagine web) su internet si chiama HTTP, HyperText Transfer Protocol, il cui principale problema a livello di sicurezza è quello di non applicare nessuna sicurezza, cioè trasmettere tutte le informazioni in chiaro, potenzialmente intercettabili da qualcuno lungo il percorso. Invece di buttare tutto e definire un nuovo protocollo sicuro già in partenza è stato scelto però di applicare una soluzione molto più flessibile: trasferire tutte le comunicazioni HTTP attraverso un secondo protocollo sicuro, SSL o il suo successore TLS, il quale quindi non si preoccupa in maniera specifica di portare pagine web ma solo di crittografare del traffico generico tra due computer. HTTPS è il risultato quindi dell’accoppiata tra HTTP, già largamente impiegato e conosciuto, e TLS: in questa maniera, come già successo per SSL, se si scoprissero difetti e problemi di sicurezza nel protocollo crittografico, “basterebbe” cambiarlo con uno più sicuro invece di rifare da capo il web.

Ma queste sono solo formalizzazioni dietro cui si celano ragionamenti ben complessi:

  • La prima cosa da fare è trovare un algoritmo a chiave simmetrica, ad esempio l’Advanced Encryption Standard, per materialmente cifrare il traffico. Il vantaggio di utilizzare un algoritmo di questo tipo è che basta una password, o meglio, una chiave non troppo lunga per essere efficace e richiede poche risorse per cifrare e decifrare. Questo aspetto è di fondamentale importanza perché l’era del Dial-up è passata da un pezzo e nessuno ormai è disposto ad aspettare 40 secondi per il caricamento di una pagina. Ma da solo non basta: una chiave simmetrica viene utilizzata sia per cifrare sia per decifrare, come una combinazione di una cassaforte rimane sempre la stessa sia per chiuderla sia per aprirla. Il problema vero sta nel decidere quale chiave usare quando ci si collega ad un sito internet per la prima volta: se la si spedisse direttamente al visitatore, potrebbe venire intercettata, rendendosi completamente inutile.
  • Tre crittologi hanno inventato il primo algoritmo a chiave asimmetrica: RSA. A questo punto potresti chiedermi se ci sono altri acronimi o se è l’ultimo, cosa voglia dire può pure passare in secondo piano (sono le iniziali dei tre inventori 😛 ). La cosa interessante comunque è che funziona con due chiavi diverse, solitamente una utilizzata per cifrare e un’altra per decifrare. Di conseguenza non è necessario scambiarsi una password per comunicare in maniera sicura: rendendo pubblica una delle due chiavi, detta non a caso chiave pubblica, tutti possono cifrare i messaggi diretti al destinatario, che è il solo, mantenendo la seconda chiave segreta, nelle capacità di decifrarli. Un solo post non basterebbe per spiegare come funzioni nel dettaglio, tuttavia a grandi linee si può dire che la sua sicurezza parte dalla moltiplicazione di due numeri primi molto grandi: dato infatti il loro prodotto è molto difficile risalire ai due fattori di partenza, e comunque troppo lungo se sufficientemente grandi. Ne consegue immediatamente che siano implicati calcoli lunghi e complessi, con due principali problemi: le operazioni crittografiche richiedono un lasso di tempo non trascurabile e le quantità di dati da trasmettere può lievitare sensibilmente, che tradotto significherebbe un caricamento delle pagine più lento.
  • L’idea è invece di mantenere il sistema simmetrico in funzione, e di scambiare la chiave segreta/simmetrica, se così vogliamo chiamarla, utilizzando un cifrario asimmetrico: il risultato è che è possibile utilizzare il comodo AES per trasmettere grandi quantità di dati, ed impiegare il costoso RSA solamente per trasmettere in maniera sicura la chiave simmetrica, permettendo anche di cambiarla periodicamente per una maggiore sicurezza.

Un esempio moolto approssimato di comunicazione potrebbe essere:

  • tizio si collega a sito web;
  • sito web presenta la propria chiave pubblica;
  • tizio cifra la chiave simmetrica con la chiave pubblica;
  • sito web riceve la chiave simmetrica cifrata e la decifra;
  • sito web cifra la pagina web usando la chiave simmetrica;
  • tizio riceve e decifra la pagina web usando la chiave simmetrica;
  • la chiave simmetrica non è mai stata trasmessa in maniera leggibile, pertanto un intercettatore non può leggere la comunicazione a meno di non provare tutte le chiavi possibili.

A questo punto sembrerebbe quadrare tutto, ma non è così, e il problema si trova già all’inizio: quando sito web presenta la propria chiave pubblica, chi garantisce che quella sia la sua chiave pubblica, e che qualcuno non l’abbia cambiata con la propria? Potrebbe sembrare un’affermazione paranoica, ma su internet non c’è alcuna garanzia di essere collegati direttamente al computer con cui si pensa di esserlo, e potrebbe sempre essercene un terzo in mezzo, cosa peraltro tutt’altro che difficile da realizzare. L’unico meccanismo a cui si è giunti finora per garantire la genuinità di una chiave pubblica (se ne conoscete altri fatemelo sapere 🙂 ) consiste nella garanzia di una terza parte fidata, un qualcuno che assicuri “Tranquillo fidati la chiave privata ce l’ha solo il sito web che stai cercando di aprire, non un tizio casuale che vuole spiarti 😉 ho controllato io”.

Il problema non sta però nel come far funzionare quest’ulteriore meccanismo (i matematici ci hanno già pensato), la domanda da porsi è di chi mi devo fidare? Esistono delle società, le autorità certificative (questa volta vi ho risparmiato l’acronimo inglese), che si preoccupano di verificare l’identità e rilasciare certificati digitali a persone e aziende che ne facciano richiesta per i loro siti web (i certificati digitali sono l’implementazione operativa di quanto descritto sopra). È da escludere quindi che una di queste compagnie rilasci un certificato valido per *.facebook.com ad un soggetto senza prima verificare che si tratti davvero di un rappresentante di Facebook. Anzi, ogni azienda fa il possibile per guadagnare fiducia e far accettare i propri certificati dal maggior numero di computer e browser, comportandosi in maniera virtuosa e prendendo le maggiori misure di sicurezza possibile.

Tuttavia non è raro che queste autorità, indotte in errore o perché bersagli di attacchi informatici, rilascino certificati validi per siti “sensibili” (Google, Yahoo, Facebook per citarne alcuni) a soggetti non autorizzati. Un utente accorto potrebbe però controllare l’autorità certificativa del sito web visitato: e così ha fatto un cittadino iraniano che si è chiesto come fosse possibile che il certificato digitale di Google fosse rilasciato da una semi-sconosciuta compagnia olandese. Da questo episodio sarebbe stata scoperta una grande operazione di spionaggio del governo iraniano messa in atto ai danni dei suoi cittadini, attacco peraltro passato inosservato per circa due mesi.
Questo insegna che il rischio di incappare in attacchi di questo genere su internet è ben lontano dall’essere scongiurato completamente, anche se è possibile sempre contare sulle contromisure sempre più stringenti messe in campo da esperti in sicurezza e tecnologia.