Secretos en un sistema que es un repositorio: agenix explicado para humanos


23 de agosto de 2026

Tienes todo tu ordenador escrito en ficheros de texto. El sistema entero —paquetes, servicios, arranque, hasta el fondo de pantalla— vive en un repositorio versionado. Es la gracia de NixOS: reproducible, auditable, tuyo.

Y entonces llega la pregunta incómoda: ¿dónde meto la contraseña?

Porque el token del bot, la clave de la base de datos, la contraseña de la VPN… esas cosas también las necesita el sistema. Pero un repositorio se comparte, se sincroniza entre máquinas, a veces se sube a un sitio. Escribir un secreto en claro ahí dentro es como apuntar el PIN en el reverso de la tarjeta.

Este post va de la solución que uso: agenix. Y de por qué no es lo mismo que GPG y pass, que es la confusión más común. Lo cuento desde cero, sin dar por supuesto que sabes criptografía. Si ya la sabes, salta a "Los dos papeles".

El truco de fondo: candados públicos, llaves privadas

Antes de nada, la idea que lo sostiene todo. Se llama criptografía asimétrica y, quitada la palabreja, es simple.

Imagina que tienes dos piezas que van en pareja:

Cualquiera puede coger uno de tus candados, meter un mensaje en una caja y cerrarlo. Una vez cerrado, ni el que lo cerró puede reabrirlo. Solo tu llave privada abre ese candado. Cerrar es público; abrir es privado.

Eso es todo el pastel. "Cifrar para alguien" = cerrar la caja con SU candado. "Descifrar" = abrirla con TU llave. El que cifra no necesita ningún secreto; el que descifra sí.

Con esto ya se entiende agenix entero.

Qué es age, y qué es agenix

age (se lee "eich", como "edad" en inglés) es una herramienta de cifrado moderna y minúscula. Coge un fichero, una lista de candados públicos, y produce un fichero cifrado que solo abren las llaves privadas correspondientes. Sin ceremonias, sin anillos de confianza, sin veinte flags. Un candado, una caja.

agenix es el pegamento entre age y NixOS. Hace tres cosas:

  1. Te deja guardar cada secreto como un fichero .age (cifrado) dentro del repositorio. Cifrado, así que puede vivir en el repo sin drama.
  2. Al arrancar la máquina, los descifra automáticamente a un sitio seguro.
  3. Te da un comando para editarlos sin tener que descifrar a mano.

La idea central, y la que hay que llevarse a casa: *el secreto viaja cifrado en el repo; solo se abre, en RAM, en la máquina que tiene la llave, y solo cuando hace falta.*

Los dos papeles: la máquina y tú

Aquí está la parte elegante, y la que a mí me costó ver. En agenix hay dos tipos de llave, con dos trabajos distintos.

La llave de la máquina (descifra sola, sin ti delante)

Cada ordenador con SSH tiene, desde que se instala, un par de llaves propio: su host key. Está en /etc/ssh/. No la pusiste tú; nace con el sistema.

agenix aprovecha esa: cifra cada secreto también para el candado de la máquina. Resultado: cuando el ordenador arranca, usa su propia llave privada de host para abrir los secretos él solo, sin que haya un humano delante escribiendo nada.

Esto es EL punto. Un servidor que se reinicia a las 4 de la mañana necesita el token de su bot para levantar el servicio. No hay nadie para teclear una contraseña. La máquina se la abre a sí misma. Disponibilidad sin presencia humana.

Tu llave (para editar los secretos)

Pero alguien tiene que crear y cambiar esos secretos. Ese eres tú. Para eso, agenix cifra cada secreto además para tu candado personal —tu clave SSH de usuario, la de =~/.ssh/=—. Así, cuando quieres editar un secreto, tu llave lo abre, lo editas, y se vuelve a cerrar para todos los candados de la lista.

O sea: un mismo fichero .age está cerrado con varios candados a la vez —el de cada máquina que lo necesita, y el tuyo—. Cualquiera de esas llaves lo abre. Ni una más.

secreto.age  (cifrado para 3 candados)
     │
     ├─ candado de la máquina A ──► la abre sola al arrancar
     ├─ candado de la máquina B ──► la abre sola al arrancar
     └─ tu candado personal      ──► la abres tú para editar

