# Por qué un agente de IA nunca debería tener una clave privada

> Una clave concede autoridad ilimitada y todo límite encima es software. Un nombramiento se retira; una clave copiada no se descopia.

- Source: https://defiloops.com/es/blog/why-an-ai-agent-should-never-hold-a-key
- Published: 2026-07-21
- Category: Security
- Tags: agentic-wallet, ai-agents, key-management, custody
- Author: DeFiLoops

---
La forma más rápida de construir una cartera agéntica es generar una clave privada, dársela
al agente y escribir algunas reglas sobre lo que puede hacer con ella. Casi todas las
primeras versiones funcionan así, y el sector está ahora discutiendo cómo salir de ahí —
Coinbase lo ha argumentado públicamente, y el razonamiento cabe en una frase.

Una clave privada no es un permiso. Es *el* permiso. Todo lo que ponga encima es una
petición.

## Lo que una clave concede en realidad

<Compare left="Lo que dicen las reglas" right="Lo que concede la clave" verdict>
  <Fragment slot="left">
    Gasta hasta 500 USDC al mes. Solo estos tres protocolos. Nunca envíes a una dirección
    que no esté en la lista.
  </Fragment>
  <Fragment slot="right">
    Firma cualquier transacción que esta cuenta pueda hacer, por cualquier importe, a
    cualquier dirección, en cualquier red, para siempre.
  </Fragment>
</Compare>

La columna izquierda la hace cumplir el código que resulte estar corriendo entre el agente y
la red. La derecha la hace cumplir la matemática. Cuando ambas discrepan —por un fallo, un
compromiso, un modelo persuadido o un proceso reiniciado con la configuración equivocada— la
derecha gana siempre.

<Callout type="danger" title="Reglas sobre una clave son un filtro, no una frontera">
  Un filtro se evalúa contra ataques que alguien ya imaginó. Tiene que rechazar
  correctamente cosas que nunca ha visto, bajo presión adversaria, a velocidad de máquina.
  Es un trabajo difícil, y solo existe porque la clave lo hizo necesario.
</Callout>

## La asimetría que nadie planifica

Aquí está la parte que cambia la arquitectura y no la configuración.

**Una clave no se puede descopiar.**

Si una clave se filtra —una línea de log, un volcado de memoria, una dependencia
comprometida, una copia de seguridad que no debía existir— todo el que tenga una copia tiene
autoridad total, de forma permanente, y usted no puede saber cuántas copias hay. Rotarla
significa mover todos los activos a una dirección nueva, lo cual es a su vez un conjunto de
transacciones en las que ahora debe confiar.

Un nombramiento es lo contrario. Vive en la red, se comprueba en cada llamada y se retira con
una transacción que no necesita la colaboración de nadie.

<Spec title="Una clave filtrada frente a un nombramiento retirado" rows={[
  ['Cuántas copias existen', 'Clave: incognoscible. Nombramiento: no es algo que se pueda copiar'],
  ['Cómo se detiene', 'Clave: moviendo todos los activos. Nombramiento: una transacción desde su cartera'],
  ['Con qué rapidez surte efecto', 'Clave: cuando se ha movido el último activo. Nombramiento: en la siguiente llamada'],
  ['Ayuda de quién hace falta', 'Clave: gas suficiente en cada red, y tiempo. Nombramiento: de nadie'],
  ['Si el operador es hostil', 'Clave: puede que ya tenga una copia. Nombramiento: no puede concederse uno'],
]} />

## Qué sustituye a la clave

Circulan tres respuestas, y no son equivalentes.

