Come criptare e decriptare i file con GPG su Linux

  • Dave McKay

    @TheGurkha

  • July 12, 2019, 8:00am EDT
Finestra terminale Linux su un portatile
Fatmawati Achmad Zaenuri/.com

Proteggi la tua privacy con il comando Linux gpg. Usa la crittografia di classe mondiale per mantenere i tuoi segreti al sicuro. Vi mostreremo come usare gpg per lavorare con le chiavi, cifrare i file e decifrarli.

GnuPrivacy Guard (GPG) vi permette di cifrare in modo sicuro i file in modo che solo il destinatario previsto possa decifrarli. In particolare, GPG è conforme allo standard OpenPGP. È modellato su un programma chiamato Pretty Good Privacy (PGP). PGP è stato scritto nel 1991 da Phil Zimmerman.

GPG si basa sull’idea di due chiavi di crittografia per persona. Ogni persona ha una chiave privata e una pubblica. La chiave pubblica può decifrare qualcosa che è stato criptato con la chiave privata.

Pubblicità

Per inviare un file in modo sicuro, lo si cripta con la propria chiave privata e la chiave pubblica del destinatario. Per decifrare il file, hanno bisogno della loro chiave privata e della tua chiave pubblica.

Vedrai da questo che le chiavi pubbliche devono essere condivise. Tu devi avere la chiave pubblica del destinatario per cifrare il file, e il destinatario ha bisogno della tua chiave pubblica per decifrarlo. Non c’è pericolo nel rendere le vostre chiavi pubbliche solo questo: pubbliche. Infatti, ci sono server a chiave pubblica proprio per questo scopo, come vedremo. Le chiavi private devono essere mantenute private. Se la vostra chiave pubblica è di dominio pubblico, allora la vostra chiave privata deve essere tenuta segreta e sicura.

Ci sono più passi da fare per configurare GPG che per usarlo. Per fortuna, di solito basta impostarlo una sola volta.

Generazione delle chiavi

Il comando gpg è stato installato su tutte le distribuzioni Linux che sono state controllate, comprese Ubuntu, Fedora e Manjaro.

Pubblicità

Non è necessario utilizzare GPG con le e-mail. Puoi criptare i file e renderli disponibili per il download, o passarli fisicamente al destinatario. Dovrete comunque associare un indirizzo email alle chiavi che genererete, quindi scegliete quale indirizzo email userete.

Qui c’è il comando per generare le vostre chiavi. L’opzione --full-generate-key genera le vostre chiavi in una sessione interattiva all’interno della vostra finestra di terminale. Vi verrà anche richiesta una passphrase. Assicuratevi di ricordare qual è la passphrase. Tre o quattro semplici parole unite insieme alla punteggiatura sono un buon e robusto modello per password e passphrase.

gpg --full-generate-key

gpg --full-generate-key in una finestra di terminale

Vi verrà chiesto di scegliere un tipo di crittografia da un menu. A meno che tu non abbia una buona ragione per non farlo, digita 1 e premi Invio.

Devi scegliere una lunghezza di bit per le chiavi di crittografia. Premete Invio per accettare l’impostazione predefinita.

domande sulla generazione delle chiavi in una finestra del terminale

Pubblicità

È necessario specificare la durata della chiave. Se state testando il sistema, inserite una breve durata come 5 per cinque giorni. Se avete intenzione di mantenere questa chiave, inserite una durata più lunga come 1y per un anno. La chiave durerà 12 mesi e quindi dovrà essere rinnovata dopo un anno. Conferma la tua scelta con un Y.

Devi inserire il tuo nome e il tuo indirizzo email. Puoi aggiungere un commento se lo desideri.

domande sulla generazione della chiave in una finestra del terminale

Ti verrà richiesta la tua passphrase. Avrai bisogno della passphrase ogni volta che lavorerai con le tue chiavi, quindi assicurati di sapere qual è.

finestra passphrase gpg

Clicca il pulsante OK quando hai inserito la tua passphrase. Vedrai questa finestra mentre lavori con gpg, quindi assicurati di ricordare la tua passphrase.

Pubblicità

La generazione della chiave avrà luogo, e sarai riportato al prompt dei comandi.

gpg key generation completed in a terminal window

Generazione di un certificato di revoca

Se la vostra chiave privata diventa nota ad altri, dovrete dissociare le vecchie chiavi dalla vostra identità, in modo da poterne generare di nuove. Per fare questo, avrete bisogno di un certificato di revoca. Lo faremo ora e lo conserveremo in un posto sicuro.

L’opzione --output deve essere seguita dal nome del file del certificato che volete creare. L’opzione --gen-revoke fa sì che gpg generi un certificato di revoca. Dovete fornire l’indirizzo email che avete usato quando le chiavi sono state generate.

gpg --output ~/revocation.crt --gen-revoke [email protected]

gpg --output ~/revocation.crt --gen-revoke dave-geek@protonmail.com in una finestra di terminale

Vi verrà chiesto di confermare che volete generare un certificato. Premi Y e premi Invio. Vi verrà chiesto il motivo per cui state generando il certificato. Dato che lo stiamo facendo in anticipo, non lo sappiamo con certezza. Premi 1 come ipotesi plausibile e premi Invio.

Pubblicità

Puoi inserire una descrizione se vuoi. Premete due volte Invio per terminare la descrizione.

Vi verrà chiesto di confermare le impostazioni, premete Y e premete Invio.

domande sul certificato gpg in una finestra del terminale

Il certificato verrà generato. Vedrete un messaggio che rafforza la necessità di tenere questo certificato al sicuro.

Si parla di qualcuno chiamato Mallory. Le discussioni sulla crittografia hanno usato a lungo Bob e Alice come le due persone che comunicano. Ci sono altri personaggi di supporto. Eve è un’intercettatrice, Mallory è un malintenzionato. Tutto quello che dobbiamo sapere è che dobbiamo mantenere il certificato sicuro e protetto.

Pubblicità

Come minimo, rimuoviamo tutti i permessi tranne il nostro dal certificato.

chmod 600 ~/revocation.crt

chmod 600 ~/revocation.crt in una finestra di terminale

Controlliamo con ls per vedere quali sono i permessi ora:

ls -l

in una finestra di terminale

Questo è perfetto. Nessuno a parte il proprietario del file – noi – può fare qualcosa con il certificato.

Importare la chiave pubblica di qualcun altro

Per criptare un messaggio che un’altra persona può decriptare, dobbiamo avere la sua chiave pubblica.

Pubblicità

Se vi è stata fornita la loro chiave in un file, potete importarla con il seguente comando. In questo esempio, il file della chiave si chiama “mary-geek.key.”

gpg --import mary-geek.key

gpg --import mary-geek.key in una finestra di terminale

La chiave viene importata, e vi viene mostrato il nome e l’indirizzo email associato a quella chiave. Ovviamente, questo dovrebbe corrispondere alla persona da cui l’avete ricevuta.

chiave importata con successo in una finestra del terminale

C’è anche la possibilità che la persona da cui avete bisogno di una chiave abbia caricato la sua chiave su un server di chiavi pubbliche. Questi server conservano le chiavi pubbliche delle persone di tutto il mondo. I server di chiavi si sincronizzano tra loro periodicamente in modo che le chiavi siano universalmente disponibili.

Il server di chiavi pubbliche del MIT è un server di chiavi popolare e regolarmente sincronizzato, quindi la ricerca lì dovrebbe avere successo. Se qualcuno ha caricato una chiave solo di recente, potrebbe impiegare qualche giorno per apparire.

Pubblicità

L’opzione --keyserver deve essere seguita dal nome del server di chiavi che vuoi cercare. L’opzione --search-keys deve essere seguita dal nome della persona che stai cercando o dal suo indirizzo e-mail. Useremo l’indirizzo email:

gpg --keyserver pgp.mit.edu --search-keys [email protected]