Añadir una máquina nueva al ajo = meter su candado público en la lista y volver a cerrar. Quitar una = sacarlo. Nada de copiar contraseñas por ahí.

Dónde aterrizan los secretos (y por qué importa)

Cuando la máquina descifra un secreto al arrancar, no lo deja en el disco. Lo pone en /run/agenix/, que vive en RAM (tmpfs) y es de solo-root. Consecuencias:

Un script que lo necesite hace, literalmente, cat /run/agenix/nombre-del- secreto y ya. El secreto está ahí, en claro, pero solo para quien debe y solo en memoria.

El día a día

El ciclo completo, sin misterio:

agenix -e mi-secreto.age      # tu llave lo abre en un editor; escribes; se re-cierra
git commit                    # el .age cifrado va al repo, tranquilo
nixos-rebuild switch          # la máquina lo empieza a descifrar al arrancar

Editar un secreto es un comando. Pero —y esto es honesto— cambiar cualquier cosa implica editar-cifrar-rebuild. Es declarativo hasta las cejas. Genial para secretos que pones una vez y olvidas; un latazo para cosas que tocas cada día.

Lo cual nos lleva al malentendido clásico.

Esto NO es GPG ni pass (y está bien que no lo sea)

Si has usado Linux un rato, habrás oído de GPG y de pass, el gestor de contraseñas. Y es fácil pensar "¿no es lo mismo?". No. Son dos mundos, con dos criptografías distintas y dos propósitos distintos.

pass es tu llavero personal. Guarda las contraseñas que consultas tú, a mano: el banco, el correo, la de una web. Va cifrado con tu clave GPG, que a su vez está protegida por una passphrase. Cuando pides una contraseña, GPG llama a un programita —*pinentry*— que dibuja la ventanita de "escribe tu passphrase". Es decir: pass exige que tú estés delante y demuestres que eres tú. Ese candado humano es una feature.

agenix es lo contrario a propósito: secretos que la máquina necesita sin que tú estés. Por eso se cifra para la llave del ordenador, que abre sola. No hay passphrase, no hay ventanita, no hay humano. También a propósito.

La regla mental que uso:

Pregunta Herramienta
¿Lo necesita un servicio al arrancar, solo? agenix
¿Lo consulto yo, a mano, cuando lo necesito? pass

Token de un bot, clave de una base de datos de un servicio, credenciales de una VPN que levanta sola: agenix. La contraseña de tu banco: pass. Y no pasa nada por tener las dos cajas —resuelven problemas distintos—.

Un matiz de seguridad que conviene entender, no por miedo sino por saber lo que tienes: como agenix cifra para la llave de la máquina, esa máquina abre sus secretos sola. Es justo lo que quieres para un servicio… y justo lo que no quieres para la contraseña de tu banco, porque ahí el candado de la passphrase (que solo está en tu cabeza) es la diferencia entre "me robaron el portátil" y "me robaron el portátil Y todas mis cuentas". Cada caja en su sitio.

¿Y dónde está "mi clave", entonces?

La pregunta del millón, la que todo el mundo se hace y nadie sabe contestar de carrerilla. La respuesta, ahora que tienes el mapa, es que tienes dos, una por cada mundo:

Dos llaves, dos cajas, dos trabajos. Si entiendes eso, entiendes por qué cuando una de las dos se rompe (pongamos, la ventanita de la passphrase deja de funcionar) el sistema sigue tirando pero tu llavero personal no. No es magia ni mala suerte: es que son sistemas separados, y solo uno depende de que tú estés delante.

Cierre

agenix no es más que esto: candados públicos que reparto, secretos cifrados que viajan tranquilos en el repo, y una llave —la de la máquina— que los abre sola cuando arranca, en RAM, para quien debe y nada más. La tuya, la personal, solo entra para editar.

Si te quedas con una sola frase: el repo puede ver el secreto cerrado; solo la máquina correcta, en memoria, lo ve abierto. Todo lo demás son detalles.

Comparte este post:

Es tu post

Estas seguro? Esto no se puede deshacer.

Comentarios (0)

Sin comentarios todavia. Se el primero!

Deja un comentario