Questo mese un Informatica per script kiddies un po’ più nello spirito dei primi, che viene dritto da dubbi che ho visto in giro di recente.
Parliamo in termini molto generali di come avviene una comunicazione sicura, e di cosa significhi “sicura”, con qualche riferimento ai sistemi tutti italiani di comunicazione certificata che sono molto utili in questo periodo e che, con serie colpe da parte dell’amministrazione pubblica, sono stati compresi pochissimo.
Cosa significa sicure, intanto
Quando si parla di comunicazioni, “sicure” è una parola che riassume tante diverse garanzie, ognuna piú o meno importante a seconda del caso d’uso specifico.
La prima che viene in mente a tutti è la segretezza del messaggio, e infatti spesso per comunicazione sicura si intende soprattutto questo: una comunicazione in cui si garantisce che nessuno sia in grado di leggere il messaggio se non il destinatario finale.
Questa però è una condizione che spesso non è assolutamente interessante. Ad esempio, se il messaggio è un’ordinanza governativa, non vi è alcun bisogno che il messaggio sia segreto, anzi. E questo esempio ci porta a un seconda garanzia che può far parte del concetto di comunicazione sicura: la garanzia del mittente, ovvero la possibilità di poter essere certi che il mittente sia chi dice di essere. Devo essere certo che l’ordinanza governativa venga davvero dal governo e non da, che so, una testata giornalistica di scarsa etica.
La garanzia del mittente di un messaggio non segreto è legata a doppio filo ad un altro dei requisiti di sicurezza, ovvero l’integrità del messaggio: non mi basta sapere che l’ordinanza venga davvero dal governo, ma anche che non sia stata modificata di una virgola.
L’ultimo (spero di non averne tralasciato nessuno, ditemelo, non è un argomento di cui mi occupo molto) aspetto della sicurezza dei messaggi è un po’ scorrelato dagli altri, ed è la garanzia di ricezione, ovvero, per il mittente, la sicurezza che il messaggio venga recapitato.
Ovviamente ognuno di questi aspetti ha le sue soluzioni. Vediamo le principali.
La segretezza
Come più o meno tutti sappiamo, la segretezza si garantisce con la cifratura. La cifratura non è altro che lo scegliere un linguaggio di comunicazione tra mittente e destinatario che sia conosciuto esclusivamente dal mittente e dal destinatario. Nulla più, nulla meno.
Nella storia antica, la cifratura veniva attuata proprio scegliendo un codice di comunicazione segreto. La cosa ha rivelato presto i suoi punti deboli (ho bisogno di un codice diverso per ogni destinatario, cosa molto laboriosa, e con un po’ di lavoro non è difficilissimo decifrare), e si è quindi passati a cose più sofisticate.
Oggi, la cifratura consiste soprattutto nel trasformare il messaggio con un algoritmo che lo incasini molto violentemente e in una maniera studiata per essere difficile da de-incasinare. Un altro algoritmo sarà in grado, preso il messaggio e preso un altro messaggio noto a mittente e destinatario (la “parola chiave”, che può essere qualsiasi messaggio), di de-incasinarlo.
Qualsiasi sistema, digitale o meno, di garanzia della segretezza deve essere associato all’affidabilità del destinatario. Se il destinatario ha interesse a “spifferare” il messaggio, non c’è segretezza che tenga. È quindi molto importante notare che parliamo di segretezza nella comunicazione del messaggio, non di segretezza del messaggio tout court. Un messaggio cifrato è sicuro nel suo percorso dal mittente al destinatario, ma il destinatario può poi farne quel che vuole secondo la regola aurea della sicurezza dei messaggi: se puoi leggerlo, puoi copiarlo.
La garanzia del mittente
Nella storia, la garanzia del mittente è sempre stata data in due principali modi. Il primo è la firma, o un concetto analogo alla firma, come il bollo o il timbro, e il secondo è, dove ha senso, il concetto di fonte ufficiale. Un decreto del governo italiano, ad esempio, sarà firmato e sarà pubblicato dalla Gazzetta Ufficiale, una fonte strutturalmente certa.
Nel mondo informatico, l’equivalente di questi due mezzi è la firma digitale, che ha tendenzialmente entrambe le caratteristiche.
In un sistema di firma digitale, chi produce un messaggio è in possesso di un dato noto solo a lui. Chi deve riceverlo – o solitamente un ente terzo con caratteristiche di affidabilità – è invece in possesso di un dato noto, e associato in maniera garantita al mittente.
Il mittente può passare il suo dato segreto e il messaggio a un algoritmo, che genera una “firma digitale” associata al messaggio. Un altro algoritmo può prendere il messaggio e il dato noto, e dire se il messaggio sia o no stato davvero firmato dal mittente.
La garanzia di integrità
L’integrità di un messaggio è una conseguenza diretta delle due garanzie precedenti. Un messaggio apribile solo dal suo destinatario è presumibile integro per definizione, e un messaggio firmato non sarà verificato se manomesso, dipendendo la sua firma sia dal segreto del mittente che dal messaggio stesso.
In generale, quindi, per garantire l’integrità di un messaggio si utilizza la firma digitale o una tecnologia con quel tipo di funzionamento, spesso anche in associazione alla cifratura del messaggio stesso. Questo è peraltro un enorme vantaggio della firma digitale su quella non digitale, che non dà reali garanzie di mancata manomissione.
La garanzia di ricezione
La garanzia di ricezione nel mondo digitale è esattamente identica a quella presente nel mondo non digitale, ed è data da chi gestisce la comunicazione, ovvero da chi recapita il messaggio. L’unico modo per essere sicuri che il messaggio sia stato recapitato è fidarsi di chi lo ha recapitato. Possono eventualmente essere messe in atto misure per sapere quando sia stato recapitato, come ad esempio la marcatura temporale, un sistema che permette di apporre al messaggio una cosa analoga alla firma ma dipendente anche dal tempo in cui è stata emessa, o per cui un ente terzo non interessato alla vicenda garantisce che sia stata emessa in un certo tempo.
La chiave asimmetrica
Uno strumento milleusi per queste cose è quello che già ho citato per la firma digitale, ovvero la chiave asimmetrica. È un concetto così poco chiaro ai non-informatici e così ubiquo da essere spessissimo citato completamente a sproposito come soluzione a ogni male del mondo mentre in realtà risolve solo i primi tre problemi che tratto qui.
Di che parliamo
In un sistema di comunicazione che funziona a chiavi asimmetriche, a ogni soggetto (mittenti e destinatari) sono associate due chiavi, algoritmicamente legate tra loro, che altro non sono che file. Una delle due chiavi, detta privata, è nota solo al soggetto che la possiede. L’altra chiave, detta pubblica, è nota a tutti i soggetti. Se quindi Paperino, Topolino e Pippo comunicano tra loro usando un sistema a chiavi asimmetriche, ognuno ha la sua chiave privata, e ognuno sa la chiave pubblica degli altri due.
Quattro algoritmi noti a tutti permettono queste quattro operazioni:
- Firmare un messaggio con la propria chiave privata
- Cifrare un messaggio con la chiave pubblica di qualcuno
- Decifrare, usando la propria chiave privata, un messaggio cifrato con la propria chiave pubblica
- Verificare, usando la chiave pubblica di qualcuno, un messaggio firmato con la sua chiave privata
Il problema della chiave pubblica
La chiave pubblica non può semplicemente essere “pubblicata da qualche parte”: bisognerebbe fidarsi della fonte. Non posso essere sicuro che tale chiave pubblica sia davvero la chiave pubblica di Pippo solo perché l’ho trovata su Internet. Le soluzioni a questo problema sono sostanzialmente due: o mi faccio dare direttamente da Pippo, a vista, la sua chiave pubblica, oppure me la faccio dare da qualcuno di cui ci fidiamo entrambi, sia una persona o un ente che si occupa specificamente di questo. Sono entrambi sistemi molto utilizzati.
La chiave asimmetrica per la segretezza
Per inviare messaggi segreti con un sistema a chiave asimmetrica, si utilizzano il secondo e il terzo algoritmo. Se devo mandare a Pippo un messaggio segreto, prenderò la chiave pubblica di Pippo e userò l’algoritmo 2 per cifrare il mio messaggio. Avrò così la garanzia che il messaggio possa essere aperto solo e soltanto da Pippo, perché è l’unico ad avere la chiave per decifrarlo con l’algoritmo 3.
In sostanza, insomma, prendo la scatola col lucchetto aperto datami dal destinatario, ci infilo dentro il messaggio, e chiudo. Il destinatario è l’unico a poter aprire la scatola, perché solo lui ha la chiave.
La chiave asimmetrica per la garanzia del mittente e l’integrità
Per garantire a chi riceve che il destinatario sono io, invece, ho bisogno dell’algoritmo 2, con cui uso la mia chiave privata, di cui solo io sono in possesso, per firmare il mio messaggio. Chiunque lo riceva, usando la mia chiave pubblica e l’algoritmo 4, può avere la garanzia che io sia davvero il mittente e che nessuno abbia manomesso il messaggio. I sistemi di firma digitale “legalmente valida” funzionano praticamente tutti con un sistema di questo genere, generalmente con la chiave pubblica distribuita da un ente che lo fa per lavoro, i cosiddetti enti certificatori.
Combo!
Ovviamente nulla impedisce di fare entrambe le cose: se voglio mandare a Pippo un messaggio che legge solo lui, garantendogli che sono io a mandarlo, posso firmare il messaggio con la mia chiave privata e cifrarlo con la sua chiave pubblica. Lui lo decifrerà con la sua chiave privata, e verificherà con la mia chiave pubblica. Molto figo.
Un caso italiano di percepita comunicazione sicura: la PEC
La Posta Elettronica Certificata (PEC) è una cosa italiana (ma esistono altri standard simili in Europa) molto interessante nel concetto, molto questionabile nell’implementazione e assolutamente pessima in quanto e come è stata spiegata da chi la promuove, ma che nell’immaginario di molti è sinonimo di “comunicazione sicura via email”.
Ebbene, non è così.
La PEC nasce come sostituto elettronico della raccomandata con ricevuta di ritorno, e questo è esattamente il suo compito, non ne ha altri. La raccomandata con ricevuta di ritorno non dà quasi nessuna garanzia di comunicazione sicura: non rende segreto il messaggio, non garantisce che il messaggio sia aperto solo dal destinatario, non garantisce che il messaggio sia davvero inviato dal mittente e non garantisce che il messaggio sia integro. Garantisce solo che il messaggio sia stato inviato (in una certa data) e sia stato consegnato all’indirizzo di destinazione (in una certa data).
Al netto della garanzia di integrità del messaggio (che è offerta anche dalla PEC), la PEC dà esattamente le stesse garanzie, e va quindi usata esattamente allo stesso modo, avendo valore legale solo ciò che da essa è garantito.
Inviare per PEC un documento non firmato (elettronicamente), insomma, equivale a inviare per raccomandata un documento senza firma: zero. Il fatto che sia inviato “dal mio indirizzo” non garantisce in alcun modo che lo abbia inviato io. Allo stesso modo, inviare per PEC un messaggio segreto non cifrato non garantisce che lungo il suo percorso il messaggio non venga letto da nessuno: la PEC, di suo, non cifra.
Insomma, usate la PEC esattamente come usereste una raccomandata: per molti tipi di comunicazione vi serve comunque anche un altro mezzo di comunicazione sicura atto a garantire quello che vi serve: la firma digitale per le cose di cui dovete garantire di essere gli autori, la cifratura per le cose segrete.