GNU/Linux >> Linux Esercitazione >  >> Linux

Introduzione agli strumenti di crittografia della riga di comando su Linux

1 Introduzione

La crittografia è il processo di codifica di messaggi o informazioni in modo tale che solo le parti autorizzate possano leggerli. Con quasi nessuna privacy in questa nostra generazione digitale, la crittografia dei nostri dati è uno degli strumenti più richiesti. La maggior parte delle applicazioni come Gmail crittografa i nostri dati, ma i dati sul tuo sistema non sono ancora protetti e ci sono hacker o utenti non autorizzati in attesa di accedervi. Un modo per ridurre al minimo il rischio di furto di dati è crittografare i dati presenti anche sul nostro sistema locale.

Questo tutorial mostra diversi metodi per crittografare i dati sui sistemi Linux utilizzando gli strumenti a riga di comando.

2 Crittografia tramite GPG

2.1 Introduzione a GPG

GPG sta per GNU Private Guard, un'utilità della riga di comando utilizzata per crittografare e decrittografare file o cartelle di dati utilizzando la crittografia a chiave simmetrica o pubblica. GPG è un'alternativa con licenza GPL alla suite di software crittografico PGP. GPG è utilizzato anche dai sistemi compilanti OpenPGP.

2.2 Crittografia tramite chiave simmetrica

Qui ho un file chiamato "test.txt" che crittograferò e quindi decrittograferò con una chiave simmetrica e stamperò il testo decrittografato in un altro file chiamato "output.txt".

Eseguire il comando seguente per crittografare il file test.txt utilizzando una chiave simmetrica. L'opzione "-c" indicava al GPG di utilizzare chiavi simmetriche.

gpg -c test.txt

Il risultato di questo sarà simile all'immagine qui sotto. La prima volta che viene eseguito GPG, viene creata una cartella .gnupg. Contiene i file necessari per il processo di crittografia. Quindi ti chiede di inserire una passphrase due volte. Assicurati di inserire una passphrase sicura e di ricordarla poiché ti servirà in futuro per decrittografare i tuoi file.

Quindi, una volta che la passphrase è stata inserita correttamente, un file chiamato "test.txt.gpg" è creato. Questo è il file crittografato. L'immagine seguente mostra il file prima e dopo la crittografia. Puoi vedere che il testo crittografato è in un formato illeggibile.

Utilizzare il comando seguente per decrittografare il file crittografato

gpg -o output.txt test.txt.gpg

Ti verrà chiesto di inserire la passphrase utilizzata per crittografare. Una volta inserito correttamente, il file "output.txt" verrà creato con lo stesso contenuto di "test.txt". L'output della decrittazione potrebbe essere simile all'immagine seguente:

2.3 Crittografia a chiave pubblica

Qui crittograferemo un set di file utilizzando il meccanismo di crittografia a chiave pubblica/privata di GPG. Implica la creazione di una chiave privata che non dovrebbe mai essere condivisa con nessuno e di una chiave pubblica che deve essere condivisa con le persone che vogliono inviarti dati crittografati.

Innanzitutto, dovremo comprimere i file in una cartella compressa. Qui ho una directory chiamata "enctest" con tre file da test1.txt a test3.txt .Comprimeremo il file tar.gz di questa directory. Userò il seguente comando per creare l'archivio tar.gz compresso:

tar czf files.tar.gz ~/enctest

Questo crea un file "files.tar.gz" . Ora dobbiamo generare la coppia di chiavi pubblica/privata. Esegui il comando seguente per generare la chiave:

gpg --gen-key

Ricorda, questo deve essere fatto solo una volta e qualsiasi numero di file e cartelle può essere crittografato con questa chiave. Dopo aver digitato questo comando, verranno poste varie serie di domande. Le domande saranno:

  • Che tipo di crittografia utilizzare? Ho selezionato 1 che è RSA e RSA.
  • Quale dovrebbe essere la dimensione della chiave? Ho scelto il 2048, puoi scegliere qualsiasi taglia nella gamma 1024 e 4096.
  • Quando dovrebbe scadere la chiave? Ho selezionato 0 , il che significa che la chiave non scade mai. Ma può fornire giorni, settimane o anni se desideri che scada in un determinato momento.

