TAGS CLOUD
Incrementa dimensioniDecrementa dimensioni
Sicurezza prima di tutto. Difenditi con OpenSSL
La guida definitiva all’uso del più potente sistema di cifratura che ti permette di tenere sempre al sicuro i dati e comunicare senza la paura di essere spiati
(pagina 3 di 4)


TranSport Layer Security
Il protocollo SSL si evolve ancora
Possiamo definire TLS l’evoluzione di SSL, anche questo, infatti, utilizza un sistema di cifratura per creare connessioni sicure via rete. Le differenze con il predecessore sono poche e il concetto di base rimane uguale. In pratica, anche lo scopo di questo protocollo è quello di evitare che vi siano possibilità di instaurare una comunicazione non sicura e che i dati possano essere letti da altri all’infuori del client e del server che operano la transazione.
Cosa si può fare con openSSL
L’utility openssl, che fa parte del pacchetto, è una semplice interfaccia alla libreria stessa che, tramite riga di comando, permette di fare moltissime cose interessanti, come la creazione di chiavi RSA, DH o DSA, la creazione di certificati X.509 o CSR o CRL, il calcolo di un digest di un messaggio, la cifratura o decifratura di file utilizzando uno dei vari cipher, il test di comunicazione client server utilizzando il protocollo SSL o TLS e non ultima la gestione di e-mail firmate o cifrate. Alcuni dei nomi o delle sigle appena citate sono molto comuni a tutti gli utilizzatori di sistemi GNU/Linux e di Internet, visto che tutti le avranno sentite almeno una volta, ma nel caso in cui vi siano alcuni dubbi si può consultare il box specifico.

OpenSSL è presente tra i software di default

Tutte le informazioni relative alla versione


