Menu Chiudi

Crittografia con OpenSSL in Linux

Crittografia con OpenSSL in linux

La Crittografia con OpenSSL è uno degli strumenti più potenti e moderni per crittografare le informazioni all’interno dei nostri computer. Utilizzarla al meglio può essere molto utile per mantenere le informazioni sensibili inaccessibili a persone non e programmi non autorizzati.

OpenSSL è un potente toolkit di crittografia con il quale si possono criptare file cartelle e qualsiasi testo. Con esso si possono inoltre generare chiavi e certificati per poter condividere informazioni esclusivamente con chi è autorizzato ad accedere a tali informazioni.

In questa sintetica guida, all’interno della sezione dedicata alla Cyber Security, esploreremo alcuni semplici comandi per la crittografia dei dati tramite OpenSSL. Ciò può certamente tornare utile in quelle situazioni che frequentemente si presentano quando si ha la necessità di cifrare informazioni per renderle inaccessibili a persone non autorizzate.

  1. Criptare e decriptare un testo
  2. Criptare e decriptare un file
  3. Criptare e decriptare una directory

In questo tutorial, affronteremo cioè alcune tecniche di come crittografare file e cartelle tramite l’uso delle utility SSL. Di converso, abbiamo reso disponibile un post per la crittografia di interi hard disk, partizioni e dispositivi USB che pensiamo possa essere di interesse generale.

Installazione del toolkit OpenSSL

Il toolkit OpenSSL è tipicamente disponibile nei repository ufficiali delle distribuzioni GNU Linux più utilizzate. Esso contiene una serie di utilità e librerie che forniscono un capillare supporto per vari tipi di protocolli e algoritmi.

Se stai utilizzando il tuo sistema Linux ci sono buone probabilità che il toolkit OpenSSL sia già presente nel tuo sistema, come dipendenza dei suoi pacchetti principali. Tuttavia, se per qualche motivo non è stato installato, puoi procedere alla installazione manuale del pacchetto e di tutte le dipendenze.

Per installare OpenSSL nel tuo sistema Linux, puoi utilizzare i comandi del gestore di pacchetti della distribuzione che stai utilizzando.

Qui di seguito sono riportati i comandi da utilizzare per installare OpenSSL nelle più comuni distribuzioni GNU Linux.

Con Fedora, CentOS, RHEL e derivate

$ sudo dnf install -y openssl

Debian, Ubuntu e derivate

$ sudo apt update && sudo apt install -y openssl

Archlinux

$ sudo pacman -Sy openssl

Comandi OpenSSL

Come utilizzare i comandi OpenSSL in tutte le sue molteplici varianti e sfumature è un argomento che va al di la dello scopo di questo articolo. A tale proposito suggeriamo di utilizzare le Man Pages di OpenSSL con il comando man openssl; oppure accedere online alla pagina man openssl.

Tuttavia, ti potrà essere utile un sintetico help generico di OpenSSL che ti verrà mostrato con il comando openssl help.

Oppure un più dettagliato aiuto; ad esempio, per gli argomenti da utilizzare per la codifica/decodifica, con il comando openssl help enc, di cui riportiamo qui di seguito l’output.

$ openssl help enc
Usage: enc [options]
Valid options are:
 -help               Display this summary
 -list               List ciphers
 -ciphers            Alias for -list
 -in infile          Input file
 -out outfile        Output file
 -pass val           Passphrase source
 -e                  Encrypt
 -d                  Decrypt
 -p                  Print the iv/key
 -P                  Print the iv/key and exit
 -v                  Verbose output
 -nopad              Disable standard block padding
 -salt               Use salt in the KDF (default)
 -nosalt             Do not use salt in the KDF
 -debug              Print debug info
 -a                  Base64 encode/decode, depending on encryption flag
 -base64             Same as option -a
 -A                  Used with -[base64|a] to specify base64 buffer as a single line
 -bufsize val        Buffer size
 -k val              Passphrase
 -kfile infile       Read passphrase from file
 -K val              Raw key, in hex
 -S val              Salt, in hex
 -iv val             IV in hex
 -md val             Use specified digest to create a key from the passphrase
 -iter +int          Specify the iteration count and force use of PBKDF2
 -pbkdf2             Use password-based key derivation function 2
 -none               Don't encrypt
 -*                  Any supported cipher
 -rand val           Load the file(s) into the random number generator
 -writerand outfile  Write random data to the specified file
 -z                  Compress or decompress encrypted data using zlib
 -engine val         Use engine, possibly a hardware device

Se l’installazione del Toolkit è andata a buon fine, possiamo decisamente passare alla parte più succosa di questo articolo per la crittografia con OpenSSL in linux.

