Una guida pratica alla crittografia moderna senza mal di testa
Per anni, GPG è stato lo standard de facto per la crittografia dei file. Ma chiunque l'abbia usato sa quanto può essere frustrante: keyring corrotti, chiavi scadute, web of trust incomprensibile, errori criptici del tipo "no secret key" quando sei sicuro di averla.
Filippo Valsorda, crittografo che ha lavorato a Cloudflare e ora è nel team Go di Google, si è stufato. Nel 2019 ha creato Age (pronunciato "aghe", come il giapponese 上げ), uno strumento che fa una cosa sola e la fa bene: cifrare e decifrare file.
La filosofia è radicale nella sua semplicità: niente keyring, niente trust model, niente scadenze. Una coppia di chiavi, una password, file cifrati. Fine.
Age usa crittografia asimmetrica, ma in modo molto più semplice di GPG. Hai due chiavi:
Generare una coppia di chiavi è un comando:
age-keygen -o key.txt
Il file key.txt conterrà sia la chiave pubblica (come commento) che quella privata. Qualcosa del tipo:
# created: 2025-01-10T10:30:00+01:00 # public key: age1ql3z7hjy54pw3hyww5ay3fq... AGE-SECRET-KEY-1QQQPQQ7V...
La chiave pubblica inizia sempre con age1, quella privata con AGE-SECRET-KEY-1. Impossibile confonderle.
Per cifrare un file usando la chiave pubblica di qualcuno:
age -r age1ql3z7hjy54pw3hyww5ay... -o secrets.age secrets.txt
Il flag -r sta per "recipient" (destinatario). Puoi specificare più destinatari, e ognuno potrà decifrare il file con la propria chiave privata.
Puoi anche cifrare con una semplice password (crittografia simmetrica):
age -p -o secrets.age secrets.txt
Ti chiederà di inserire una password. Chiunque la conosca potrà decifrare.
Per decifrare con la chiave privata:
age -d -i key.txt secrets.age > secrets.txt
Il flag -d è per decrypt, -i per l'identity (la chiave privata).
La differenza fondamentale è filosofica. GPG cerca di essere tutto per tutti: firme digitali, web of trust, gestione delle chiavi, integrazione email, smartcard. Age fa solo encryption.
| Aspetto | GPG | Age |
|---|---|---|
| Encryption | RSA/ECC | X25519 + ChaCha20-Poly1305 |
| Gestione chiavi | Keyring complesso | File di testo |
| Scadenza chiavi | Configurabile | Mai |
| Firme digitali | Sì | No (usa minisign) |
| Formato output | Binario o ASCII armor | Testo con header leggibile |
L'assenza di scadenza è intenzionale. Se la tua chiave viene compromessa, smetti di usarla. Se vuoi "ruotare" le chiavi per policy aziendale, generi nuove chiavi e ri-cifri. Ma non c'è una bomba a orologeria che ti fa perdere accesso ai tuoi file perché ti sei dimenticato di rinnovare.
Nel brain, Age viene usato per proteggere il file .env che contiene tutti i secrets: API key, password database, token OAuth.
Il workflow è:
.env viene cifrato con age -r $PUBKEY -o .env.age .env.env.age viene copiato sui backup servers~/.age/key.txt sui server autorizzatiQuesto significa che anche se qualcuno ottiene accesso al repository o ai backup, senza la chiave privata i secrets sono illeggibili.
La chiave privata è il punto debole. Se la perdi, perdi accesso a tutto ciò che hai cifrato. Se viene compromessa, tutti i tuoi secrets sono esposti.
Best practices:
chmod 600 key.txtSe vuoi cambiare chiavi (per paranoia o per policy):
Age è disponibile per tutti i sistemi operativi:
# Debian/Ubuntu apt install age # macOS brew install age # Windows (con scoop) scoop install age
Oppure puoi scaricare i binari precompilati da GitHub: github.com/FiloSottile/age
Age ha un ecosistema di plugin per integrazioni specifiche:
Age non è la soluzione per tutto:
minisign o signifyMa per il 90% dei casi d'uso - proteggere file, secrets, backup - Age è la scelta migliore nel 2025.
Riferimenti: