Passa ai contenuti principali

Tecniche di crittografia

Il termine “crittografia significa letteralmente "scrittura nascosta" (dal greco κρυπτóς, nascosto, e γραφία, scrittura). La crittografia tratta, difatti, dei metodi per rendere un messaggio cifrato ovvero incomprensibile alle persone non autorizzate a leggerlo.
D'altra parte, le situazioni nelle quali si rende necessario criptare un documento sono molte: custodire documenti, eseguire transazioni riservate fra persone e/o macchine, tutelare la privacy nelle comunicazioni, etc. Spesso, anzi, in molte circostanze ci si trova ad utilizzare la crittografia senza esserne pienamente consapevoli.
Questo articolo si propone di illustrare, attraverso un linguaggio semplice, i principi della crittografia, le tecniche più comunemente adottate - si parlerà, in particolare, di crittografia simmetrica ed asimmetrica, di firma digitale e di certificati digitali - e lo strumento che anche Linux mette in merito a disposizione: OpenSSL.


Cenni storici

La storia della crittografia è antica quanto l'uomo. Solo a titolo d'esempio, si attribuisce a Caio Giulio Cesare uno dei primi cifrari

Il cifrario di Cesare è uno dei più antichi algoritmi crittografici di cui si abbia traccia storica. Si tratta di un cifrario a sostituzione monoalfabetica in cui, cioè, ogni lettera del testo in chiaro è sostituita nel testo cifrato dalla lettera che si trova un certo numero di posizioni a seguire nell'alfabeto. Questi tipi di cifrari sono detti anche a sostituzione o a scorrimento a causa del loro modo di operare: la sostituzione avviene lettera per lettera, scorrendo il testo dall'inizio alla fine. Si tramanda, in particolare, che Cesare utilizzasse uno spostamento di 3 posizioni, secondo il seguente schema:

Testo in chiaro ABCDEFG…
------------------------------------
Testo cifrato DEFGHIK…

Risale, invece, al XVI secolo il celebre metodo di Vigenère.

Il metodo di Vigenère si può considerare una generalizzazione del cifrario di Cesare: invece di spostare sempre dello stesso numero di posti la lettera da cifrare, questa viene spostata di un numero di posti variabile. Detto numero viene determinato, come spiegato di seguito, in base ad una parola chiave, detta “verme”, da ripetersi per tutta la lunghezza del testo in chiaro, come nel seguente esempio:

Testo in chiaro: RAPPORTOIMMEDIATO
Verme: VERMEVERMEVERMEVE
-----------------------------
Testo cifrato: MEGBSMXFUQHIUUEOS

Il testo cifrato si ottiene spostando la lettera in chiaro di un numero di caratteri, pari al numero ordinale (A=0, B=1, C=2, ...) della lettera corrispondente del verme, rispettando la regola della somma circolare secondo cui, dopo l'ultima lettera dell'alfabeto, la Z, viene nuovamente la A (es: A+C=0+2=2=C; B+C=1+2=3=D; Z+C=25+2=27->1=B; Z+Z=25+25=50->24=Y).

Il sistema di Vigenère fu impropriamente ritenuto “assolutamente sicuro” nei tre secoli successivi alla sua invenzione. Successivamente, nel 1918, Gilbert Vernam (maggiore dell'Esercito USA e tecnico presso l'AT&T Bell) perfezionò il metodo di Vigenère proponendo l'idea di usare chiavi segrete casuali lunghe almeno quanto il messaggio e non riutilizzabili. Venne poi dimostrato (Claude Shannon - La teoria della comunicazione nei sistemi crittografici, 1949) che quello di Vernan è l'unico metodo crittografico che sia possibile considerare assolutamente sicuro.

Il cifrario di Vernam è, appunto, un sistema crittografico basato sul cifrario di Vigenère, al quale si aggiunge il requisito di una chiave unica - non un verme ripetuto - lunga quanto il testo e non riutilizzabile.

É esplicativo un impiego del cifrario di Vernan nell'ambito delle telecomunicazioni: dato un messaggio binario lungo n bit, è sufficiente scegliere una delle 2n chiavi di lunghezza n bit (non ancora utilizzata) e l'algoritmo di codifica di tipo XOR (ovvero, la somma circolare binaria) per ottenere un messaggio cifrato assolutamente sicuro.