Leggi anche:   WireGuard Client: Tunnel criptati con Windows

1. La crittografia con OpenSSL per criptare e decriptare un testo

Iniziamo dal modo più semplice di cifratura di un semplice testo, utilizzando alcuni comandi basilari di Linux, uniti al comando openssl.

Semplice codifica di un testo arbitrario

$ echo "Benvenuto in diprimio.com" | openssl enc -base64
QmVudmVudXRvIGluIGRpcHJpbWlvLmNvbQo=

Notare che la stringa QmVudmVudXRvIGluIGRpcHJpbWlvLmNvbQo=, riportata in uscita dal comando contiene il messaggio cosificato “Benvenuto in diprimio.com”.

Per decodificare la stringa in modo da tornare al contenuto originario non cifrato, è richiesto l’argomento -d per il comando OpenSSL; questo argomento è indispensabile per la codifica inversa (decodifica) della stringa cifrata, come riportato qui di seguito:

$ echo "QmVudmVudXRvIGluIGRpcHJpbWlvLmNvbQo=" | openssl enc -base64 -d
Benvenuto in diprimio.com

Fin qui tutto Ok, ma ti sarai certamente accorto che in realtà i precedenti comandi non applicano una vera e propria cifratura/decodifica, ma una codifica basata su base64; questa in realtà è una semplice codifica per rappresentare dati binari in formato testuale.

Con questo tipo di codifica, chiuque potrebbe decodificare il testo, partendo dalla stringa codificata per arrivare al testo originale. Non a caso abbiamo inizialmente detto che questo era il caso più semplice da illustrare.

Cifratura di un testo con OpenSSL

Aumentiamo ora un minimo la complessità della Crittografia con OpenSSL.

Nei prossimi esempi utilizzeremo un tipo di codifica che richiede una password per il testo da criptare; in questo modo che chiunque venga in possesso della stringa codificata dovrà anche conoscere la password per poterla decodificare.

Per praticità di esempio, la password che useremo sarà pass; tuttavia, nei casi reali, è sempre consigliabile l’uso di password complesse.

$ echo "Benvenuto in diprimio.com" | openssl enc -e -a -aes-256-cbc -iter 1000
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
U2FsdGVkX1829pTf+mben1PKiAXu4YJnFxZKnPrhYQVz+75iQtGKXTDANvTpKoUU

Per decriptare la stringa ottenuta dal comando precedente e verificare il suo contenuto, possiamo usare di nuovo il comando openssl con l’argomento -d ed ottenere il teso originale.

$ echo "U2FsdGVkX1829pTf+mben1PKiAXu4YJnFxZKnPrhYQVz+75iQtGKXTDANvTpKoUU" | openssl enc -aes-256-cbc -d -a -iter 1000
enter aes-256-cbc decryption password:
Benvenuto in diprimio.com

2. La crittografia con OpenSSL per criptare e decriptare file

In questa sezione del nostro viaggio all’interno della crittografia con OpenSSL cercheremo di crittografare il contenuto di alcuni file. Gli esempi riportati in questa sezione potranno essere un valido aiuto nelle attività quotidiane per la protezione di contenuti sensibili all’interno di file.

Leggi anche:   Ufw. Installare ed inizializzare il firewall Debian/Ubuntu

Criptare file con OpenSSL

Criptare e decrittare il contenuto dei file non è pio così diverso dalla cifratura del testo, come abbiamo visto nella sezione precedente.

L’unica differenza sostanziale risiede nel fatto che invece di passare una stringa ad OpenSSL tramite una pipe (la barra verticale |) dopo il comando echo; passeremo il file in input al comando openssl tramite l’argomento -in.

Un rapido esempio chiarirà immediatamente la questione:

$ openssl enc -e -a -aes-256-cbc -iter 1000 -in /etc/services -out services.dat
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:

Nel precedente esempio abbiamo voluto crittografare uno dei file ‘storici’ dei sistemi Unix; il file /etc/services e salvare il contenuto criptato di questo file all’interno di un nuovo file, che abbiamo voluto chiamare services.dat.

Notare l’uso dell’argomento -in utilizzato per informare il comando openssl che il contenuto da criptare si trova all’interno di un file, il cui nome (argomento successivo) è appunto /etc/services.

Notare inoltre l’uso dell’argomento -out utilizzato per informare il comando openssl che il contenuto criptato dovrà essere scritto all’interno di un file il cui nome è services.dat, da creare nella directory corrente.

Al completamento del comando, il nuovo file services.dat appena creato nella directory corrente, conterrà un insieme di dati binari impossibili da rappresentare sullo schermo. Volendo infatti listare il contenuto del file sullo schermo otterremo una serie di caratteri non stampabili.

