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:
- Tipo di chiave → scegli
(1) RSA and RSA - Lunghezza →
4096 - Scadenza →
0(nessuna scadenza) o un numero di giorni/anni - Nome, email, commento
- 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