Si può facilmente comprendere la scomodità di distribuire - peraltro in modo sicuro - chiavi lunghe quanto l'intero testo del messaggio, quando lo stesso messaggio è di non piccole dimensioni. Ciò nonostante, si ha notizia dell'uso del cifrario di Vernam durante la prima guerra mondiale da parte dei servizi segreti: gli agenti venivano equipaggiati di taccuini contenenti una lunga chiave per ogni pagina, da poter strappare e gettare una volta utilizzata. Di qui il nome di OTP, acronimo per l'inglese One Time Pad, letteralmente blocco monouso. Il cifrario di Vernam è stato utilizzato anche per la protezione delle comunicazioni via telefono rosso tra Washington e Mosca durante la guerra fredda. Infine, il cifrario trovato nel 1967 sul corpo di Che Guevara è ancora un'applicazione del cifrario di Vernam.

Tuttavia, anche ipotizzando di voler far uso dell'insuperabile protezione del cifrario di Vernam, restano comunque aperti importanti problemi di ordine pratico nel soddisfare i stringenti requisiti. Parte della ricerca crittografica attuale è, perciò, dedicata all'individuazione di metodi che, pur rinunciando a parte della sicurezza offerta dal sistema di Vernam, possano, in compenso, risultare più praticabili mediante l'uso di chiavi corte e riutilizzabili. D'altra parte, in alcune circostanze, un sistema può considerarsi comunque “sicuro” - anche se il suo metodo di cifratura risulta effettivamente violabile – a patto che i tempi per scardinare il sistema siano sufficientemente alti e le probabilità di riuscita basse.



La crittografia simmetrica

L'idea di cifrare un documento attraverso una chiave segreta ed un algoritmo è stata l'unica fino a poco tempo fa e va comunemente sotto il nome di crittografia simmetrica. Il termine “simmetrico” sta a sottolineare che la chiave è lo strumento indispensabile sia a cifrare, sia a de-cifrare il testo; questo in contrapposizione a quanto avviene nella crittografia asimmetrica di cui si parlerà a breve.
Esistono, ad oggi, molti algoritmi di crittografia simmetrica, alcuni più robusti, altri meno, ma, dal momento che gli algoritmi sono noti (o, come è più corretto dire, pubblici), la forza della crittografia simmetrica risiede interamente nella segretezza della chiave, nella grandezza dello spazio delle chiavi, nella scelta di una “buona” chiave e nella resistenza dell'algoritmo usato agli attacchi di crittonalisi.
Il pregio principale della crittografia simmetrica risiede nel fatto che i suoi algoritmi sono computazionalmente molto veloci, specialmente se messi a confronto con quelli della crittografia asimmetrica. Per questo motivo, la crittografia simmetrica viene spesso preferita in operazioni di cifratura che richiedono determinate performance in termini di velocità.
D'altra parte, il principale problema della crittografia simmetrica, nelle comunicazioni, è legato alla necessità di condividere la chiave di cifratura, la qual cosa evidentemente espone l'intero procedimento ad elevati rischi per la sicurezza.


Crittografia simmetrica con OpenSSL

Per dare concretezza al discorso, verrà ora mostrato come sia possibile utilizzare la crittografia simmetrica in Linux. Allo scopo verrà utilizzata la suite di librerie e programmi crittografici OpenSSL, normalmente preinstallata, comunque disponibile, in quasi tutte le distribuzioni Linux.
In generale OpenSSL risponde alla seguente sintassi:

openssl comando [opzioni_comando] [argomenti_comando]

in particolare, per crittografare simmetricamente un documento con OpenSSL, si usa il comando enc come mostrato di seguito:

openssl enc – algoritmo -in file_input -out file_output

dove l'algoritmo è uno fra quelli elencati mediante l'istruzione:

openssl list-cipher-commands


Fra gli algoritmi più robusti, sono bf (blow-fish) e des3 (triple DES).
Solo dopo aver scelto e confermato una password, verrà generato il file cifrato in output (aprendolo, ci si renderà conto che è assolutamente illegibile).
Viceversa, per decriptare un documento precedentemente cifrato, il comando enc andrà completato con l' opzione d come illustrato di seguito:

openssl enc -d – algoritmo -in file_criptato -out file_in_chiaro


Se, poi, si desidera semplicemente mostrare a video il file in chiaro, questa è l'istruzione:

openssl enc -d – algoritmo -in file_criptato