Verranno richieste altre cose come la passphrase, ti verrà chiesto di inserirla due volte. Assicurati di usarne uno forte e di ricordare la passphrase. Verranno utilizzate anche le tue credenziali. Le credenziali che ho usato qui (fornite di seguito) sono solo per il test. Si consiglia di utilizzare le credenziali autentiche come nome, ID e-mail e fornire un commento.

Il contenuto seguente mostra la mia risposta e come sarà l'output:

gpg (GnuPG) 1.4.16; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 2048
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
        = key expires in n days
      w = key expires in n weeks
      m = key expires in n months
      y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <[email protected]>"

Real name: John Doe
Email address: [email protected]
Comment: tis is key generation
You selected this USER-ID:
    "John Doe (tis is key generation) <[email protected]>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
You need a Passphrase to protect your secret key.
    

Una volta inserita la passphrase, inizia a generare la chiave. Ti chiederà di fare un po' di lavoro. Si consiglia di spostare il mouse o digitare qualcosa o utilizzare le unità per aprire alcuni file. Utilizzerà questo lavoro per generare bit casuali. Potrebbe essere necessario farlo più volte. L'output per me è mostrato di seguito:

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 187 more bytes)
+++++
...+++++
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 92 more bytes)
.....+++++

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 114 more bytes)

+++++

Una volta fatto, la chiave è stata generata. Sembrerà simile al contenuto seguente:

gpg: /home/akshay/.gnupg/trustdb.gpg: trustdb created
gpg: key FA2314B6 marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
pub   2048R/FA2314B6 2015-04-02
      Key fingerprint = 5A02 5D77 3E0A 8B69 8086  3032 DE51 6EA5 FA23 14B6
uid                  John Doe (tis is key generation) <[email protected]>
sub   2048R/6F78E642 2015-04-02

Ci sono due cose importanti qui:fornisci una passphrase forte e assicurati di ricordare la tua passphrase

Ora che le chiavi sono state generate, dovremo ora esportare il file della chiave pubblica per importarlo su altri sistemi o per inviarlo via email. Per avviare l'esportazione, utilizzare il seguente comando:

gpg --armor --output file-enc-pubkey.txt --export 'John Doe'

Sostituisci "John Doe" con il nome che hai utilizzato durante la generazione della chiave.

Si consiglia inoltre di eseguire un backup della chiave privata. Possiamo usare gpg per farlo. Per eseguire il backup, utilizzare il seguente comando:

gpg --armor --output file-enc-privkey.asc --export-secret-keys 'John Doe'

Qui il file "file-enc-privkey.asc" manterrà il backup della chiave privata in modo sicuro. Una volta completata l'esportazione e il backup della chiave, ora possiamo crittografare e decrittografare il file .tar.gz. Utilizzare il comando seguente per crittografare:

gpg --encrypt --recipient 'John Doe' files.tar.gz

Ricorda di cambiare "John Doe" nel comando precedente con il nome fornito da te durante la generazione della chiave, altrimenti la crittografia fallirà. Quando il comando viene eseguito correttamente, viene visualizzato un file crittografato chiamato "files.tar.gz.gpg" verrà creato.

Ora possiamo decifrare l'archivio tar.gz usando il seguente comando. Utilizzerà la chiave privata insieme alla passphrase per decrittografare e fornire la cartella decrittografata. Utilizzare il comando seguente per decrittografare:

gpg --output output.tar.gz --decrypt files.tar.gz.gpg

Il comando precedente richiederà la passphrase, quindi decrittograferà il file crittografato e creerà un file compresso denominato "output.tar.gz" che può quindi essere estratto nella cartella con tar per recuperare i file. L'immagine seguente mostra l'output dei comandi di crittografia e decrittografia:

