condividendo si impara
Crittografia: la scrittura nascosta (parte 1)
Come permettere agli utenti del nostro sito di trasmetterci in maniera sicura i loro dati su Internet dove, si sa, è facile sbirciare le comunicazioni?
Continua il nostro percorso in cui stiamo imparando insieme a creare dei siti web a partire da zero e oggi vi propongo di riflettere sulla sicurezza della comunicazione tra il nostro sito e il browser di chi lo sta visitando.
La crittografia: un elemento indispensabile per l'uso avanzato di Internet
E-commerce, e-government, e-banking, ma anche l'uso di account personali nei social media non sarebbero possibili senza la crittografia.
Tutti questi usi avanzati della rete, che vanno al di là della semplice richiesta di contenuti da leggere, ascoltare o vedere, necessitano di poter trasmettere informazioni segrete e sensibili in maniera sicura (numeri di carte di credito, nomi utente, password e altri identificativi e credenziali di accesso a servizi).
Tuttavia come abbiamo visto in video precedenti, il protocollo di comunicazione online predefinito, chiamato http, non permette la trasmissione sicura di queste informazioni in quanto tutte le comunicazioni che avvengono attraverso questo mezzo sono in chiaro e leggibili da chiunque stia monitorando la rete su cui transitano i messaggi.
Come comunicare in maniera segreta sotto gli occhi di tutti?
Nel video di oggi inizieremo a conoscere due sistemi di crittografia che permettono di trasmettere i nostri messaggi in maniera sicura trasformandone il contenuto attraverso delle chiavi di cifratura in modo che chi intercetti le comunicazioni in questione non possa capirle senza possedere una formula che gli permetta di ripristinare lo stato iniziale dei dati.
Questo può avvenire in due modi.
Cifratura a chiave segreta (crittografia simmetrica)
In questo tipo di comunicazione il mittente e il destinatario posseggono entrambi un unica chiave di cifratura segreta, concordata in anticipo, che permette sia la cifratura in un senso, trasformando i dati di partenza attraverso diverse e complesse operazioni in un ordine ben preciso, sia la decifratura e quindi il ripristino del messaggio originale.
Chiunque intercetti un messaggio cifrato in questo modo non potrà capire nulla di quanto contiene, ammesso che la chiave sia effettivamente rimasta segreta e sia abbastanza complessa e lunga da non poter essere indovinata attraverso dei metodi di criptoanalisi.
Cifratura a chiave pubblica (crittografia asimmetrica)
La cifratura a chiave segreta è effettivamente molto sicura purché, come detto, la chiave sia ben formulata e sia rimasta segreta.
Presenta tuttavia una caratteristica che ne rende impossibile un uso immediato su Internet: è necessario che gli interlocutori si siano scambiati la chiave prima di iniziare la comunicazione.
Ovviamente questo non può avvenire online, dove, come visto, tutte le comunicazioni, compresa quella di un'ipotetica chiave segreta, avvengono in chiaro e sono potenzialmente leggibili da chiunque.
Per questo è stato necessario sviluppare un tipo di crittografia che permettesse di trasmettere dati in maniera cifrata, senza un accordo precedente, utilizzando un mezzo di comunicazione insicuro come Internet: la cifratura a chiave pubblica.
Una chiave per cifrare e una per decifrare
La cifratura a chiave pubblica è anche nota come crittografia asimmetrica poiché prevede non una sola chiave condivisa dagli interlocutori da usare nei due sensi come visto sopra, ma due chiavi distinte.
Una, la chiave privata, che deve assolutamente restare segreta e che non conosce nessuno se non il sistema che l'ha generata: nel nostro caso il nostro sito. Nemmeno l'utente o l'interlocutore autorizzato deve conoscere questa chiave: nel nostro sistema viene generata e nel nostro sistema resta senza nessuna comunicazione con l'esterno.
Questa chiave è proprio quella che ci servirà per decifrare i messaggi e capirne il contenuto.
L'altra chiave, la chiave pubblica, è invece quella che invieremo all'utente del nostro sito e che gli servirà per cifrare il contenuto del suo messaggio.
La trasmissione di questa chiave sarà visibile a tutti sulla rete ma a noi poco importa poiché è stata costruita in modo da permettere di cifrare i dati ma non di decifrarli. Nemmeno l'utente stesso che ci ha spedito i suoi dati cifrandoli con la nostra chiave pubblica potrebbe decifrarli se lo volesse.
Una specie di magia (matematica)
Come è possibile che accada ciò?
Come vedremo nel video questo è dovuto all'applicazione di un principio matematico abbastanza semplice da comprendere: quello delle funzioni unidirezionali.
Vi sono diversi tipi di operazioni matematiche che possono essere calcolate facilmente e velocemente in una direzione per ottenerne il risultato, ma che, dato il risultato, senza conoscerne gli elementi di partenza sono praticamente impossibili da ricostruire.
Ad esempio un buon calcolatore può ottenere il risultato della moltiplicazione di due numeri primi di 100 cifre ciascuno in circa un milionesimo di secondo.
Se si tratta però di fare il percorso inverso e dal risultato di questa operazione, che sarà un numero di 200 cifre decimali, riuscire a individuare i due numeri primi di partenza, ecco che questa operazione con le potenze di calcolo disponibili attualmente durerebbe miliardi di anni.
Con lo stesso tipo di operazioni a partire dalla nostra chiave privata viene creata la chiave pubblica per la cifratura e per questo non è possibile decifrare il contenuto delle comunicazioni senza conoscere anche la chiave privata. Chiave che però non è ricostruibile a partire dalla sola chiave pubblica (per lo meno non nell'arco di una vita umana).
I passi di una trasmissione sicura
Vediamo quindi come si presenta la trasmissione sicura di un'informazione segreta, mettiamo una carta di credito, sotto gli occhi di tutti:
- il nostro sito renderà disponibile la sua chiave di cifratura (chiave pubblica)
- il nostro utente utilizzerà quella chiave per trasformare i dati prima di inviarceli attraverso la rete
- una volta arrivati a destinazione i dati potranno essere ripristinati al loro stato originale grazie alla nostra chiave privata che nessuno conosce oltre a noi e che non ha mai lasciato il nostro sistema in cui è stata creata.
Chiunque altro avesse intercettato quei messaggi, pur conoscendo la chiave con cui sono stati cifrati non sarebbe comunque in grado di ricostruire il contenuto originale.
E non finisce qui...
Continuerò le riflessioni sulla crittografia ancora nel prossimo video poiché ci sono ancora alcuni usi molto importanti di questi stessi principi da esplorare alfine di permetterci di creare dei siti che offrano delle interazioni sicure ai nostri utenti.
Vedremo come sia possibile non solo trasmettere in maniera sicura i dati ma anche verificare l'identità del sistema da cui abbiamo ricevuto il messaggio (autenticazione), verificare qche il messaggio non sia stato alterato durante il percorso (integrità del messaggio) e vedremo anche come sapere se le chiavi pubbliche che ci vengono proposte siano effettivamente provenienti da attori affidabili e non invece da chi potrebbe cercare di impersonarli abusivamente (certificazioni delle chiavi pubbliche).
Condividiamo le nostre esperienze
Per rendere più interattivo questo canale vi propongo di condividere ciò che impariamo e le cose che vorremmo approfondire o capire meglio assieme nei seguenti modi:
- scrivendo le vostre domande o le vostre osservazioni nei commenti in maniera da avviare una conversazione sotto al video che possa aggiungere valore e portare ancora più informazioni a chi arriverà dopo
- Incontrandoci regolarmente sul canale Telegram "Siamo Iper!", in cui ho previsto di organizzare delle discussioni di gruppo in chat vocali che ci permettano di aiutarci a vicenda, approfondire argomenti e scambiarci esperienze come in un vero e proprio gruppo di studio.
Trovate il link d'invito alle chat vocali su Telegram qui o nella linkoteca in fondo al post.
Una volta iscritti potrete rispondere al sondaggio su quale momento della settimana è il migliore per voi per partecipare agli incontri dal vivo.
Come contribuire allo sviluppo del nostro gruppo di studio
Se ritenete utile e interessante questo progetto potete contribuire al suo sviluppo e alla sua continuazione condividendo questo canale con chi pensate che possa essere interessato a fare questo percorso insieme a noi e imparare a creare siti web a partire da zero.
V'invito anche a valutare la possibilità di diventare finanziatori di questa spedizione nel mondo del web con un contributo a vostra scelta utilizzando gli strumenti offerti da Cam.TV, per esempio attraverso l'opzione sostieni sotto ai contenuti oppure nella pagina del canale.
Approfitto dell'occasione per ringraziare di cuore tutte le persone che hanno già contribuito!
Vi ringrazio per il tempo che avete passato con me e vi auguro un iper-buona vita online e offline!
E non dimentichiamoci che condividendo si impara!!
Linkoteca
Sito di FreeCodeCamp (il nostro quaderno degli esercizi)
Invito a "Siamo Iper!": il nostro canale Telegram per le chat vocali di gruppo
Lo scopo e la filosofia di Iper
Come si colloca ciò che impariamo nel più vasto mondo del web
Il browser va all'asilo. Che cos'è un linguaggio di markup
Il browser va a teatro: la struttura di base di una pagina web
Qualche strumento per trasformare il canale in un gruppo di studio interattivo
Esercizi pratici: le basi dell'HTML
HTML 5 e la struttura logica delle pagine web
HTML: impariamo ad aggiungere un'immagine a una pagina web
Facciamo insieme qualche esercizio su FreeCodeCamp (attenzione! spoiler soluzioni!)
Come funzionano i link: le ancore che ci collegano al web
HTML: come inserire delle liste nelle nostre pagine web
Quaderno degli esercizi HTML: link liste e inserimento dati
HTML: i tipi di visualizzazione predefiniti degli elementi
HTML: esercizi pratici con soluzioni (spoiler alert!!!)
Il protocollo HTTP: il browser va all'osteria
Introduzione ai formulari web
Input: un elemento fondamentale dei formulari web
Formulario web: costruiamo alcuni campi di input utente
Web form: terminiamo la carrellata degli elementi principali
Trattiamo con rispetto i dati dei nostri utenti
Mettiamo in partica i formulari
Tls: ricevere dati dai nostri utenti in maniera sicura