In entrambi i casi verrà richiesta l'immissione della stessa password già utilizzata per la cifratura.

É, tuttavia, necessaria una precisazione. Si potrebbe, difatti, ritenere che la password sia la chiave di cifratura, ma questo non è vero. Difatti, la chiave di cifratura viene generata run-time sulla base dell'algoritmo scelto e della password fornita dall'utente: si tratta di un codice binario di lunghezza variabile a seconda dell'algoritmo adottato (es. 128 bit con l'algoritmo Blow-Fish; 192 bit con Triple DES). Per visualizzare una possibile chiave di cifratura, a fronte di un algoritmo e di una password, basta eseguire:

openssl enc -P -algoritmo


In realtà, oltre alla chiave (key), verranno visualizzati, in formato esadecimale, altri due codici: il vettore di inizializzazione (iv, anch'esso generato sul momento ed utilizzato dall'algoritmo di cifratura) e il sale (salt, parametro casuale, che consente la creazione di chiavi, per l'appunto, casuali). Ovviamente, è possibile criptare un documento mediante OpenSSL anche imponendo uno o più dei precedenti parametri.



La crittografia asimmetrica

La crittografia asimmetrica nasce con l'intento di risolvere il problema, lasciato aperto dalla crittografia simmetrica, della necessità di distribuire, assieme al messaggio, la chiave per decifrare il messaggio stesso.
La novità introdotta dalla crittografia asimmetrica è semplice e rivoluzionaria al tempo stesso. Si fonda sull'idea che debbano esistere due chiavi per ogni attore coinvolto nella comunicazione: una chiave, disponibile a tutti, per cifrare i messaggi e l'altra, assolutamente riservata, per decifrarli.
Il principio è descritto in modo efficace dall'immagine seguente:

se B vuole ricevere un messaggio riservato da A, B manda a A una scatola vuota dotata di lucchetto aperto e privo di chiavi; A mette nella scatola il messaggio, chiude la scatola col lucchetto, e reinvia il tutto a B. B, unico possessore delle chiavi in grado di aprire il lucchetto, sarà anche l'unico a poter ora leggere il messaggio;

Si noti come chiunque veda passare la scatola, non può approfittarne, o perché sprovvisto delle chiavi per aprirla, o perchè la scatola è vuota.
La crittografia asimmetrica, anche nota come crittografia a coppia di chiavi, o crittografia a chiave pubblica/privata o semplicemente crittografia a chiave pubblica, è un tipo di crittografia dove, come si evince dal nome, ad ogni attore coinvolto nella comunicazione è associata una coppia di chiavi:

  • la chiave pubblica, che deve essere distribuita e serve a cifrare un documento destinato alla persona che possiede la relativa chiave privata.
  • la chiave privata, personale e segreta, utilizzata per decodificare un documento cifrato con la chiave pubblica;

Nell'esempio precedente in cui A spedisce un documento cifrato a B, sia A sia B posseggono una propria chiave privata e la chiave pubblica dell'altro: A dovrà cifrare il documento con la chiave pubblica di B e ad inviarlo a B; B sarà l'unico a poter decodificare il documento ricevuto con la sua chiave privata (in altri termini, a chiunque è consentito cifrare messaggi con la mia chiave pubblica, ma solo io sono in grado di aprire detti messaggi; come conseguenza, se qualcuno vuole inviarmi messaggi riservati, deve farlo cifrandoli con la mia chiave pubblica: io, d'altra parte, sarò l'unico a poterli leggere attraverso la mia chiave privata, il che mi mette al riparo da qualunque intercettazione).

La coppia di chiavi pubblica/privata, essendo generate attraverso lo stesso algoritmo (tipicamente RSA o DSA, a partire da numeri casuali) sono intimamente legate. Tuttavia, gli algoritmi asimmetrici sono concepiti in modo tale che la conoscenza della chiave pubblica e/o dell'algoritmo non siano sufficienti per risalire alla chiave privata: tale meccanismo è reso possibile grazie all'uso di funzioni unidirezionali. In realtà, in molti casi, l'impossibilità di risalire dalla chiave pubblica alla chiave privata non è dimostrata matematicamente, ma risulta dal limitato stato attuale delle conoscenze e della potenza di calcolo disponibile.

Per fare un esempio, si rifletta sul fatto che è sufficiente un piccolo computer e qualche millesimo di secondo per moltiplicare due numeri primi da 150 cifre, ma occorre il lavoro di decine di migliaia di computer per circa un anno per risalire ai fattori primi di quel numero. É questo il principio su cui si fonda, ad esempio, uno dei più diffusi algoritmi di crittografia asimmetrica: RSA (dal nome dei suoi tre ideatori Rivest, Shamir e Adleman).

Ogni utilizzatore, quindi, crea la propria coppia di chiavi. La chiave privata viene tenuta segreta e non viene mai rivelata a nessuno; viceversa, la chiave pubblica viene diffusa in vari modi: può essere, ad esempio, aggiunta automaticamente in coda al proprio messaggio, o può essere depositata in archivi pubblici (key server) a disposizione di chi desideri utilizzarla. È importante che la chiave pubblica sia liberamente accessibile, perché chiunque voglia comunicare con la persona che l'ha generata dovrà preventivamente munirsi di questa, e con questa cifrare il messaggio.

Riprendendo l'esempio precedente, si immagini che A debba spedire un messaggio riservato a B. Verranno svolti i seguenti passi:
  • B sceglie due numeri primi molto grandi, ad esempio 300 cifre, e li moltiplica (impiegando meno di un secondo).
  • B invia il numero che ha ottenuto ad A. Chiunque può vedere questo numero. Il numero è, difatti, la chiave pubblica.
  • A usa la chiave pubblica per cifrare il messaggio.
  • A manda il messaggio cifrato a B: chiunque può vederlo, ma non decifrarlo.
  • B riceve il messaggio e utilizzando i due fattori primi, che solo lui conosce, ovvero la sua chiave privata, lo decifra.
A e B impiegano pochi secondi a cifrare e decifrare, ma chiunque intercettasse le loro comunicazioni impiegherebbe troppo tempo per scoprire i due fattori primi con cui decifrare il messaggio.

Nonostante gli indiscussi vantaggi, la crittografia asimmetrica lascia aperti una serie di problemi.
Difatti, la crittografia asimmetrica incontra un forte limite nel fatto che, spesso, i relativi algoritmi di decodifica sono relativamente lenti, soprattutto se messi a confronto con quelli della crittografia simmetrica. Nella pratica, difatti, la crittografia simmetrica risulta più semplice e veloce di quella asimmetrica, anche se, come visto, necessita che innanzitutto venga condivisa la chiave in modo sicuro. Una soluzione che consente di beneficiare contemporaneamente della sicurezza della crittografia asimmetrica e della praticità della crittografia simmetrica prevede di usare la crittografia asimmetrica per scambiare, in maniera sicura, la chiave con la quale, poi, si procederà alla comunicazione con crittografia simmetrica. Questo, è, ad esempio, quanto accade nei protocolli di rete crittografici quali SSL/TLS e Ipsec.
Altro importante limite è legato all'affidabilità della comunicazione: chi garantisce che quello con cui sto scambiando chiavi ed informazioni sia proprio colui con cui desidero interagire e non un impostore? Il problema è noto col titolo di man in the middle, come spiegato nell'esempio seguente:

Si supponga che Alice voglia comunicare con Bob, e che Giacomo voglia spiare la conversazione, e se possibile consegnare a Bob dei falsi messaggi. Per iniziare, Alice deve chiedere a Bob la sua chiave pubblica. Se Bob invia la sua chiave pubblica ad Alice, ma Giacomo è in grado di intercettarla, può iniziare un attacco man in the middle. Giacomo può semplicemente inviare ad Alice una chiave pubblica della quale possiede la corrispondente chiave privata. Alice poi, credendo che questa sia la chiave pubblica di Bob, cifra i suoi messaggi con la chiave di Giacomo ed invia i suoi messaggi cifrati a Bob. Giacomo quindi li intercetta, li decifra, ne tiene una copia per sè, e li re-cifra (dopo averli alterati se lo desidera) usando la chiave pubblica che Bob aveva originariamente inviato ad Alice. Quando Bob riceverà il messaggio cifrato, crederà che questo provenga direttamente da Alice. Un simile attacco è possibile, in teoria, verso qualsiasi messaggio inviato usando tecnologia a chiave pubblica, compresi pacchetti di dati trasportati su reti di computer.

In altri termini, non si può aver garanzia assoluta del fatto che la chiave pubblica (ad esempio una chiave presente sul key server) appartenga davvero alla persona nominata nell'intestazione della chiave stessa. Il problema, come sarà chiaro a breve, apre la strada ai certificati elettronici ed alle PKI.


Crittografia asimmetrica con OpenSSL

Verrà ora mostrato come sia possibile utilizzare la crittografia asimmetrica con Linux. Ci si servirà ancora di OpenSSL e dell'algoritmo di cifratura RSA.
Come prima cosa, sarà necessario generare una chiave privata ed una chiave pubblica. Il comando

openssl genrsa -out nome_file numero_bit


crea la chiave privata della lunghezza specificata da numero_bit (se omesso, la lunghezza di default è pari a 512 bit). La chiave pubblica (sorpresa!...) è contenuta all'interno di quella privata ed è facilmente ricavabile mediante l'istruzione seguente (il parametro pubout indica che il file prodotto in output contiene la chiave pubblica):

openssl rsa -in file_input -out file_out -pubout


Si crei adesso un file, sia msg.txt, contenete un testo qualsiasi e si provi a cifrarlo con la chiave pubblica appena generata, come mostrato di seguito (il parametro pubin sta ad indicare che la chiave passata è pubblica).

openssl rsautl -in msg.txt -out file_output -inkey file_chiave -pubin -encrypt


Infine, simulando di essere il destinatario del messaggio cifrato, decifrarlo con la chiave privata mediante il comando:

openssl rsautl -in file_input -inkey file_chiave -decrypt


In alternativa, volendo solo visualizzare a video il contenuto del messaggio, digitare

openssl rsautl -in file_input -inkey file_chiave -decrypt




La firma digitale

Un altro ambito in cui la crittografia (asimmetrica) si dimostra particolarmente utile è quello della firma digitale. In questo caso, non è tanto il contenuto del documento a dover essere tutelato, quanto l'autenticità e l'integrità dello stesso. La firma digitale di un documento elettronico, difatti, si propone di soddisfare i tre seguenti requisiti:

  • Autenticità: il destinatario potrà verificare l'identità del mittente;
  • Non ripudio: il mittente non potrà disconoscere un documento da lui firmato;
  • Integrità: sarà sempre possibile verificare se il documento è stato modificato nel trasporto.

In altri termini, la firma digitale svolge, nei confronti dei documenti elettronici, lo stesso ruolo che la firma autografa riveste nei confronti dei documenti tradizionali.

Per comprendere il meccanismo che sta alla base della firma digitale, è però prima necessario introdurre gli algoritmi di hash.
Dal punto di vista teorico con Hash (dall'inglese sminuzzare, ingarbugliare) si intende la famiglia di algoritmi che soddisfa i seguenti requisiti:
  • un algoritmo di hash riceve in input un flusso di bit di qualsiasi dimensione e restituisce in output una stringa (composta di numeri e lettere) di dimensione fissa.
  • la stringa prodotta da un algoritmo di hash è univoca, ovvero ad input uguali corrispondono output uguali e non esistono due input distinti in grado di produrre lo stesso output.
  • un algoritmo di hash non è invertibile, ossia non è possibile ricostruire il documento originale a partire dalla stringa che viene restituita in output, ovvero la funzione implementata è unidirezionale.

Nella pratica, un algoritmo di hash, a fronte di un documento elettronico di dimensione variabile, produce un codice di dimensioni fissa (tipicamente 128 o 160 bit) che identifica univocamente il documento stesso. Il codice prodotto da un algoritmo di hash viene anche detto impronta digitale del documento, o message digest, ad indicare qualcosa di piccolo, ma, allo stesso tempo, univocamente rappresentativo del documento stesso come, appunto, un'impronta digitale.

Tornando, ora, alla firma digitale, si supponga che A voglia spedire un proprio documento a B: come già detto, si dovrà poter dare evidenza del fatto che il documento è stato prodotto esattamente da A (e non da altri) e che arrivi a B non modificato. Assunto come ipotesi che, esattamente come nella crittografia asimmetrica, A e B dispongano ciascuno della propria chiave privata e della chiave pubblica dell'altro, il procedimento si può riassumere nei seguenti passi:
  1. Dopo aver redatto il documento, A ne calcola l'impronta digitale mediante un algoritmo di hash.
  2. A, usando la sua chiave privata, cifra l'impronta digitale appena ricavata. Il risultato di tale operazione è la firma digitale del documento. La firma viene allegata al documento (eventualmente assieme alla chiave pubblica di A) ed il tutto viene inviato a B.
  3. B, una volta ricevuto il documento, decodifica la firma digitale attraverso la chiave pubblica di A, ottenendo quindi l'impronta digitale del documento.
  4. B applica, ora, la stessa funzione di hash al documento e verifica che l'impronta digitale ottenuta sia la stessa di quella ricevuta: solamente se c'è coincidenza fra le impronte, B potrà essere sicuro che il documento non è stato modificato (viceversa non coinciderebbero le impronte) e che il mittente è esattamente A (viceversa, attraverso la chiave pubblica di A, B avrebbe ottenuto un'altra impronta digitale).


Usare la firma digitale con OpenSSL

Per avere evidenza del funzionamento di un algoritmo di hash, si prenda un qualunque documento, possibilmente di grandi dimensioni, sia document1, e si esegua la seguente istruzione (SHA sta per Secure Hash Algorithm)

openssl sha1 document1


Si otterrà qualcosa del tipo

SHA1(document1)= a000757d3e917f73345a076573c37b907e34e3df

che è la “piccola” impronta digitale di document1. Si provi ora a modificare, anche minimamente, document1 (potrebbe trattarsi del cambio di una lettera, di un numero o semplicemente di un segno di interpunzione) e si provi a calcolare nuovamente l'impronta digitale. Si rimarrà stupiti nel constatare che, per quanto minima possa essere stata la modifica apportata al documento originale, l'impronta digitale risulterà ora completamente differente, anche se ancora della medesima lunghezza.

Passando ora ad esaminare nella pratica la firma digitale, si generino (vd. crittografia asimmetrica) attraverso RSA le due chiavi privata e pubblica, siano private_key.txt e public_key.txt.
Per ottenere la firma digitale di document1 nel file document1_signature, è sufficiente la seguente istruzione

openssl dgst -sha1 -sign private_key.txt -out document1_signature documento1


Il file document1_signature prodotto risulterà, ovviamente, illegibile.

Il destinatario di document1, per verificarne l'autenticità, dovrà viceversa eseguire:

openssl dgst -sha1 -verify public_key.txt -signature document1_signature document1


Se tutto è andato a buon fine, riceverà il messaggio

Verified OK

a conferma del fatto che il messaggio è autentico ed integro; viceversa, il destinatario verrà avvertito da un messaggio d'errore.



Infrastrutture a chiave pubblica (PKI)

Parlando di crittografia asimmetrica, si è visto (man in the middle) che uno dei principali problemi è legato alla verifica dell'autenticità delle chiavi pubbliche. In altri termini, come garantire che una certa chiave pubblica, disponibile ad esempio su qualche key server, sia effettivamente dell'ente, sito o persona al quale dichiara di appartenere? Evidentemente, senza questa sicurezza iniziale, non è possibile assicurare la riservatezza della comunicazione. La questione, in alcuni contesti, diviene della massima importanza ed attualità: si pensi, ad esempio, ad una transazione bancaria via web.


Bene, esattamente come avviene in altri ambiti della vita quotidiana, per garantire la corrispondenza fra chiavi pubbliche e persone (o enti o siti o sistemi) sono stati costituiti nel mondo appositi enti certificatori o Certification Authority (CA). Così, chiunque abbia necessità di esibire l'autenticità della propria chiave pubblica, potrà rivolgersi ad una delle suddette CA. La CA, a sua volta, solo dopo aver condotto scrupolosi controlli (comunque dietro compenso) potrà certificare la suddetta corrispondenza tramite l'emissione di un certificato digitale. Questa soluzione al problema del riconoscimento affidabile delle chiavi altrui prende il nome di Public Key Infrastructure (PKI).


Un certificato digitale è, in particolare, un file - firmato digitalmente da una Certification Authority - che contiene una collezione di informazioni (secondo lo standard ITU-U X.509):
  • identità della persona o del sistema (a seconda che si tratti di certificato di persona o certificato server ): nome e codice fiscale del proprietario della chiave, identificativo del sito o del servizio, organizzazione, etc,
  • ente certificatore: la CA che ha rilasciato il certificato,
  • periodo di validità: un certificato ha, difatti, validità limitata nel tempo,
  • chiave pubblica: da utilizzare per cifrare i documenti da inviare.

In realtà, spesso senza rendercene conto, tutti facciamo esperienza dei certificati digitali durante la navigazione in internet. Questo avviene comunemente quando ci colleghiamo ad un sito in modalità sicura, ad esempio attraverso il protocollo https. In questi casi, difatti, il nostro browser, prima di iniziare lo scambio di dati col server, verifica di essere in possesso del relativo certificato e, solo se la verifica restituisce esito positivo, procede alla transazione, altrimenti, interrompe la comunicazione e chiede autorizzazione a procedere. A riprova di quanto detto, scorrendo le impostazioni di un qualunque browser, si troverà, fra le altre, la lista dei certificati già registrati e delle relative authority certificatrici.

É legittima, a questo punto, una domanda: chi certifica gli enti certificatori? La risposta non è univoca dal momento che un ente certificatore può autocertificarsi o può essere, a sua volta, certificato da altro CA. Sta di fatto che, se l'authority B viene certificata dall'authority A, tutti i certificati di B vengono ritenuti validi come se fossero stati certificati direttamente da A ed il certificato prodotto riporterà al proprio interno l'intera catena degli enti certificatori.


Verifica di certificati con OpenSSL

Ancora una volta si utilizzerà OpenSSL, questa volta per verificare un certificato digitale.
Si esegua, quindi, l'istruzione

openssl s_client -connect www.google.com:443


per collegarsi alla home page di Google, tramite protocollo HTTPS, via OpenSSL. Si otterrà, fra gli altri, un messaggio del tipo:

verify error:num=20:unable to get local issuer certificate

che sta indicare la mancanza di un certificato a garanzia della sicurezza della connessione.

Si punti, adesso, allo stesso indirizzo, ma col proprio browser: la comunicazione, questa volta, avviene senza particolari problemi dal momento che il browser contiene al proprio interno il certificato già citato. Supponendo di utilizzare un browser come firefox (procedure analoghe valgono per altri tipi browser), si faccia click nella zona azzurra sulla barra degli indirizzi: un pop-up avverte che si sta utilizzando una connessione criptata; si segua quindi more information... → SecurityView CertificateDetailsExport... e si salvi in locale copia dello stesso certificato.

Tornando nuovamente ad OpenSSL, si esegua questa volta

openssl s_client -connect www.google.com:443 -CAfile file_certificato


Si noterà che la transazione va ora a buon fine.


Commenti

Post popolari in questo blog

Introduzione alle reti 3 - Switch tecnologies

In questa sezione verranno esaminate le Virtual LAN, prima espressione della tecnologia LAN Switching.    Virtual Local Area Network (VLAN) Come già detto, uno dei punti di forza di uno switch risiede nella possibilità di creare sotto-reti a basso costo. Le VLAN ( Virtual Local Area Network ) , in particolare,  rappresentano la risposta a quelle situazioni nelle quali, pur non disponendo di grandi risorse, si renda comunque necessario tener distinti due o più ambiti della stessa rete, o, come è usuale dire, suddividere in più parti un dominio di broadcast.  L'esempio tipico è quello di una (piccola) impresa che abbia necessità di tener separati sulla rete i propri device in base alle attività produttive. La rete potrebbe allora pensarsi composta di tante VLAN quante sono le attività aziendali, ciascuna VLAN potendo contenere al proprio interno l'hw destinato ad ogni specifica attività. Dal punto di vista sistemistico, una  VLAN  è costituita da un sottoinsiem

Switch Commands - istruzioni Cisco HP Extreme "in a nutshell"

Indirizzamento IP

Obiettivo di questo articolo, senza pretesa di esaurire l'argomento, è quello di presentare in modo chiaro e comprensibile un argomento alle volte ostico: l'indirizzamento IP.  Questo, fra l'altro, consentirà di affrontare, anche agli utenti meno esperti, operazioni semplici quali   la configurazione di una scheda di rete con maggiore consapevolezza. Gli indirizzi IP Come noto, con IP  ci si riferisce ad uno dei protocolli di comunicazione di rete più affermati nel mondo delle telecomunicazioni:  Internet Protocol .   Un indirizzo IP è, in particolare, un codice binario che identifica univocamente un dispositivo di rete (una scheda ethernet, la porta di uno switch o di un router, etc.) all'interno di una rete di computer.  Di primaria importanza, nell'ambito dell'indirizzamento, è la lunghezza degli indirizzi, ovvero il numero di bit utilizzati per rappresentare un indirizzo di rete. Questo, evidentemente, perché con n bit sarà possibile ind