Informatica per script kiddies 12 – I formati per lo scambio dei dati

Eccoci un po’ in ritardo con Informatica per script kiddies, il dodicesimo numero! Qualche settimana fa, un bell’articolo del Post mi ha fatto venire voglia di parlare di questo argomento che è molto parte del mio lavoro, e che purtroppo non è chiarissimo non solo a molti che all’informatica ci si avvicinano, ma anche a tantissimi che si trovano a dirigere, più o meno direttamente, branche Information technology di aziende.

Non sono un data analyst, e mi piacerebbe il parere di chi si occupa di dati per lavoro. Mi occupo però – e molto – della produzione, della gestione e della comunicazione di discrete moli di dati, soprattutto in ambito pubblico (ma non solo), e mi ritrovo purtroppo molto spesso a discutere con persone che – in perfetta buona fede – non hanno la più pallida idea di come funzionino queste cose. Da oggi posso linkargli questo articolo, grazie alla pigrizia propria di noi informatici: fare le cose bene una volta per non farle mai più. Vale per gli algoritmi, vale per gli spiegoni.

(altro…)

Informatica per script kiddies 11 – Le comunicazioni sicure

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:

  1. Firmare un messaggio con la propria chiave privata
  2. Cifrare un messaggio con la chiave pubblica di qualcuno
  3. Decifrare, usando la propria chiave privata, un messaggio cifrato con la propria chiave pubblica
  4. 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.

Informatica per script kiddies 10 – I sistemi operativi

Eccoci al nostro appuntamento mensile con Informatica per script kiddies!

Oggi parliamo dei sistemi operativi, quei software che utilizziamo tutti i giorni e delle cui funzioni, nonostante questo, tendiamo ad avere un’idea un po’ fumosa.

I sistemi operativi infatti, nonostante siano dei programmi a tutti gli effetti, vivono in quel limbo che sembra sempre un po’ essere a metà tra hardware e software, e non sentiamo quasi mai di starlo direttamente utilizzando.

(altro…)

Informatica per script kiddies 9 – I linguaggi di programmazione, una panoramica

È il terzo mercoledì del mese, ed eccoci con Informatica per script kiddies!

Oggi proviamo a dire qualche parola di orientamento sulle caratteristiche dei linguaggi di programmazione, ovvero delle lingue che utilizziamo per spiegare al computer cosa fare.

(altro…)

Informatica per script kiddies 8 – Containers, cosa e perché

Oggi Informatica per script kiddies ospita finalmente un articolo di u/Sudneo invece che del solito u/LBreda. Siamo sempre alla ricerca di collaboratori, scrivete pure a LBreda se volete dare una mano! Trovate qui tutti gli articoli della rubrica.

L’argomento di oggi è qualcosa che da un paio di anni a questa parte è sulla bocca di tutti: i containers. C’è chi ne ha sentito parlare riguardo Docker, chi magari ha sentito parlare di Kubernetes, Podman o chissà cos’altro. Tutto si basa però su dei concetti che generali, che tenteremo di trattare in quanto tali.

(altro…)

Informatica per script kiddies 7 – Che succede quando andiamo su un sito

Eccoci di nuovo qui! Trovate qui tutti gli articoli della rubrica.

Oggi, invece, parliamo un po’ di come è fatto il web. Le cose possono ovviamente essere molto più semplici o molto più complesse di come le mostrerò qui, ma cercherò di dare un buon inizio per capire meglio come funzioni tutto l’accrocco, che non è sempre troppo chiaro.

Il web infatti nasce con un’idea molto semplice: dare a ogni risorsa un indirizzo composto dall’indirizzo del computer su cui risiede e dall’indirizzo della risorsa specifica. Digiti l’indirizzo in un browser (o clicchi su un link), e ottieni la risorsa. Le cose si sono però rapidamente fatte più complicate, principalmente perché i volumi di richieste sono diventati rapidamente molto grandi. Ma vediamo un po’ come funziona tutto.

(altro…)

Informatica per script kiddies 6 – Arduino, Raspberry Pi e quelle cose

Eccoci di nuovo la nostra rubrica mensile preferita. Ci siamo spostati sul blog di ItalyInformatica, dove prossimamente metterò in copia gli altri articoli per avere tutto insieme. Trovate qui tutti gli articoli della rubrica.

Oggi parliamo di cose che molti percepiscono come “schede piccole con cui fare cose strane”, e nemmeno a torto, ma che vengono di solito chiamati col nome piú tecnico di “sistemi embeded”.

(altro…)

Informatica per script kiddies 5 – Il contact tracing

Eccoci di nuovo con questa rubrica mensile. Trovate qui tutti gli articoli della rubrica.

Oggi voglio parlare un po’ dei sistemi di contact tracing. Ne parlerò dal punto di vista prettamente tecnico, perché siamo pur sempre su /r/ItalyInformatica (se volete, qualcosina la scrissi a suo tempo su /r/italy).

(altro…)

Informatica per script kiddies 4 – Linux

Di nuovo il terzo mercoledí, ed eccoci qui a parlare di informatica a chi ci si avvicina baldanzosamente. Trovate qui tutti gli articoli della rubrica.

Oggi si parla di Linux. Per chi già ne sa: è un argomento con altissima probabilità di guerra a colpi di lanciafiamme, quindi vi chiedo di fare un bel respiro prima di andare avanti e cercare di fare commenti il piú costruttivi possibile. Non stiamo qui a presentare la lunghezza del nostro stack sistemistico, ma a far capire qualcosa a chi si avvicina a questo mondo.

(altro…)

Informatica e COVID-19

Comprensibilmente, il tema di questi giorni su /r/ItalyInformatica è stato soprattutto il SARS-CoV-2, che sta costringendo tutti noi a casa. Fortunatamente, il virus non impatta direttamente sulle nostre professioni, che si possono spessissimo svolgere da casa senza troppo rischio di ammalarci di COVID, e quindi moltissimi di noi si sono dati da fare nel grande sforzo che si sta facendo per mitigare, e risolvere il prima possibile, questa crisi.

(altro…)