- ENTRADA 051 -

Cifrando con Age


Vaya, Sr. Boyce, veo que ha cambiado de gabardina...


--- Fecha: dom 25 feb 2026 00:04:31 CET ---

¿Qué es Age?

TLTR


Es una herramienta de cifrado de archivos sencilla, moderna y segura, programada en Go, que también dispone de una versión escrita en Rust, Rage.

Cuenta con claves explícitas cortas, compatibilidad poscuántica y sin opciones de configuración. Las claves híbridas poscuánticas son seguras frente a los futuros ordenadores cuánticos y son el tipo de destinatario recomendado para la mayoría de las aplicaciones. Admite el cifrado sobre Git, YubiKeys o KMS.

Al igual que PGP/GPG, funciona de forma simétrica (con contraseña) y asimétrica (con par de claves pública y privada).

No viene para reemplazar a nadie, viene a cubrir un vacío en el mundo del cifrado, y es que PGP es difícil si no tienes conocimientos técnicos, en cambio, Age tiene un uso muy sencillo y no requiere de conocimientos especiales para entenderlo.


Antes de empezar


1. La nomenclatura de las claves es diferente. A la pública se le llama "Recipient" y a la privada "Identity"

2. Para no liarse, se suele nombrar al archivo cifrado igual que al original pero añadiendo segunda extensión .age

3. Al generar el par de claves se usa un cifrado fuerte basado en X25519 para las claves clásicas, y X25519 + ML-KEM-768 para las claves híbridas poscuánticas.

4. La clave nativa pública (Recipient) comienza con age1p y la privada (Identity) AGE-SECRET-KEY-1

5. La clave híbrida pública (Recipient) comienza con age1pq1 y la privada IDENTITY con AGE-SECRET-KEY-PQ-1

6. Se recomienda dejar el archivo de claves generado en ~/.config/age. Puedes tener tantos como quieras (key.txt, key2.txt, mias1.txt...mias8.txt)

7. Tiene pocas opciones, que son las siguientes:


----[ Opciones ]-----------------------------


-o, --output

-i, --identity

-r, --recipient

-R, --recipients-file

-e, --encrypt

-d, --decrypt

-p, --passphrase

-a, --armor



CIFRADO SIMETRICO


Empiezo por lo más fácil, ya que es cifrar con la contraseña que tu quieras.


Cifrado


La sintaxis de cifrado es "archivo-original -> archivo-cifrado"



Te pedirá una contraseña que has de teclear.


NOTA: Si no pones contraseña, age genera una que deberás copiar y guardar, del estilo skull-tribe-mirror-help-logic-maple-syrup-round-click-danger



Descifrado


La sintaxis de descifrado es "archivo-cifrado -> archivo-original"




CIFRADO ASIMETRICO


Vamos al lío, verás que no es tan difícil como GPG.


Generar par de claves


Los pares de claves nativas se generan con "age-keygen". Cuando generas las claves, Age genera la pública y la privada en el mismo archivo:



# created: 2026-02-22T21:20:54+01:00
# public key: age1pg3dgtcj7qvswsch4ncf3x3w2a3uftwgzdsdne5xt0qqj6e4rdrqd5rmt9
AGE-SECRET-KEY-1LVMUM8N8PS58WUYL2L4JPPTYVADLF6PNG3GL889H74MVMPX90SFS9ZEGQF

Si prefieres el cifrado postcuantico:



# created: 2026-02-22T22:08:25+01:00
# public key: age1pq14wdnunyfzl785nru9wya3vzqa3pf3hw9ct7z5ccktwlfc4y0h9yem6d6h
7lwgqf3zd4t2g9xlrn24px32fntc72m7rxfy325nek2au89xz0psy8npf887c5gw
pt2a5nc3zm7kqc56edsv8q3j63yue8ycm6pwhmfj3k27waet9qu7ngq0h4r3fc2p
ymd8c443768m45cyg6zg94x03khejxq9
jgh624j9acfgfzwgyud0qnfzg240u0hsvrxv2e7mz95kug53ynzzp05ccpl0fsre
fqp3c98p9fy8jzkn8twz6ujay4n3jpezvvm0x2gxwu4vaqqv4vylf4tmfm93zwxn
up92wtcjmy24c3h7w9r6eahj76j2dg329kl239q97xzdkn64yqt4vyhp3uexc5rf
da2u6nywjnhgh9agalz5kkfk4afkschwedd2vlrsuyk3f25d0vzr0fkgq7k5xx6u
xgutv52xk6q77seyqww3jjn0x5zqw5gkv65skxjjtqpy2tdhp8zzp7grq7rj0jsw
dxwsqndyammu3rwngdqrujh4v2rsssaxgxnh4cza0suhj4nfnkfnxxgk2netg9tc
um8t634d4er4dty253ra5uwwv5q857xr2gf2kp70prncs9ucztqywkff9fe4ylraxwcf79smt5mcle95gs88jg5hxr7ys3z3
7j3lr4mdem5w33mchxwdp90fjnf0ad2zsu8kuxjszypa63acg9yte9qf3gn227ac
3wpdn9z7j43d309xevst8xrn2yznsxwe4wt8ngj5mcsgh3eju7y2emj6kgy2yxfz
hx3yegw8dsvvpx2dfy9645p2ufhqzd7c9ktq33p99
AGE-SECRET-KEY-PQ-13MYA8NYPV5Q79L2KQ94RYG6LUJ9D5QP5LADV55Y5SCTARVUPK5ZSKG5T35