Quanti comandi!
Il comando openssl permette, quindi, di gestire una notevole quantità di operazioni di cifratura, alcune delle quali molto complesse, pertanto è facile supporre che metta a disposizione una grande quantità di comandi all’utente. Esistono diversi modi per poter conoscere l’elenco completo di tutti i comandi e delle loro relativi sintassi; il primo posto dove guardare è sicuramente la pagina del manuale relativo, ottenibile eseguendo man openssl, ma è anche possibile ottenere informazioni specifiche direttamente da linea di comando. Ad esempio digitando gli pseudo-comandi (ovvero i comandi che seguono il nome dell’applicativo stesso) list-standard-commands o list-message-digest-commands e list-cipher-commands si avrà in output una lista (con ogni comando per singola riga) contenente i nomi di tutti i comandi specifici relativi alla sezione indicata (comandi, digest e cipher) che sono presenti nella versione OpenSSL installata. Per una lettura semplificata può anche essere ridirezionato l’output su di un file di testo:
openssl list-standard-commands > elenco_comandi
È importante comprendere che non tutte le versioni installate sulle varie distro conterranno tutti i comandi possibili, visto che la stessa utility può essere liberamente configurata al momento della sua compilazione, anche se, molto probabilmente, le differenze saranno minime. Esiste anche un piccolo trucco, per ottenere più informazioni, non disponendo OpenSSL del tipico comando -help, ed è quello di digitare uno pseudo comando sbagliato, come ad esempio:
openssl aiuto
e poiché il comando di aiuto non verrà interpretato, sarà lo stesso applicativo a fornire un elenco dei comandi corretti.
Come funziona TLS
Dall’algoritmo alle chiavi di cifratura
Il funzionamento di TLS prevede tre passaggi. Per prima cosa il client e il server “negoziano” l’algoritmo (cipher) da usare per la cifratura dei dati. Subito dopo vengono scambiate le chiavi ed eseguita l’autenticazione. Infine, si procede con la cifratura mediante il cipher e la conseguente autenticazione dei dati. È proprio durante la prima fase che vengono scelti tra il client ed il server i cipher impiegati per lo scambio delle chiavi e per la successiva autenticazione.
Tipi di autenticazione
Mutua o server a seconda della situazione
Generalmente, quindi nell’uso quotidiano, la connessione sicura è quella verso un server autenticato, ovvero di cui si è certi della sua identità e dove il client rimane invece ignoto. Il livello superiore è chiamato “mutua autenticazione” e richiede che entrambi i partecipanti siano autenticati e definiti. Generalmente la mutua autenticazione richiede l’uso di chiavi pubbliche che permettano di instaurare questo speciale rapporto.
Un po’ di esempi pratici
Dopo aver visto il nutrito elenco di comandi messi a disposizione dalla suite OpenSSL è arrivato il momento di gettarsi nella pratica, partendo logicamente dagli aspetti più semplici (dal punto di vista dell’utilizzatore) e anche più comuni. Il primo passo è quindi quello di calcolare il digest di un file, una operazione estremamente comune quando ad esempio si scarica un file da Internet e prima di usarlo se ne vuole verificare l’autenticità. I digest più comunemente utilizzati su Internet sono l’MD5 e l’SHA1, sebbene OpenSSL sia in grado di gestirne un numero maggiore (l’elenco dei quali è ottenibile digitando openssl list-message-digest-commands). Per creare un digest MD5 di un file basta eseguire:
openssl dgst -md5 file_da_calcolare
In maniera analoga, per utilizzare altri algoritmi, basta sostituire -md5 con l’opportuno comando. A questo punto non rimane che verificare l’output con quello pubblicato dal creatore del file per essere certi che esso non sia stato modificato e che quindi possa essere usato in totale tranquillità. Il passo successivo consiste nell’utilizzare la potenza di OpenSSL per cifrare e decifrare file o documenti; procedura utilissima per salvaguardare al massimo la propria privacy e per mettere al sicuro i dati sensibili. Gli scenari possibili di utilizzo sono infiniti, dalla cifratura di documenti su chiavi USB e quindi potenzialmente smarribili, alla conservazione su dischi pubblici di dati personali. Qualunque sia il proprio caso, la procedura è facilissima; per prima cosa è necessario scegliere, tra i tanti messi a disposizione, il cipher che si desidera utilizzare (l’elenco completo come detto è ottenibile con lo pseudo comando list-cipher-commands) e digitare:
openssl enc -e -des3 -salt -in file_
da_cifrare.txt -out file_cifrato
Il comando è formattato indicando lo pseudo-comando enc per eseguire la cifratura, seguito dal cipher, che in questo esempio è il des3. Lo switch -salt va sempre attivato (a patto di disporre almeno di una versione di OpenSSL 0.9.5 o superiore) per impiegare delle routine di derivazioni particolari e, infine, gli switch -in e -out servono per indicare il file di ingresso e quello cifrato. Può anche essere una buona norma utilizzare una propria estensione per i file cifrati (ad esempio file_cifrato.des3), in modo da poterli riconoscere più facilmente e per utilizzarli in maniera corretta. Una volta premuto Invio, openssl richiederà, per due volte, di digitare la password con cui cifrare il file (la seconda richiesta è necessaria per verificare che la password sia proprio quella che si desidera impostare) e nel giro di poco tempo (dipende logicamente dalle dimensioni del file) verrà creato il file binario cifrato. Il file binario potrà quindi essere messo ovunque, certi che i dati al suo interno non potranno essere estratti a meno di non conoscerne la password e il cipher. Proprio per questo, è bene non limitarsi a digitare come password il proprio nome o la propria data di nascita ma utilizzare quelle comuni norme di sicurezza che consigliano di usare password mediamente lunghe, contenenti caratteri speciali come @#!$? e numeri; in modo da rendere il più possibile difficile l’eventuale decifratura del file. Per eseguire la riconversione del file da cifrato a normale sarà sufficiente ricordarsi della password e del cipher utilizzato e sostituire lo switch -e (per cifrare) con -d:
openssl enc -d -des3 -salt -in file_cifrato
-out file_decifrato.txt
Nel caso in cui si voglia spedire il file via e-mail è necessario invece formattarlo in modo ben specifico ovvero utilizzando la modalità base64 specificata con lo switch -a; quindi, ad esempio per cifrare un file utilizzando il Blowfish in base 64 basta digitare:
openssl bf -a -salt -in file_da_cifrare.txt
-file_cifrato.bf
L’estensione qui indicata per il file cifrato ci permette di ricordare più facilmente il tipo di cipher impiegato (Blowfish) anche se, per la massima sicurezza, sarebbe opportuno evitare di dare informazioni preziose al potenziale decriptatore abusivo. Un passo ulteriore può essere quello di creare archivi di intere directory integralmente cifrati in modo da poterli registrare su CD/DVD senza aver più paura di smarrirli. Il modo più semplice è quello di utilizzare il comando tar (usato per la creazione di archivi, anche compressi) e di far elaborare il tutto da OpenSSL in maniera automatica, appoggiandosi infine al comando dd per la creazione del file finale. Più difficile a dirsi che a farsi:
tar -zcvf – cartella_da_cifrare |openssl
des3 -salt -k parola_chiave | dd of=cartella.des
Il comando openssl è molto simile a quelli già visti in precedenza, con solo in più lo switch -k per passare direttamente la password da impiegare, procedura necessaria perché l’archivio verrà creato in automatico e quindi non in modalità interattiva. La decompressione avviene di conseguenza digitando:
dd if=cartella.des |openssl des3 -d -k
parola_chiave|tar zxf -
Da non dimenticare, in entrambi i casi, il segno – (meno) al fondo del comando tar che gli indica di comprimere e ecomprimere tutto ciò che gli verrà passato.

