[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]


223. Introduzione ai problemi legati alla crittografia e alla firma elettronica

La comunicazione meccanica (elettronica) pone dei problemi legati alla riservatezza e alla facilità con cui questa può essere contraffatta. Per fare un esempio, un messaggio di posta elettronica può essere intercettato facilmente da parte di chiunque abbia un accesso privilegiato ai nodi di rete attraverso cui transita, e nello stesso modo può essere manomesso, anche senza lasciare tracce apparenti.

Per risolvere questi problemi si possono usare dei metodi di cifratura dei dati, e per evitare contraffazioni si possono usare delle firme elettroniche (o firme digitali). Questo capitolo cerca di spiegare i concetti essenziali inerenti a queste procedure.

223.1 Crittografia

La crittografia è una tecnica attraverso la quale si rendono illeggibili i dati originali, permettendo al destinatario di recuperarli attraverso un procedimento noto solo a lui. Si distinguono due forme fondamentali: la crittografia simmetrica, ovvero, a chiave segreta, e quella asimmetrica, nota meglio come crittografia a chiave pubblica.

La crittografia simmetrica è quella più semplice da comprendere, e si basa su un algoritmo che modifica i dati in base a una chiave (di solito una stringa di qualche tipo), che permette il ripristino dei dati originali soltanto conoscendo la stessa chiave usata per la cifratura. Per utilizzare una cifratura simmetrica, due persone si devono accordare sull'algoritmo da utilizzare e sulla chiave. La forza, o la debolezza di questo sistema, si basa sulla difficoltà o meno che ci può essere nell'indovinare la chiave, tenendo conto anche della possibilità elaborative di cui può disporre chi intende spiare la comunicazione.

