
Uno strumento di crittografia semplice, moderno e sicuro (e libreria Go) con chiavi esplicite piccole, nessuna opzione di configurazione e componibilità in stile UNIX.
age è uno strumento di crittografia per file semplice, moderno e sicuro, un formato e una libreria Go.
Offre chiavi esplicite di piccole dimensioni, supporto post-quantistico, nessuna opzione di configurazione e componibilità in stile UNIX.
$ age-keygen -o key.txt
Public key: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
$ tar cvz ~/data | age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p > data.tar.gz.age
$ age --decrypt -i key.txt data.tar.gz.age > data.tar.gz
📜 La specifica del formato è su age-encryption.org/v1. age è stato progettato da @benjojo e @FiloSottile.
🦀 Un'implementazione Rust alternativa e interoperabile è disponibile su github.com/str4d/rage.
🌍 Typage è un'implementazione TypeScript. Funziona su browser, Node.js, Deno e Bun.
🔑 I token hardware PIV come YubiKey sono supportati tramite il plugin age-plugin-yubikey.
✨ Per altri plugin, implementazioni, strumenti e integrazioni, consulta la lista awesome age.
💬 L'autore lo pronuncia [aɡe̞] con la g dura, come GIF, ed è sempre scritto in minuscolo.
Su Windows, Linux, macOS e FreeBSD puoi usare i binari precompilati.
https://dl.filippo.io/age/latest?for=linux/amd64
https://dl.filippo.io/age/v1.3.1?for=darwin/arm64
...
Se scarichi i binari precompilati, puoi verificare le loro prove Sigsum.
Se il tuo sistema ha una versione supportata di Go, puoi compilare dal sorgente.
go install filippo.io/age/cmd/...@latest
}
L'aiuto di nuovi pacchettizzatori è molto gradito.
## Utilizzo
Per la documentazione completa, leggi [la pagina man di age(1)](https://filippo.io/age/age.1).
Usage: age [--encrypt] (-r RECIPIENT | -R PATH)... [--armor] [-o OUTPUT] [INPUT] age [--encrypt] --passphrase [--armor] [-o OUTPUT] [INPUT] age --decrypt [-i PATH]... [-o OUTPUT] [INPUT]
Options: -e, --encrypt Encrypt the input to the output. Default if omitted. -d, --decrypt Decrypt the input to the output. -o, --output OUTPUT Write the result to the file at path OUTPUT. -a, --armor Encrypt to a PEM encoded format. -p, --passphrase Encrypt with a passphrase. -r, --recipient RECIPIENT Encrypt to the specified RECIPIENT. Can be repeated. -R, --recipients-file PATH Encrypt to recipients listed at PATH. Can be repeated. -i, --identity PATH Use the identity file at PATH. Can be repeated.
INPUT defaults to standard input, and OUTPUT defaults to standard output. If OUTPUT exists, it will be overwritten.
RECIPIENT can be an age public key generated by age-keygen ("age1...") or an SSH public key ("ssh-ed25519 AAAA...", "ssh-rsa AAAA...").
Recipient files contain one or more recipients, one per line. Empty lines and lines starting with "#" are ignored as comments. "-" may be used to read recipients from standard input.
Identity files contain one or more secret keys ("AGE-SECRET-KEY-1..."), one per line, or an SSH key. Empty lines and lines starting with "#" are ignored as comments. Passphrase encrypted age files can be used as identity files. Multiple key files can be provided, and any unused ones will be ignored. "-" may be used to read identities from standard input.
When --encrypt is specified explicitly, -i can also be used to encrypt to an identity file symmetrically, instead or in addition to normal recipients.
### Destinatari multipli
I file possono essere crittografati per più destinatari ripetendo l'opzione `-r/--recipient`. Ogni destinatario potrà decifrare il file.
$ age -o example.jpg.age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
-r age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg example.jpg
#### File dei destinatari
Più destinatari possono essere elencati uno per riga in uno o più file passati con l'opzione `-R/--recipients-file`.
$ cat recipients.txt
age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg $ age -R recipients.txt example.jpg > example.jpg.age
Se l'argomento di `-R` (o `-i`) è `-`, il file viene letto dall'input standard.
### Chiavi post-quantistiche
Per generare chiavi ibride post-quantistiche, sicure contro futuri attacchi di
computer quantistici, usa l'opzione `-pq` con `age-keygen`. Questa potrebbe diventare
l'impostazione predefinita in futuro.
Le identità post-quantistiche iniziano con `AGE-SECRET-KEY-PQ-1...` e i destinatari con
`age1pq1...`. I destinatari sono purtroppo lunghi circa ~2000 caratteri.
$ age-keygen -pq -o key.txt $ age-keygen -y key.txt > recipient.txt $ age -R recipient.txt example.jpg > example.jpg.age $ age -d -i key.txt example.jpg.age > example.jpg
Il supporto per le chiavi post-quantistiche è integrato in age v1.3.0 e successivi. In alternativa,
il binario `age-plugin-pq` può essere installato e inserito in `$PATH` per aggiungere il supporto
a qualsiasi versione e implementazione di age che supporti i plugin. I destinatari funzioneranno
immediatamente, mentre le identità dovranno essere convertite in identità di plugin con
`age-plugin-pq -identity`.
### Password
I file possono essere crittografati con una password usando l'opzione `-p/--passphrase`. Di default age genererà automaticamente una password sicura. I file protetti da password vengono rilevati automaticamente al momento della decifratura.
$ age -p secrets.txt > secrets.txt.age Enter passphrase (leave empty to autogenerate a secure one): Using the autogenerated passphrase "release-response-step-brand-wrap-ankle-pair-unusual-sword-train". $ age -d secrets.txt.age > secrets.txt Enter passphrase:
### File delle chiavi protetti da password
Se un file di identità passato con `-i` è un file age crittografato con password, verrà decifrato automaticamente.
$ age-keygen | age -p > key.age Public key: age1yhm4gctwfmrpz87tdslm550wrx6m79y9f2hdzt0lndjnehwj0ukqrjpyx5 Enter passphrase (leave empty to autogenerate a secure one): Using the autogenerated passphrase "hip-roast-boring-snake-mention-east-wasp-honey-input-actress". $ age -r age1yhm4gctwfmrpz87tdslm550wrx6m79y9f2hdzt0lndjnehwj0ukqrjpyx5 secrets.txt > secrets.txt.age $ age -d -i key.age secrets.txt.age > secrets.txt Enter passphrase for identity file "key.age":
I file di identità protetti da password non sono necessari per la maggior parte dei casi d'uso, dove l'accesso al file di identità crittografato implica l'accesso all'intero sistema. Tuttavia, possono essere utili se il file di identità è archiviato in remoto.
### Chiavi SSH
Come funzionalità di comodità, age supporta anche la crittografia verso chiavi pubbliche SSH `ssh-rsa` e `ssh-ed25519`, e la decifratura con il rispettivo file di chiave privata. (`ssh-agent` non è supportato.)
$ age -R ~/.ssh/id_ed25519.pub example.jpg > example.jpg.age $ age -d -i ~/.ssh/id_ed25519 example.jpg.age > example.jpg
Nota che il supporto per chiavi SSH utilizza crittografia più complessa e incorpora un tag di chiave pubblica nel file crittografato, rendendo possibile tracciare i file crittografati con una specifica chiave pubblica.
#### Crittografia per un utente GitHub
Combinando il supporto per chiavi SSH e `-R`, puoi facilmente crittografare un file per le chiavi SSH elencate in un profilo GitHub.
$ curl https://github.com/benjojo.keys | age -R - example.jpg > example.jpg.age
Tieni presente che le persone potrebbero non proteggere le chiavi SSH a lungo termine, poiché sono revocabili quando usate solo per l'autenticazione, e che le chiavi SSH presenti su YubiKey non possono essere utilizzate per decifrare file.
### Ispezione dei file crittografati
Il comando `age-inspect` può mostrare metadati su un file crittografato senza decifrarlo, inclusi i tipi di destinatario, se utilizza crittografia post-quantistica e la dimensione del payload.
$ age-inspect secrets.age secrets.age is an age file, version "age-encryption.org/v1".
This file is encrypted to the following recipient types:
This file uses post-quantum encryption.
Size breakdown (assuming it decrypts successfully):
Header 1627 bytes
Encryption overhead 32 bytes
Payload 42 bytes
-------------------
Total 1701 bytes
Per script, usa `--json` per ottenere output leggibile dalla macchina.
| Homebrew (macOS o Linux) |
brew install age
|
| MacPorts |
port install age
|
| Windows |
winget install --id FiloSottile.age
|
| Alpine Linux v3.15+ |
apk add age
|
| Arch Linux |
pacman -S age
|
| Debian 12+ (Bookworm) |
apt install age
|
| Debian 11 (Bullseye) |
apt install age/bullseye-backports
(abilita i backports per age v1.0.0+)
|
| Fedora 33+ |
dnf install age
|
| Gentoo Linux |
emerge app-crypt/age
|
| Guix System |
guix package -i age
|
| NixOS / Nix |
nix-env -i age
|
| openSUSE Tumbleweed |
zypper install age
|
| Ubuntu 22.04+ |
apt install age
|
| Void Linux |
xbps-install age
|
| FreeBSD |
pkg install age (security/age)
|
| OpenBSD 6.7+ |
pkg_add age (security/age)
|
| Chocolatey (Windows) |
choco install age.portable
|
| Scoop (Windows) |
scoop bucket add extras && scoop install age
|