GPG su Linux e Windows: Guida Pratica per Cifrare File e Gestire Chiavi

Immagine di copertina dell'articolo

GPG è un'implementazione open source dello standard OpenPGP. Permette di:

  • Cifrare e decifrare file con crittografia asimmetrica o simmetrica
  • Firmare digitalmente file e messaggi
  • Gestire un portachiavi di chiavi pubbliche e private

Installazione

Linux

# Debian/Ubuntu
sudo apt update && sudo apt install gnupg

# Fedora/RHEL
sudo dnf install gnupg2

Windows

Scaricare e installare Gpg4win da gpg4win.org. Include GPG, Kleopatra (GUI) e i plugin per Outlook e Explorer. Al termine dell'installazione, gpg è disponibile dal prompt dei comandi o PowerShell.

Per verificare l'installazione

gpg --version

Generare una Coppia di Chiavi

gpg --full-generate-key

Il wizard chiede:

  1. Tipo di chiave → scegli (1) RSA and RSA
  2. Lunghezza → 4096
  3. Scadenza → 0 (nessuna scadenza) o un numero di giorni/anni
  4. Nome, email, commento
  5. Passphrase per proteggere la chiave privata

Gestire il Portachiavi

Elencare le chiavi pubbliche

gpg --list-keys

Elencare le chiavi private

gpg --list-secret-keys

Per identificare l'ID di una chiave, l'output di --list-keys mostra righe come:

pub   rsa4096 2024-01-15 [SC]
      A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6E7F8A9B0
uid           [ultimate] Mario Rossi <mario@example.com>

L'ID breve è gli ultimi 8 caratteri dell'impronta digitale, oppure si usa direttamente l'email.

Esportare Chiavi

Per esportare la chiave pubblica

# Formato testo (armored)
gpg --armor --export mario@example.com > chiave-pubblica.asc

# Formato binario
gpg --export mario@example.com > chiave-pubblica.gpg

Per esportare la chiave privata

gpg --armor --export-secret-keys mario@example.com > chiave-privata.asc

Per esportare il certificato di revoca, da generare subito dopo la creazione della chiave:

gpg --gen-revoke mario@example.com > revoca.asc

Importare Chiavi

Importare una chiave pubblica (di un altro utente)

gpg --import chiave-pubblica.asc

Importare la propria chiave privata (es. su una nuova macchina)

gpg --import chiave-privata.asc

Per verificare e fidarsi di una chiave importata, dopo l'importazione, impostare il livello di fiducia:

gpg --edit-key mario@example.com

Nel prompt interattivo:

gpg> trust
# Scegli il livello (5 = ultimate per le proprie chiavi)
gpg> quit

Cifrare File

Cifratura asimmetrica (per un destinatario specifico). Il destinatario deve avere la propria chiave pubblica nel portachiavi.

gpg --armor --encrypt --recipient destinatario@example.com file.txt

Produce file.txt.asc. Per output binario (più compatto):

gpg --encrypt --recipient destinatario@example.com file.txt

Produce file.txt.gpg.

Per la cifratura per più destinatari

gpg --armor --encrypt \
  --recipient alice@example.com \
  --recipient bob@example.com \
  file.txt

Per la cifratura simmetrica (con password) non si richiedono chiavi: solo una passphrase.

gpg --armor --symmetric file.txt

Per cifrare e firmare contemporaneamente

gpg --armor --encrypt --sign \
  --recipient destinatario@example.com \
  file.txt

Decifrare File

gpg --decrypt file.txt.asc > file_decifrato.txt

Oppure, per output diretto su file:

gpg --output file_decifrato.txt --decrypt file.txt.gpg

GPG richiede la passphrase della chiave privata del destinatario. Se il file era cifrato simmetricamente, chiede la passphrase usata durante la cifratura.

Firmare e Verificare File

Firma separata (il file originale non viene modificato)

gpg --armor --detach-sign file.txt
# Produce file.txt.asc

Per verificare la firma

gpg --verify file.txt.asc file.txt

Per la firma inline (firma incorporata nel file)

gpg --armor --clearsign file.txt
# Produce file.txt.asc con firma incorporata

Operazioni su Directory (Cifrare più file)

GPG agisce su singoli file. Per cifrare una directory, prima comprimere:

# Linux
tar czf archivio.tar.gz ./cartella/
gpg --armor --encrypt --recipient mario@example.com archivio.tar.gz

# Decifrare e decomprimere
gpg --decrypt archivio.tar.gz.asc > archivio.tar.gz
tar xzf archivio.tar.gz

Keyserver: Pubblicare e Cercare Chiavi

Pubblicare la propria chiave pubblica

gpg --keyserver keyserver.ubuntu.com --send-keys mario@example.com

Cercare e scaricare la chiave di qualcuno

gpg --keyserver keyserver.ubuntu.com --search-keys destinatario@example.com

Revocare una Chiave

Se la chiave privata è compromessa:

gpg --import revoca.asc
gpg --keyserver keyserver.ubuntu.com --send-keys mario@example.com