Rage, una herramienta de cifrado sencilla y moderna

By: Jacobo Da Riva Muñoz On: Mon 24 June 2024
In: Software Libre
Tags: #rage #age #cifrado #freebsd #openbsd

Age es una herramienta de cifrado, un formato de archivo y una librería desarrollada en Go. Repositorio oficial del proyecto Age.

En torno a este proyecto han surgido utilidades y otras implementaciones como rage, una herramienta de cifrado desarrollada en Rust compatible con age. Repositorio oficial de Rage.

Ambas están orientadas a hacer más sencillo el cirado de información mediante un sistema de llaves públicas y privadas. En mi caso he estado probando rage en entornos Linux, FreeBSD y OpenBSD para cifrado de archivos que sincronizo en mi nube. Casi todos los comandos, si no todos, que componen rage están implementados también en age.

Nota previa: rage utiliza pinentry, si está instalado, para mostrar el prompt de la contraseña. Age no lo utiliza en su última versión.

Generando una llave privada

Aunque rage se puede usar también con llaves ssh para el cifrado y decodificado, podemos generar un par de llaves pública y privada con el comando

rage-keygen -o llave.txt
Clave pública: age1apdp0zkr3pqs0kz4r62x0lg00sms9xhe9xf9p5q5rhfc6jd7qq8qjr2scu
cat llave.txt
# creada: 2024-06-23T18:52:02+02:00
# clave pública: age1apdp0zkr3pqs0kz4r62x0lg00sms9xhe9xf9p5q5rhfc6jd7qq8qjr2scu
AGE-SECRET-KEY-15W0MZWPZJ3YD7JXYYLV8N26DPU7NX9UJT0CVQT5LSM03X7W34AXS4AU03V

Cifrado asimétrico con rage

La acción por defecto de rage es cifrar los ficheros, por lo que no es necesario especificar la opción "-e", aunque la voy a poner en los ejemplos para que se vea más claro.

Podemos cifrar indicando las llaves públicas de dos formas: introduciéndola en el comando:

rage -e -r age1apdp0zkr3pqs0kz4r62x0lg00sms9xhe9xf9p5q5rhfc6jd7qq8qjr2scu fichero.txt -o fichero.age

cat fichero.age
age-encryption.org/v1
-> X25519 pxTn67huDq6SRNO/BRZCzNphu970Ed+auxFwpMt/kgU
SJH415MhxqffE7PbZdCbDoeHNJ6gK+1ca9gqSY75ZKQ
-> puce-grease O/}?cGx9 Rh qVN
zjdrqlwHZAL0RGw8tbTIUFNoDQ
--- rqJwEmcH68YzBr4a/q7R8Nv0igw4Dd0LPSU2q6hiIz0
2=R׹]f��}���S��QP%Dqd���ԔTO����
��jDX�����ďdC�����=��)M %

O guardando las llaves en un fichero de texto, una llave por línea:

rage -e -R llaves.txt fichero.txt -o fichero.age

Los parámetros "-r" y "-R" se pueden repetir en la misma línea de comando.

Decodificado asimétrico

Para decodificar usando nuestra llave privada es tan sencillo como en los ejemplos anteriores:

rage -d -i llave.txt fichero.age -o fichero.txt

cat fichero.txt
Esta es una prueba de cifrado con rage/age

Cifrado simétrico con rage

Rage también permite el cifrado simétrico mediante una contraseña:

rage -p fichero.txt -o fichero.simetrico.age

# Aquí pinentry me ha pedido la contraseña
cat fichero.simetrico.age
age-encryption.org/v1
-> scrypt 6QadM2Z8jEP0BKFGxTSaVA 17
Bz/MaBXRdeEU6f2UeFRjBZD3NtNXOW1G6nhze+M7PfA
--- cRL0jZX0aPrKvsCwyjR7xy0S8oD6Qds757j8wL8Ibwg
VLVG'U�Tΰ�N���WR�i���
��J���x�
����8@�j���"B���l0&Q���e,%

Decodificado simétrico

Rage detecta cuando un fichero tiene cifrado simétrico por lo que no es necesario añadir ningún tipo de parámetro:

rage -d fichero.simetrico.age

# Aquí pinentry me ha pedido la contraseña
Esta es una prueba de cifrado con rage/age

Si no especificamos un fichero de salida con el parámetro "-p" nos muestra el resultado por pantalla.

Y, obviamente, podemos combinar los dos métodos cifrando de forma simétrica nuestra llave privada:

rage -p llave.txt -o llave.age

# Aquí pinentry me ha pedido la contraseña
rage -d -i llave.age fichero.age 

# aquí nos ha pedido contraseña
Esta es una prueba de cifrado con rage/age

Existe un último repositorio donde hay enlaces a implementaciones que utilizan age como base:

=> https://github.com/FiloSottile/awesome-age Awesome age

For any feedback or corrections, please write in to: jdrm@disroot.org