
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 file semplice, moderno e sicuro, con relativo formato e 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 è disponibile 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 nel browser, Node.js, Deno e Bun.
🔑 I token hardware PIV come le YubiKey sono supportati tramite il plugin age-plugin-yubikey.
✨ Per altri plugin, implementazioni, strumenti e integrazioni, consulta l'elenco awesome age.
💬 L'autore lo pronuncia [aɡe̞] con una g dura, come GIF, ed è sempre scritto in minuscolo.
Su Windows, Linux, macOS e FreeBSD puoi utilizzare i binari precompilati.
Se scarichi i binari precompilati, puoi verificarne le prove Sigsum.
Se il tuo sistema dispone di una versione supportata di Go, puoi compilare dal sorgente.
go install filippo.io/age/cmd/...@latest
L'aiuto di nuovi maintainer di pacchetti è molto gradito.
Per la documentazione completa, leggi la pagina man di 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.
--version Print the version.
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.
I file possono essere crittografati per più destinatari ripetendo -r/--recipient. Ogni destinatario potrà decrittografare il file.
$ age -o example.jpg.age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p \
-r age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg example.jpg
Più destinatari possono anche essere elencati uno per riga in uno o più file passati con il flag -R/--recipients-file.
$ cat recipients.txt
# Alice
age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
# Bob
age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg
$ age -R recipients.txt example.jpg > example.jpg.age
Se l'argomento di -R (o -i) è -, il file viene letto dallo standard input.
Per generare chiavi ibride post-quantistiche, sicure contro futuri attacchi di
computer quantistici, usa il flag -pq con age-keygen. Questo potrebbe
diventare il comportamento predefinito 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 versioni successive. In alternativa,
il binario age-plugin-pq può essere installato e posizionato in $PATH per aggiungere il supporto
a qualsiasi versione e implementazione di age che supporti i plugin. I destinatari funzioneranno
senza configurazione aggiuntiva, mentre le identità dovranno essere convertite in identità
plugin con age-plugin-pq -identity.
I file possono essere crittografati con una passphrase usando -p/--passphrase. Di default age genera automaticamente una passphrase sicura. I file protetti da passphrase vengono rilevati automaticamente al momento della decrittografia.
$ 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:
Se un file di identità passato a -i è un file age crittografato con passphrase, verrà decrittografato 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 passphrase 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.
Come funzionalità di comodità, age supporta anche la crittografia verso chiavi pubbliche SSH ssh-rsa e ssh-ed25519, e la decrittografia 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 le chiavi SSH impiega una crittografia più complessa e incorpora un tag di chiave pubblica nel file crittografato, rendendo possibile tracciare i file crittografati verso una specifica chiave pubblica.
Combinando il supporto per le chiavi SSH e -R, puoi facilmente crittografare un file verso 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 conservate su YubiKey non possono essere usate per decrittografare i file.
Il comando age-inspect può mostrare metadati su un file crittografato senza decrittografarlo, inclusi i tipi di destinatari, se usa la 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:
- "mlkem768x25519"
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
Tip: for machine-readable output, use --json.
| 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
|