gpg --keyserver pgp.mit.edu --search-keys mary-geek@protonmail.com in una finestra di terminale

Le corrispondenze sono elencate per voi e numerate. Per importarne una, digitate il numero e premete Invio. In questo caso, c’è una sola corrispondenza, quindi digitiamo 1 e premiamo Invio.

risultati di gpg keyserver in una finestra del terminale

La chiave viene importata, e ci viene mostrato il nome e l’indirizzo email associati a quella chiave.

Verificare e firmare una chiave

Se vi è stato consegnato un file di chiave pubblica da qualcuno che conoscete, potete tranquillamente dire che appartiene a quella persona. Se l’hai scaricata da un server di chiavi pubbliche, potresti sentire il bisogno di verificare che la chiave appartenga alla persona a cui è destinata.

Pubblicità

L’opzione --fingerprint fa sì che gpg crei una breve sequenza di dieci serie di quattro caratteri esadecimali. Puoi chiedere alla persona di inviarti l’impronta digitale della sua chiave.

Puoi poi usare l’opzione --fingerprint per generare la stessa sequenza di caratteri esadecimali e confrontarli. Se corrispondono, si sa che la chiave appartiene a quella persona.

gpg --fingerprint [email protected]

gpg --fingerprint mary-geek@protonmail.com in una finestra di terminale

L’impronta digitale è generata.

gpg fingerprint in una finestra del terminale

Quando siete soddisfatti che la chiave sia genuina e appartenga alla persona a cui dovrebbe essere associata, potete firmare la sua chiave.

Se non lo fate, potete ancora usarla per criptare e decriptare messaggi da e per quella persona. Ma gpg vi chiederà ogni volta se volete procedere perché la chiave non è firmata. Useremo l’opzione --sign-key e forniremo l’indirizzo email della persona, in modo che gpg sappia quale chiave firmare.

gpg --sign-key [email protected]

gpg --sign-key mary-geek@protonmail.com in una finestra di terminale

Pubblicità

Vedrai le informazioni sulla chiave e sulla persona, e ti verrà chiesto di verificare che vuoi davvero firmare la chiave. Premi Y e premi Invio per firmare la chiave.

conferma della firma della chiave gpg in una finestra di terminale

Come condividere la tua chiave pubblica

Per condividere la tua chiave come file, dobbiamo esportarla dal gpg deposito locale delle chiavi. Per farlo, useremo l’opzione --export, che deve essere seguita dall’indirizzo email che hai usato per generare la chiave. L’opzione --output deve essere seguita dal nome del file in cui si desidera esportare la chiave. L’opzione --armor dice a gpg di generare un output ASCII armor invece di un file binario.

gpg --output ~/dave-geek.key --armor --export [email protected]

gpg --output ~/dave-geek.key --armor --export dave-geek@protonmail.com in una finestra di terminale

Possiamo dare un’occhiata all’interno del file chiave con less.

less dave-geek.key

file chiave pubblica in less in una finestra di terminale

La chiave è mostrata in tutto il suo splendore:

file di chiave pubblica in less in una finestra di terminale

Puoi anche condividere la tua chiave pubblica su un server di chiavi pubbliche. L’opzione --send-keys invia la chiave al keyserver. L’opzione --keyserver deve essere seguita dall’indirizzo web del server della chiave pubblica. Per identificare quale chiave inviare, l’impronta digitale della chiave deve essere fornita sulla linea di comando. Notate che non ci sono spazi tra le serie di quattro caratteri.

Pubblicità

(Potete vedere l’impronta digitale della vostra chiave usando l’opzione --fingerprint.)

gpg --send-keys --keyserver pgp.mit.edu 31A4E3BE6C022830A804DA0EE9E4D6D0F64EEED4

gpg --send-keys --keyserver pgp.mit.edu 31A4E3BE6C022830A804DA0EE9E4D6D0F64EEED4 in una finestra di terminale

Avrete la conferma che la chiave è stata inviata.

conferma che la chiave è stata inviata al server delle chiavi in una finestra del terminale

Crittografia dei file

Siamo finalmente pronti per crittografare un file e inviarlo a Mary. Il file si chiama Raven.txt.

L’opzione --encrypt dice a gpg di criptare il file, e l’opzione --sign dice di firmare il file con i tuoi dati. L’opzione --armor dice a gpg di creare un file ASCII. L’opzione -r (destinatario) deve essere seguita dall’indirizzo email della persona a cui stai inviando il file.

gpg --encrypt --sign --armor -r [email protected]

gpg --encrypt --sign --armor -r mary-geek@protonmail.com in una finestra di terminale

Il file viene creato con lo stesso nome dell’originale, ma con “.asc” aggiunto al nome. Diamo un’occhiata al suo interno.

less Raven.txt.asc

meno Raven.txt.asc in una finestra del terminale

Pubblicità

Il file è completamente illeggibile, e può essere decifrato solo da qualcuno che ha la tua chiave pubblica e la chiave privata di Mary. L’unica persona ad avere entrambi dovrebbe essere Mary.

Contenuto criptato di raven.txt.asc in una finestra di terminale

Possiamo ora inviare il file a Mary sicuri che nessun altro possa decifrarlo.

Decifrare i file

Mary ha inviato una risposta. È in un file criptato chiamato coded.asc. Possiamo decifrarlo molto facilmente usando l’opzione --decrypt. Stiamo per reindirizzare l’output in un altro file chiamato plain.txt.

Nota che non dobbiamo dire gpg da chi viene il file. Può capirlo dal contenuto criptato del file.

gpg --decrypt coded.asc > plain.txt

gpg --decrypt coded.asc plain.txt in una finestra di terminale

Guardiamo il file plain.txt:

less plain.txt

meno plain.txt in una finestra di terminale

Il file è stato decrittato con successo per noi.

file decrittato in less in una finestra di terminale

Rinfrescare le tue chiavi

Periodicamente, puoi chiedere a gpg di controllare le chiavi che ha con un server di chiavi pubbliche e di aggiornare quelle che sono cambiate. Potresti farlo ogni pochi mesi o quando ricevi una chiave da un nuovo contatto.

Pubblicità

L’opzione --refresh-keys fa sì che gpg esegua il controllo. L’opzione --keyserver deve essere seguita dal server delle chiavi di vostra scelta. Una volta che le chiavi sono state sincronizzate tra i server di chiavi pubbliche, non dovrebbe importare quale scegliete.

gpg --keyserver pgp.mit.edu --refresh-keys

gpg --keyserver pgp.mit.edu --refresh-keys in una finestra di terminale

gpg risponde elencando le chiavi che controlla e facendovi sapere se qualcuna è cambiata e aggiornata.

aggiornamento delle chiavi gpg in una finestra del terminale

La privacy è un argomento caldo

La privacy non è mai lontana dalle notizie di questi giorni. Qualunque siano le ragioni per cui volete mantenere le vostre informazioni sicure e private, gpg fornisce un mezzo semplice per applicare una crittografia incredibilmente forte ai vostri file e comunicazioni.

Pubblicità

Ci sono altri modi per usare gpg. È possibile ottenere un plugin per Thunderbird chiamato Enigmail. Si aggancia direttamente alla vostra configurazione gpg per permettervi di criptare i messaggi di posta elettronica dall’interno di Thunderbird.

Dave McKay
Dave McKay ha usato i computer per la prima volta quando il nastro di carta perforato era in voga, e da allora ha sempre programmato. Dopo oltre 30 anni nell’industria IT, ora è un giornalista tecnologico a tempo pieno. Durante la sua carriera, ha lavorato come programmatore freelance, come manager di un team internazionale di sviluppo software, come project manager di servizi IT e, più recentemente, come Data Protection Officer. Dave è un evangelista di Linux e un sostenitore dell’open source.Read Full Bio ”

Lascia un commento

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