2.4 Perché GPG?

GPG supporta entrambi:crittografia a chiave pubblica e crittografia simmetrica e questo fornisce una buona quantità di flessibilità e può essere utilizzato per un'ampia gamma di applicazioni. Non è necessario fornire alcun tipo di informazione sensibile e anche gpg può avere un numero qualsiasi di cifratori utilizzando la chiave pubblica. All'utente viene data la possibilità di scegliere tra più algoritmi di crittografia. Questi motivi lo rendono uno strumento di sicurezza molto utile per la crittografia di file e cartelle o dati.

3 Crittografia tramite OpenSSL

3.1 Introduzione a OpenSSL

Il progetto OpenSSL è uno sforzo collaborativo per lo sviluppo di un toolkit robusto, di livello commerciale, completo e Open Source che implementa i protocolli Secure Sockets Layer (SSL v2/v3) e Transport Layer Security (TLS), nonché un completo generale libreria crittografica scopo. OpenSSL è disponibile per la maggior parte dei sistemi operativi simili a Unix ed è basato su SSLeay. OpenSSL supporta anche molte applicazioni SSH, SFTP e SCP. Qui utilizziamo OpenSSL per crittografare i dati utilizzando la crittografia asimmetrica e la crittografia AES. La crittografia simmetrica può essere utilizzata per crittografare file o dati più grandi.

3.2 Generazione delle chiavi pubblica e privata

La prima cosa che dobbiamo fare è generare le chiavi pubbliche e private. Per prima cosa generiamo la chiave privata. Per farlo, usa il seguente comando:

openssl genrsa -out private_key.pem 1024

Il comando precedente indica a OpenSSL di utilizzare RSA per generare una chiave privata con una dimensione di 1024 byte. La chiave viene quindi archiviata in modo sicuro in un file chiamato "private_key.pem" . L'output di questo comando sarà simile all'immagine seguente:

Una volta generata la chiave privata (segreta), possiamo usarla per generare la chiave pubblica in modo che formino una coppia. Utilizzare il comando seguente per generare la chiave pubblica:

openssl rsa -in private_key.pem -out public_key.pem -outform PEM -pubout

Sembrerà l'immagine qui sotto:

3.3 Crittografia dei dati

Ora possiamo utilizzare la chiave pubblica per crittografare i dati. Qui crittograferemo il file "test.txt" e memorizzeremo il testo crittografato nel file encrypt.dat. Esegui il seguente comando:

openssl rsautl -encrypt -inkey public_key.pem -pubin -in encrypt.txt -out encrypt.dat

Le seguenti immagini mostrano il file di testo prima e dopo la crittografia:

3.4 Decrittografia dei dati

Qui utilizziamo la chiave privata per decrittografare il file. Esegui il seguente comando:

openssl rsautl -decrypt -inkey private_key.pem -in encrypt.dat -out decrypt.txt

Il file decrypt.txt conterrà i dati decifrati. L'esecuzione del comando precedente e anche il contenuto del file è mostrato nell'immagine seguente:

4 Conclusione

I metodi mostrati sopra sono altamente sicuri se usati con attenzione e consentono più cifrature e livelli di sicurezza per adattarsi a diversi livelli di sicurezza. Pertanto, ognuno di questi può essere utilizzato in vari scenari per crittografare file/cartelle e dati grezzi.

  • OpenSSL
  • OpenPGP

Linux
  1. Introduzione ai firewall Linux

  2. Iniziare con il comando tac di Linux

  3. Iniziare con PiFlash:avviare il tuo Raspberry Pi su Linux

  4. Iniziare con il comando cat di Linux

  5. Introduzione a SSH in Linux

Introduzione al sistema operativo Linux

Tutorial Vagrant – Introduzione a Vagrant in Linux

Introduzione a Docker Compose in Linux

Introduzione a VirtualBox in Linux – Parte 1

Introduzione a Flutter su desktop Linux

Iniziare con Linux Mint? Concentrati su questi tre strumenti