Como ves, el cifrado postcuantico es más seguro, aunque también requiere más cálculo.

Ahora puedes guardar bien este archivo y, evidentemente, no debes compartir tu clave secreta con nadie.


Puedes guardar tu archivo de claves de forma cifrada, y puedes hacerlo después, o durante el proceso de generación:




Cifrado


La sintaxis de cifrado es "archivo-cifrado -> clave pública -> archivo original".


La clave pública (Recipient) va asociada a la privada (Identity), así que al poner la clave pública, esta identifica la clave privada con la que se descifrará el archivo.

Voy a cifrar algo para mi amigo Antonio con su clave pública que previamente me ha enviado:


age -o archivo.txt.age -r age1pg3dgtcj7qvswsch4ncf3x3w2a3uftwgzdsdne5xt0qqj6e4rdrqd5rmt9 archivo.txt

Puedes añadir otro destinatario que apunte a su clave pública, por ejemplo, su hermano Andrés:


age -o archivo.txt.age -r age1pg3dgtcj7qvswsch4ncf3x3w2a3uftwgzdsdne5xt0qqj6e4rdrqd5rmt9 -r age6365ffad5120d3fdcaf9e352b9291a451ab59dc6j7qvswsch420dj6e4a archivo.txt

El archivo resultante podrá ser descifrado por las claves privadas de ambos destinatarios.


NOTA: No se recomienda abusar de los destinatarios múltiples, ya que si cifras para A y B, A puede derivar la clave usando su propia identidad y cambiar el contenido del archivo, que B podrá descifrar igualmente, pero el resultado ya habrá sido creado por A, no por mi.


Si quiero consolidar todos los destinatarios puedo crear un archivo, por ejemplo, recipient.txt, con todas las claves públicas delimitadas por una nueva linea. Si vas a hacer un archivo tipo "anillo de claves" como hace GPG, puedes identificarlas con nombres comentados con almohadilla:


# Antonio
age1pg3dgtcj7qvswsch4ncf3x3w2a3uftwgzdsdne5xt0qqj6e4rdrqd5rmt9
# Andrés
age6365ffad5120d3fdcaf9e352b9291a451ab59dc6j7qvswsch420dj6e4a

Ahora les envío el archivo a mis amigos y en vez de usar los destinatarios en el comando, usaré el archivo de destinatarios recién creado, usando el modificador -R en vez de -r:



Para obtener información sobre un archivo cifrado que acabas de recibir:



archivo.txt.age is an age file, version "age-encryption.org/v1".

This file is encrypted to the following recipient types:
  - "X25519"

This file does NOT use post-quantum encryption.
Size breakdown (assuming it decrypts successfully):

  Header				168 bytes
  Encryption overhead	32 bytes
  Payload				43 bytes
					---------
  Total					243 bytes

Tip: for machine-readable output, use --json.

Descifrado


La sintaxis de descifrado es "archivo-claves -> archivo original -> archivo-cifrado".


Para descifrar un archivo usaremos nuestro archivo ~/.config/age/keys.txt con la clave privada:



Como el archivo ~/.config/age/key.txt generado tiene la clave pública comentada con almohadilla (#), solo va a hacer caso a la privada para descifrar.



CIFRAR TEXTO


Por supuesto, Age puede cifrar y descifrar texto.



Cifrar texto


Aquí usaré el parámetro --armor (-r) para usar el formato PEM, que es más fácil de traginar:



Cuando pulsas INTRO, hará un salto de línea y ya podrás escribir o pegar un texto. Al de editar, pulsa INTRO y después CTRL+D. Ahora tienes el archivo "texto.md.age" con el texto cifrado.


Descifrar texto


No tiene secreto:



Como es un engorro tener que copiar y pegar tu clave pública cada vez que quieras cifrar, pégala en un archivo y llamalo como quieras, yo lo he llamado rec (de recipient).

Ahora solo tienes que cambiar el parámetro -r por -R (--recipients-file) para indicar el archvo en vez de poner todo el churro alfanumérico:



Y como ya debes saber, si no quieres que el resultado salga por pantalla, pipealo con >:




USO CLAVES SSH


Age también puede usar tus claves SSH si las tienes. Para cifrar:



Y para descifrar:




BONUS TRACK


Si usas password-store para almacenar tus contraseñas (usa GPG), y quieres pasarte a Age, tienes su versión llamada Passage que funciona de forma muy similar. Dejo enlace:


Web passage



Tags #age #cifrado #encriptado #GPG



◄ Listado de noticias

◄◄ Inicio



/blog/