L’elenco dei comandi di OpenSSL

Cifratura e decifratura di un file

Il test di velocità dei vari algoritmi


Aggiornamenti delicati
Rendono OpenSSL ancora più sicuro
Vista l’importanza strategica della cifratura, sia che si operi su file locali e maggiormente nel caso in cui la si utilizzi per stabilire connessioni protette via Internet, è bene sempre tenere aggiornata la propria versione di OpenSSL. Per cui attenzione ad utilizzare bene i programmi di aggiornamento rilasciati con la propria distro ed essere sempre pronti ad utilizzare ogni patch di sicurezza.
Uno sguardo alle prestazioni
Quando si devono cifrare grandi archivi, ci si rende conto che il tempo impiegato può allungarsi rispetto alla pura e semplice creazione dell’archivio stesso. La cosa è più che logica, visto che tutti i dati debbono essere processati da OpenSSL prima di finire su disco; ma il fatto meno noto è che non tutti gli algoritmi di cifratura sono ugualmente veloci. Allora cosa bisogna fare per scoprire qual è quello più adatto da utilizzare ? Fortunatamente esiste un apposito pseudo comando che provvede a calcolare la velocità dei singoli cipher e quindi, in base alle prestazioni della propria macchina, scegliere quello più opportuno. Per eseguire l’algoritmo per il calcolo della velocità basta eseguire il comando riportato di seguito, senza argomenti aggiuntivi:
openssl speed
Una volta premuto Invio, openssl provvederà a testare tutti i motori disponibili rendendo quindi possibile scoprire quali siano i più veloci e quali invece vadano scartati quando si lavora su grandi archivi. L’analisi che viene compiuta e che impiegherà un po’ di tempo, provvede a cifrare dati, utilizzando singolarmente i vari algoritmi, per un ben determinato periodo di tempo (che è di 3 secondi). Il risultato sarà il numero di volte in cui la cifratura avrà avuto successo in quel lasso di tempo. Quindi maggiore sarà il numero, più veloce sarà l’algoritmo. Il software mostrerà interattivamente i risultati specificando algoritmo usato, tempo e dimensioni del blocco su cui opera e i risultati vengono elencati sulla singola linea. Alla fine, verrà presentato un chiaro report con l’elenco completo e le singole prestazioni con cui poter attentamente valutare la scelta. Infine, una volta scelto un algoritmo è anche possibile verificarne le prestazioni (magari su di un altro computer e senza testarli nuovamente tutti) indicandolo dopo lo pseudo comando speed, ad esempio:
openssl speed md5
Testare un web Server https
Attraverso lo pseudo comando s_client si possono direttamente stabilire connessioni a server sicuri attraverso l’uso del protocollo SSL, una funzione ideale per quando si sta installando un server SSL e lo si vuole provare in maniera estensiva, ma anche molto interessante per imparare alcune cose sulla gestione della sicurezza dei sistemi. Per prima cosa bisogna stabilire la connessione eseguendo il comando riportato di seguito:
openssl s_client -connect nome_del_server:443
Dopo i due punti viene indicata la porta che in questo caso è la 443, ovvero quella che viene utilizzata quando il browser interpreta il protocollo https. Una volta premuto Invio, se la connessione avrà successo, dopo aver visto l’elenco dei certificati e varie altre informazioni si potrà agire manualmente e scaricare le pagine web digitando semplicemente il comando GET /.

Con l’interfaccia TinyCA tutto è più facile

Gli aggiornamenti sono indispensabili