+-----------+     cifratura       +-----------+    decifratura     +-----------+
| Documento |                     | "%&&%//() |                    | Documento |
| bla bla   |                     | =9(ui&$%! |                    | bla bla   |
| bla bla   |-----> chiave  ----->| @#$£"!=)8 |-----> chiave ----->| bla bla   |
| ...       |     simmetrica      | ...       |     simmetrica     | ...       |
| ...       |                     | ...       |                    | ...       |
+-----------+                     +-----------+                    +-----------+

Figura 223.1: Crittografia simmetrica.

La crittografia a chiave pubblica è un metodo molto più complesso, che però ha il vantaggio di essere più pratico quando riguarda la comunicazione con molte persone. Il principio di funzionamento si basa sul fatto che esistono due chiavi complementari, e un algoritmo in grado di cifrare con una chiave e di decifrare utilizzando l'altra. In pratica, la cifratura avviene a senso unico attraverso la chiave di cui dispone il mittente di un messaggio, mentre questo può essere decifrato solo con l'altra che possiede solo il destinatario. Le due chiavi vengono chiamate chiave pubblica e chiave privata, attribuendogli implicitamente un ruolo specifico. In pratica, chi vuole mettere in condizioni i propri interlocutori di inviare dei messaggi, o altri dati cifrati, che poi possano essere decifrati solo da lui o da lei, dovrà costruire una propria coppia di chiavi, e dovrà distribuire la chiave pubblica. Chi vuole inviare informazioni cifrate a questa persona, può usare la chiave pubblica diffusa dal destinatario, e solo chi ha la chiave complementare, ovvero la chiave privata, può decifrarle. In questa situazione, evidentemente, la chiave privata deve rimanere segreta a tutti, tranne che al suo proprietario; se venisse trafugata permetterebbe di decifrare i messaggi che potrebbero essere intercettati.

Per questa ragione, il proprietario di una coppia di chiavi asimmetriche deve essere la stessa persona che se le crea.

+-----------+     cifratura       +-----------+    decifratura     +-----------+
| Documento |                     | "%&&%//() |                    | Documento |
| bla bla   |                     | =9(ui&$%! |                    | bla bla   |
| bla bla   |-----> chiave  ----->| @#$£"!=)8 |-----> chiave ----->| bla bla   |
| ...       |      pubblica       | ...       |       privata      | ...       |
| ...       |                     | ...       |                    | ...       |
+-----------+                     +-----------+                    +-----------+

Figura 223.2: Crittografia a chiave pubblica.

La cifratura può anche essere ibrida, utilizzando in pratica entrambe le tecniche. Per attuarla, di solito si utilizza prima la cifratura simmetrica, utilizzando una chiave determinata in modo casuale ogni volta, e per questo definita chiave di sessione; questa chiave viene allegata al messaggio, o ai dati trasmessi, e viene cifrata a sua volta (eventualmente assieme agli stessi dati già cifrati) attraverso il sistema della chiave pubblica, ovvero quello che si basa sulla coppia di chiavi complementari. Il destinatario di questi dati dovrà fare il percorso inverso, decifrando il documento con la sua chiave privata, e quindi decifrandolo nuovamente utilizzando la chiave di sessione che ha ottenuto dopo il primo passaggio.

223.2 Firma elettronica, o firma digitale

La firma elettronica ha lo scopo di certificare l'autenticità dei dati. Per ottenere questo risultato occorre garantire che l'origine di questi sia autentica, e che i dati non siano stati alterati.

Per dimostrare che un documento elettronico non è stato alterato, si utilizza la tecnica del codice di controllo, che in pratica è un numero (o una stringa), che si determina in qualche modo in base al contenuto del documento stesso. L'algoritmo che genera questo codice di controllo è tanto più buono quanto è minore la probabilità che due documenti diversi generino lo stesso codice di controllo. Questo valore è una sorta di «riassunto» matematico del documento elettronico originale, e può essere fornito a parte, attraverso un canale ritenuto sicuro, per permettere al destinatario di verificare che il documento è giunto intatto, attraverso il ricalcolo del codice di controllo che deve risultare identico. *1*

La firma elettronica richiede qualcosa in più: si deve poter dimostrare che l'origine è autentica, e che il codice di controllo non è stato alterato. Evidentemente, per non creare un circolo vizioso, serve qualcosa in più. Per questo si utilizza di solito la cifratura del codice di controllo assieme ai dati, oppure solo del codice di controllo, lasciando i dati in chiaro. Per la precisione, si utilizza la tecnica delle chiavi complementari, ma in questo caso, le cose funzionano in modo inverso, perché chi esegue la firma, deve usare la sua chiave privata (quella segreta), in maniera tale che tutti gli altri possano decifrare il codice di controllo attraverso la chiave pubblica.

Naturalmente, una firma elettronica di questo tipo può essere verificata solo se si può essere certi che la chiave pubblica attribuita al mittente che ha firmato il documento, appartenga effettivamente a quella persona. In altre parole, un impostore potrebbe diffondere una chiave pubblica corrispondente a una chiave privata di sua proprietà, indicandola come la chiave del signor Tizio, e così potrebbe inviare documenti falsi a nome di questo signor Tizio, che in realtà non ne è il responsabile.

+-----------+                                         +-----------+
| Documento |                                         | Documento |
| ...       |                                         | ...       |
| ...       |---------\                      /------->| ...       |
| ...       |         |                      |        | ...       |
+-----------+         |                      |        +-----------+
      |               |                      |           |
      |               |                      |           |
      V               |                      |           V
+-----------+         |                      |    +-----------+    +-----------+
| Codice di |         |                      |    | Codice di |    | Codice di |
| controllo |         |  Invio attraverso    |    | controllo | == | controllo |
+-----------+         >------/////////------>|    | calcolato |    | decifrato |
      |               |      la rete         |    +-----------+    +-----------+
      V               |                      |                           ^
Chiave privata        |                      |                           |
      |               |                      |                   Chiave pubblica
      V               |                      |                           |
+-----------+         |                      |        +-----------+      |
| Codice di |         |                      |        | Codice di |      |
| controllo |---------/                      \------->| controllo |------/
| cifrato   |                                         | cifrato   |
+-----------+                                         +-----------+

Figura 223.3: Principio di funzionamento della firma elettronica applicata a un documento trasmesso in chiaro.

223.3 Gestione delle chiavi, certificazione e fiducia

I sistemi crittografici a chiave pubblica richiedono attenzione nell'uso di queste chiavi, in particolare è importante la gestione corretta delle chiavi pubbliche appartenenti ai propri corrispondenti. Queste chiavi sono conservate all'interno di «portachiavi», di solito distinti a seconda che si tratti di chiavi private o di chiavi pubbliche. Infatti, la chiave privata deve rimanere segreta, e va difesa in ogni modo, mentre le chiavi pubbliche non richiedono questa attenzione. I portachiavi in questione sono normalmente dei file, gestiti in modo più o meno automatico dai programmi che si utilizzano per queste cose.

A parte il problema di custodire gelosamente la propria chiave privata, bisogna considerare la necessità di verificare che le chiavi pubbliche appartengano effettivamente alle persone a cui sembrano essere attribuite, e si intuisce che il modo migliore per questo è quello di ottenere personalmente da loro le rispettive chiavi pubbliche.

Per semplificare un po' le cose, si introduce la possibilità di controfirmare le chiavi pubbliche che si ritiene siano di provenienza certa; questa firma ha il valore di una certificazione, che conta in funzione della credibilità di chi la dà. Le chiavi pubbliche firmate, portano con sé l'informazione di chi le ha firmate, e la verifica della firma si può fare solo possedendo la chiave pubblica di questa persona. In pratica, questo meccanismo permette di creare una rete di fiducia, attraverso la diffusione di chiavi pubbliche firmate da altre persone: chi è sicuro della nostra chiave pubblica, e si fida di noi, può decidere di fidarsi delle altre chiavi pubbliche firmate da noi.

Una chiave pubblica contiene anche le informazioni che servono ad attribuirla al suo proprietario; di solito si tratta del nome e cognome, assieme a un indirizzo di posta elettronica. Per garantire che questi dati allegati non siano stati alterati, l'autore stesso delle sue chiavi può firmare la sua chiave pubblica. Ciò serve a garantire che quella chiave pubblica è collegata correttamente a quei dati personali, anche se non può garantire che sia stata creata effettivamente da quella persona.

+-----------------------+
| +-------------------+ |
| | Chiave pubblica   | |       +-----------+
| | di Tizio          |-------->| Codice di |-----> Sono ------> Sì, allora
| | + informazioni di | |       | controllo |      uguali?       è da ritenere
| |   identificazione | |       +-----------+        ^           che la chiave
| +-------------------+ |                            |           pubblica
| +-------------------+ |     chiave        +-----------+        appartenga
| | firma di Caio     |-----> pubblica ---->| Codice di |        effettivamente
| +-------------------+ |     di Caio       | controllo |        a Tizio
| +-------------------+ |                   | decifrato |
| | firma di ...      | |                   +-----------+
| +-------------------+ |
+-----------------------+
      Certificato

Figura 223.4: Verifica di un certificato, ovvero di una chiave pubblica controfirmata.

Quando l'uso dei sistemi crittografici a chiave pubblica diventa una pratica regolata attraverso le leggi, soprattutto per ciò che riguarda la firma elettronica, diventa indispensabile l'istituzione di un'autorità in grado di garantire e verificare l'autenticità delle chiavi pubbliche di ognuno. Nello stesso modo, in mancanza di una tale istituzione, quando queste tecniche vengono usate per scopi professionali, diventa necessario affidarsi alla certificazione fatta da aziende specializzate in questo settore, che hanno la credibilità necessaria. Tecnicamente si parla di autorità di certificazione, e nella documentazione tecnica inglese si fa riferimento all'acronimo «CA»: Certificate Authority.

È l'autorità di certificazione che stabilisce quali siano i dati di identificazione che devono accompagnare la chiave nel certificato che si vuole ottenere.

Anche in presenza di un'autorità di certificazione delle chiavi, la coppia di chiavi asimmetriche dovrebbe essere creata esclusivamente dal suo titolare (il suo proprietario), che solo così potrebbe essere effettivamente l'unico responsabile della segretezza della sua chiave privata.

Tornando alle situazioni pratiche, la verifica di una chiave pubblica può essere semplificata attraverso l'uso di un'impronta digitale. Si tratta di un altro codice di controllo calcolato su una chiave pubblica, che ha la proprietà di essere ragionevolmente breve, e quindi può essere scambiato anche su un foglio di carta. Quando due persone vogliono scambiarsi le chiavi pubbliche personalmente, al posto di farlo realmente, possono limitarsi a scambiarsi l'impronta digitale della chiave, in modo da poter poi verificare che la chiave pubblica avuta attraverso i canali normali corrisponde effettivamente a quella giusta.

+----------+                 canale                  +----------+
|  Chiave  |----------------////////---------------->|  Chiave  |
| pubblica |               non sicuro                | pubblica |
+----------+                                         +----------+
     |                                                    |
     |                                                    |
     |                                                    V
     |                                               +----------+
     |                                               | Impronta |
     |                                               | digitale |
     |                                               +----------+
     |
     |                                               sono uguali?
     V
+----------+                 canale                  +----------+
| Impronta |----------------////////---------------->| Impronta |
| digitale |                 sicuro                  | digitale |
+----------+                                         +----------+

Figura 223.5: Impronta digitale della chiave pubblica.

223.3.1 Difesa della chiave privata

Data l'importanza che ha la segretezza della chiave privata, è normale che i sistemi crittografici prevedano la protezione di questa informazione attraverso una password. In generale, è lasciata la facoltà di lasciare la chiave privata in chiaro, o di cifrarla attraverso una stringa, la password, che in questo contesto particolare è conosciuta meglio come passphrase. L'utilizzo di una chiave privata cifrata si traduce in pratica nella necessità, ogni volta che serve, di inserire il testo utilizzato per cifrarla.

L'utilizzo di chiavi private protette in questo modo, è indispensabile in un sistema multiutente, in cui l'amministratore di turno può avere accesso a tutto quello che vuole nel filesystem; dall'altra parte, in questo modo si riduce il pericolo che qualcun altro possa usare una chiave privata trafugata.

223.3.2 Certificati: scadenza e revoca

Dovrebbe essere chiaro, ormai, che il file contenente la chiave pubblica e i dati identificativi del suo titolare, assieme a una o più firme di certificazione, è un certificato.

Come nei certificati normali, quando le informazioni che vengono attestate in questo modo non sono definitive per loro natura (si pensi all'indirizzo di posta elettronica che può cambiare anche molto spesso), è importante prevedere una scadenza, tra i dati che compongono il certificato stesso. Oltre a questo, ci deve essere la possibilità di revocare un certificato prima della sua scadenza normale: sia per la possibilità che i dati relativi siano cambiati, sia per premunirsi in caso di furto della chiave privata. La revoca di un certificato si ottiene attraverso un certificato di revoca.

A seconda del sistema crittografico che si utilizza, il certificato di revoca può essere predisposto dalla stessa persona che si costruisce le chiavi, oppure può essere compito dell'autorità di certificazione che si occupa di rilasciare i certificati. Il problema verrà ripreso più avanti, nei prossimi capitoli.

223.4 Cosa può succedere se...

È il caso di soffermarsi sul significato pratico di alcune cose che possono succedere, in modo da capire meglio l'importanza di alcuni aspetti che riguardano la crittografia a chiave pubblica.

Se si perde la chiave privata, non si possono più decifrare i messaggi che i nostri interlocutori ci mandano dopo averli cifrati con la nostra chiave pubblica; inoltre non si possono decifrare più nemmeno quelli che abbiamo ricevuto in passato.

Se qualcuno ci ruba una copia della chiave privata, questa persona può leggere i messaggi cifrati che ci sono diretti, e può sostituirsi a noi in generale; può anche firmare a nome nostro.

L'unica cosa che si può fare quando si perde la chiave privata, o si sospetta che qualcuno sia riuscito a ottenerne una copia, è la diffusione del certificato di revoca.

Se si utilizza una chiave pubblica senza averla verificata, si rischia di far recapitare il messaggio o i dati a una persona diversa da quella che si intende veramente. Infatti, un estraneo potrebbe intercettare sistematicamente le comunicazioni della persona a cui noi vogliamo scrivere o inviare altri dati. In questo modo, questo estraneo riceverebbe dei messaggi che può decifrare con la sua chiave privata, e poi provvederebbe a cifrarli nuovamente nel modo giusto per inviarli al destinatario reale, in modo che nessuno si accorga dell'intercettazione.

223.5 Servizi per la diffusione delle chiavi pubbliche

Ci possono essere molti modi di diffondere la propria chiave pubblica, oppure quella di altri, dopo che questa è stata controfirmata. Il metodo standard dovrebbe consistere nell'utilizzo di un servente specifico per questo. Normalmente, questi serventi di chiavi (key-server o cert-server) sono collegati tra loro in modo da aggiornarsi a vicenda. Il servizio si limita ad accumulare le chiavi pubbliche che vengono inviate, senza certificare implicitamente la genuinità di queste. Per prelevare una chiave pubblica occorre conoscere il numero di identificazione di questa (si tratta di un numero attribuito automaticamente dal programma che crea la coppia di chiavi), e questa informazione può essere ottenuta dalla stessa persona con la quale vogliamo comunicare in modo cifrato, magari perché l'aggiunge sistematicamente in coda ai suoi messaggi di posta elettronica.

Per accedere a questi serventi di chiavi non si usano i protocolli normali, e occorre affidarsi direttamente agli strumenti di gestione della crittografia e delle firme. Il servente a cui si fa riferimento di solito è `certserver.pgp.com', comunque non è necessario servirsi proprio di questo. Tenendo conto che di solito i nomi dei nodi che offrono questo tipo di servizio corrispondono a un modello del tipo `*.pgp.net', oppure `*.pgp.com', e simili, si potrebbe utilizzare il comando seguente per conoscerli:

host -l pgp.net

223.6 Problemi legali

L'utilizzo di sistemi di comunicazione cifrata potrebbe essere regolato dalle leggi dei paesi coinvolti. Il problema è che bisogna verificare le norme del paese di origine di una trasmissione del genere e anche quelle del paese di destinazione. Per quanto riguarda l'Italia, la cosa non è chiara, e quello che oggi sembra libero potrebbe essere configurabile domani come un reato molto grave.

Questo serve per ricordare che si tratta di una materia delicata, e anche se si ritiene di poter utilizzare la crittografia in Italia, bisogna pensarci bene prima di inviare messaggi cifrati all'estero, o di usare altre forme di comunicazione cifrate. Il problema si può porre anche nell'ambito della stessa Unione Europea.

223.7 Riferimenti

---------------------------

Appunti Linux 2000.04.12 --- Copyright © 1997-2000 Daniele Giacomini --  daniele @ pluto.linux.it


1.) Nella terminologia normale che riguarda i sistemi di cifratura dei messaggi, questo codice di controllo è conosciuto come «hash».


[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]