Decrittare file con OpenSSL

Proviamo ora a decrittare il contenuto del file appena creato e salvare il contenuto in chiaro in un nuovo file services.txt all’interno della directory corrente.

Di seguito il comando di esempio:

$ openssl enc -aes-256-cbc -d -a -iter 1000 -in services.dat > services.txt
enter aes-256-cbc decryption password:

Al completamento del comando noterai il nuovo file services.txt nella directory corrente; esso contiene il risultato della decodifica del file criptato services.dat.

Per puro scrupolo, puoi assicurarti che il file prodotto è identico al file originale /etc/services utilizzando il comando unix diff per analizzare le eventuali differenze.

$ diff /etc/services ./services.txt

Il quale non produrrà alcun risultato, a conferma del fatto che entrambi i file sono identici.

Leggi anche:   Come disabilitare le porte USB in Windows 10

3. La crittografia con OpenSSL per criptare e decriptare directory

La crittografia con OpenSSL può essere utilizzata anche per criptare il contenuto di intere directory, incluse eventuali sotto-directory, ed ovviamente tutti i file in esse contenuti.

Per criptare il contenuto delle cartelle avremo bisogno del comando Unix tar, il quale è in grado di creare in un unico file la struttura ad albero di intere directory.

È necessaria un minimo di dimestichezza con il comando tar e della sintassi del comando; per questo suggeriamo di leggere preventivamente le man pages di tar prima di proseguire.

Nel caso hai bisogno di criptare l’intero contenuto di una directory, puoi continuare ad utilizzare OpenSSL in congiunzione con il comando tar.

Nel successivo esempio vogliamo criptare l’intero contenuto della cartella testopenssl con un unico comando e salvare il contenuto in un nuovo file tar-testopenssl.gz.dat nella directory corrente.

Notare che la directory testopenssl contiene i file degli esempi che abbiamo illustrato fin qui.

$ tar czf - testopenssl/ | openssl enc -e -a -aes-256-cbc -iter 10000 -out tar-testopenssl.gz.dat
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:

Noterai che il comando tar è stato utilizzato in modo da creare un output compresso, che viene inviato ad openssl tramite la pipe.

Quando openssl riceve i dati dalla pipe, provvede a cifrarli come richiesto ed a salvare il contenuto nel file tar-testopenssl.gz.dat nella directory corrente.

Per decrittare il contenuto del file tar-testopenssl.gz.dat, puoi utilizzare il comando seguente:

$ openssl enc -d -a -iter 10000 -aes-256-cbc -in tar-testopenssl.gz.dat -out tar-testopenssl.tar.gz
enter aes-256-cbc decryption password:

Quest’ultimo comando creerà il nuovo file tar-testopenssl.tar.gz il quale contiene in chiaro l’insieme dei file della cartella testopenssl in formato tar compresso.

Per verificare il corretto contenuto in formato tar, puoi utilizzare il semplice comando tar, come illustrato qui di seguito:

$ tar tvf tar-testopenssl.tar.gz
drwxr-xr-x pi/pi           0 2022-06-21 15:12 testopenssl/
-rw-r--r-- pi/pi       12832 2022-06-21 15:03 testopenssl/services.dat
-rw-r--r-- pi/pi       12813 2022-06-21 15:03 testopenssl/services.txt

Che rispecchia fedelmente l’originale contenuto di quella directory.

Conclusioni

Ciò che abbiamo voluto descrivere in questa rapida guida è soltanto una sintetica introduzione all’uso di base della Crittografia con OpenSSL in Linux.

Tuttavia, va considerato che questi pochi semplici comandi possono assumere un’importanza cruciale, nelle situazioni in cui si ha la necessità di rendere inaccessibili le informazioni alle persone non autorizzate.

Vale qui la pena di ricordare che il toolkit OpenSSL è uno strumento potentissimo per la crittografia e per la sicurezza informatica in generale; questo articolo sfrutta le potenzialità di OpenSSL solo per una parte infinitesimale delle sue caratteristiche peculiari. Crediamo sia sufficiente dare una rapida occhiata all’help del comando per rendersene conto e per intuire le enormi capacità di questo strumento.

Internet è un posto migliore, da quando esiste OpenSSL.

Condividi

Disclaimer

Questa pagina potrebbe contenere link di affiliazione. Gli acquisti o gli ordini che effettuerai tramite tali link possono generare commissioni che ci aiutano a sostenere questo sito web.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Moderazione dei commenti attiva. Il tuo commento non apparirà immediatamente.