Gestire i certificati graficamente
La creazione e la gestione dei certificati può essere un po’ ostica se si decide di operare solamente da riga di comando, ma per fortuna, come sempre, la comunità Open Source provvede a porre rimedio. Esiste infatti una pratica e semplice interfaccia grafica, chiamata TinyCA (http:// freshmeat.net/projects/tinyca) che permette di gestire una piccola authority per amministrare certificati (una small CA per usare il termine inglese). TinyCa è scritto in linguaggio Perl con le estensioni Gtk ed è anche lui presente in molte distribuzioni; attraverso questo software, che agisce proprio come front-end verso OpenSSL, è possibile gestire certificati x509 ed esportarli in formato PEM o DER solo ed esclusivamente utilizzando l’interfaccia grafica. Questi ultimi sono due tra i più comuni formati per archiviare i certificati, il primo, PEM (Privacy Enhanced Mail) mentre il secondo, DER, è l’acronimo di Definite Encoding Rules. Senza entrare nel merito della creazione dei certificati, che è di per se una procedura abbastanza complessa, è importante sapere che con questa utility è possibile rendere il processo molto più rapido e facile e creare così certificati utilizzabili su piattaforme Apache, Postfix, OpenLDAP, Cyrus, FreeS/WAN, OpenVPN, OpenSWAN FreeRadius, senza contare l’impiego degli stessi anche con Netscape e Konqueror.
Uso della cifratura
Ecco cosa dice la legge a questo proposito
Alcuni algoritmi potrebbero essere coperti da brevetti e logicamente la responsabilità del loro uso improprio ricade sull’utilizzatore, quindi, prima di impiegarli è bene verificare che essi non siano coperti da alcun tipo di brevetto nel proprio paese o quali siano le regole per poterli utilizzare. Sul sito di OpenSSL (www.openssl.org) vi sono disponibili informazioni su questo argomento, compreso un elenco di alcuni algoritmi coperti da brevetti con i link ai relativi proprietari. Inoltre, il sito spiega anche alcuni importanti aspetti legali relativi all’uso della cifratura e del suo impiego nei singoli paesi per potersi muovere nella più completa legalità.
I termini di openSSL
Per capire meglio questo sistema di cifratura
Cipher: il metodo con cui viene cifrato un testo. Digest: la rappresentazione di un testo sotto forma di una sola linea di numeri creata utilizzando una funzione chiamata one-way hash. Hash: indica un numero generato da una funzione di hash; tale valore può essere solo generato, cioè non è possibile risalire da esso al contenuto del file da cui è stato creato. Poiché tale numero cambia radicalmente anche con una piccola modifica del file originale è praticamente impossibile cambiare il file originale mantenendo inalterato il digest. MD5: (Message Digest algorithm 5) è uno degli hash a 128bit più usati per la cifratura. Il risultato è un numero formato da 32 caratteri esadecimali (numeri da 0 a 9 e lettere da A a F). SHA: con Secure Hash Algorithm si indicano 5 funzioni di cifratura; anche in questo caso servono per calcolare un numero fisso partendo da un input specifico come, ad esempio, un file. Gli algoritmi sono noti con le sigle SHA-1, SHA-224, SHA-256, SHA-384, e SHA-512. La lunghezza del digest è di 160bits per SHA1, mentre per gli altri è indicata dal numero che segue la funzione. RSA: uno dei primi algoritmi per la cifratura a chiave pubblica. X.509: nella cifratura o meglio nella crittografia questa sigla rappresenta uno standard per le infrastrutture di chiavi pubbliche o PKI (Public Key Infrastructure). Questa specifica indica il formato dei certificati e il percorso dell’algoritmo necessario alla validazione del certificato stesso. Certificato pubblico: il public key o anche identity certificate (certificato di identità) è un documento che contiene una firma digitale che viene legata in modo univoco con una identità che specifica il nome di una persona o di una organizzazione, l’indirizzo e altre informazioni univoche. Viene usato per verificare che una chiave pubblica corrisponda ad uno specifico utente.PKI: è un sistema che lega chiavi pubbliche con le identità attraverso un certificato creato da una autorità specifica (CA). CA: è l’autorità per i certificati, un ente che gestisce i certificati digitali per essere utilizzati da terze parti.
Pagina 3/4
Lascia un commento
Tag: openssl, guida, sicurezza dati, Secure Socket Layer, TLS
Condividi