<Steps>
  <Step title="Partir la clave (MPC o multifirma)">
    Nadie firma solo, y un motor de políticas decide qué se cofirma. Es la respuesta comercial
    dominante y una mejora genuina: ya no hay un único objeto cuyo robo termine la historia.

    Lo que no cambia es la capacidad de expresión. Lo que se cofirma sigue siendo una
    transacción arbitraria, así que el motor de políticas sigue siendo un filtro decidiendo
    si una dirección de destino es aceptable.
  </Step>
  <Step title="Mantener la clave lejos del modelo">
    Ponga la clave de firma en hardware o en un servicio aparte que el modelo no pueda leer, y
    deje que el modelo solo pida firmas. Mejor todavía: un modelo persuadido ya no puede
    exfiltrar la clave.

    Pero un modelo persuadido sí puede pedir lo que no debe, y algo tiene que juzgar la
    petición.
  </Step>
  <Step title="No darle ni clave ni vocabulario para una dirección">
    El agente es un contrato que su cuenta nombra. Lo que envía es un formulario fijo de
    casillas etiquetadas, tomadas de una lista cerrada de operaciones. No hay casilla para un
    destino ni para una carga útil; los destinos son roles, resueltos desde su cuenta cuando
    se ejecuta el paso.

    Un modelo persuadido no puede expresar "envíamelo a mí", así que nada tiene que detectar
    que lo intentó.
  </Step>
</Steps>

## Qué tenemos nosotros

Conviene ser concretos, porque "el agente es un contrato" invita a preguntar qué queda de
nuestro lado.

<Spec rows={[
  ['El agente', 'Un contrato. Su cuenta lo nombra. Una clave simple no puede ser nombrada'],
  ['El keeper', 'Una clave que tenemos. Lo único que puede hacer es decirle a ese contrato que haga una llamada'],
  ['El pagador de comisiones', 'Paga el gas. No tiene activos ni permiso permanente de gasto en ningún sitio'],
]} />

Una clave de keeper robada no puede tomar su cuenta. El contrato rechaza en la red, antes de
que ocurra la llamada: no apuntará a su cuenta directamente, no ejecutará las instrucciones
que instalan permisos o cambian la propiedad, y no tocará una operación que usted no haya
activado. Además está limitada por topes fijados en su cuenta que nada de nuestro lado puede
subir.

<Callout type="warn" title="Dónde no es hermético, dicho con claridad">
  La protección funciona como una lista de acciones prohibidas y no como una de acciones
  permitidas. Bloquea por completo una toma de control —el agente nunca puede convertirse en
  propietario ni entregar su cuenta— pero no bloquea toda vía por la que el valor podría
  moverse mediante una acción que nadie pensó en prohibir. Hemos probado cuatro ataques de ese
  tipo contra nosotros mismos, sobre una copia de la red real de Base. No hay auditoría
  externa.

  El servicio que guarda la clave del keeper también se niega a arrancar en un entorno de
  producción, a propósito, porque de momento mantiene esa clave en memoria.
</Callout>

## La puerta de un solo sentido

Una propiedad más, porque es la otra mitad de "un nombramiento se puede retirar".

Su cuenta nunca puede reapuntarse a un agente **distinto**. El primer nombramiento obliga, y
el único cambio permitido es a ninguno.

<Quote>
  Una cuenta cuyo agente se puede cambiar tiene dentro un rol: quien puede hacer el cambio.
  Ese rol es un objetivo, y el problema es que exista.
</Quote>

Es una restricción real para nosotros, no una función que disfrutemos. Significa que no
podemos parchear un agente desplegado por debajo de usted. Un agente nuevo es algo a lo que
usted se muda deliberadamente, con una cuenta nueva. Más lento para nosotros; ese es el
punto.

## Cómo evaluar cualquiera de estos

No hace falta fiarse de una página de seguridad. Pregunte qué puede escribir el agente.

Si la respuesta contiene una dirección, todos los controles que ese proveedor enumere son un
filtro entre un modelo persuadible y su dinero — y los filtros se juzgan contra los ataques
que alguien ya pensó. Si la respuesta no contiene una dirección, pregunte dónde se hace
cumplir el tope de gasto y si puede irse con sus servidores apagados.

Esas dos preguntas separan los diseños más rápido que cualquier cantidad de documentación.