← Blog ·

Vibe coding y seguridad: cómo crear apps con IA sin regalar tus API keys

El vibe coding —programar dejando que un asistente de IA escriba la mayor parte del código mientras tú describes lo que quieres— ha cambiado cómo se construyen apps. También ha cambiado cómo se filtran las API keys. Cuando el código lo genera un modelo que no entiende de seguridad por defecto, hardcodear un secreto en el archivo que tiene delante es el camino de menor resistencia.

Este artículo explica por qué el vibe coding y la seguridad chocan de forma tan frecuente, y qué hacer para que tu próxima app generada con IA no acabe con tus claves de Stripe, OpenAI o tu base de datos expuestas en un repo público.

Por qué el vibe coding es un riesgo real para tus secretos

Cuando pides a un asistente de IA "conecta esto con la API de Stripe", lo más probable es que genere algo así:

const stripe = require('stripe')('sk_live_51Hxxxxxxxxxxxx');

Funciona a la primera. Ese es el problema. El modelo no sabe si ese código va a un commit, a un repo público, a un log de errores o al historial de un chat que tu editor guarda sin cifrar en disco. No es malicia: es que el objetivo del modelo es que el código corra, no que sea seguro.

Los asistentes de IA sugieren hardcodear claves

Es el patrón más común. Pides una función, la IA la resuelve con la clave incrustada porque es la forma más simple de que el ejemplo compile. Si no revisas cada línea —y en vibe coding, por definición, revisas menos— esa clave llega al commit.

El propio prompt es una fuga

Muchos flujos de vibe coding pegan .env completos, tokens de servicio o credenciales de base de datos dentro del prompt "para que la IA tenga contexto". Ese texto puede quedar en logs del proveedor del modelo, en el historial local del editor o en capturas compartidas para pedir ayuda en un foro.

Los repos generados con IA heredan malos hábitos a escala

Si generas diez proyectos en una tarde con IA, y en cada uno el asistente hardcodea una clave, tienes diez superficies de exposición en vez de una. El volumen de código que produce el vibe coding hace que los errores de siempre se repitan más rápido. Profundizamos en esta dinámica en /ai-security.

Reglas básicas de vibe coding security antes de escribir una línea

Antes de abrir el editor:

  1. Ningún secreto entra nunca en el código ni en el prompt. El código referencia un nombre (STRIPE_SECRET_KEY), nunca un valor.
  2. Ningún secreto entra en .env versionado. Si tu asistente de IA sugiere crear un .env con valores reales y hacer commit "solo para probar", no lo aceptes.
  3. Los secretos de producción y desarrollo están separados por entorno. Un asistente de IA no debería tener acceso a las claves de producción mientras genera código de prueba.
  4. Alguien —o algo— gestiona quién puede leer cada secreto y cuándo. No una carpeta compartida en Slack.

Cómo referenciar secretos por nombre en vez de por valor

Aquí es donde entra un gestor de secretos como Koove: el código nunca ve el valor real, solo un nombre. Guardas el secreto una vez desde la CLI:

npm install -g @koove/secrets-cli

koove set STRIPE_SECRET_KEY sk_live_51Hxxxxxxxxxxxx --env prod
koove set OPENAI_API_KEY sk-xxxxxxxxxxxx --env dev

A partir de ahí, cuando le pides a tu asistente de IA "integra el pago con Stripe", el código que genera solo necesita saber el nombre:

// El asistente de IA nunca ve ni escribe el valor real
const stripeKey = await getSecret('STRIPE_SECRET_KEY');

Puedes revisar qué hay guardado y en qué entorno sin exponer los valores:

koove list --env prod

Y si importas un .env heredado de un prototipo hecho con IA, lo migras de golpe en vez de dejarlo en el repo:

koove import .env --env dev

Cada secreto se cifra con envelope encryption (X25519 + AES-256-GCM, derivación con HKDF-SHA256) usando primitivas open-source (@koove/crypto). El servidor de Koove solo almacena ciphertext: no hay una versión en claro de tu clave de Stripe en ningún backend de Koove.

Desde el móvil: descifrado detrás de biometría, no de un token suelto

Si tu app consume esos secretos desde un cliente móvil (React Native/Expo, dev build), el SDK verifica primero que el dispositivo es real antes de dejar pasar nada:

import { KooveClient } from '@koove/sdk';

const client = new KooveClient({
  apiUrl: process.env.KOOVE_API_URL,
  appId: process.env.KOOVE_APP_ID,
  appToken: process.env.KOOVE_APP_TOKEN,
});

await client.init(); // attestation (App Attest / Play Integrity) + registro del dispositivo

const stripeKey = await client.decryptSecret(envelope); // pide biometría

La atestación se verifica de extremo a extremo sobre hardware físico real en iPhone y Pixel, sin bypass para desarrolladores: si el dispositivo no pasa la comprobación del sistema operativo, no hay secreto que descifrar. Los detalles de la arquitectura están en /security, y la referencia completa de comandos y SDK en /docs/sdk.

Los límites que debes conocer

Ser honestos sobre esto es parte de cómo trabajamos:

  • El cifrado de Koove no tiene forward secrecy (no hay ratchet como en protocolos de mensajería). Es envelope encryption con X25519 + AES-256-GCM, sólido para gestión de secretos, pero no equiparable a las garantías de un protocolo de mensajería cifrada.
  • Revocar el acceso de un dispositivo (koove device-revoke) impide que ese dispositivo vuelva a pedir secretos, pero no borra un valor que ese dispositivo ya descifró antes de la revocación. Si un secreto se ha comprometido, rótalo (koove set con un nuevo valor y koove rewrap), no confíes solo en la revocación.
  • Koove no hace que tu app sea "inhackeable": reduce drásticamente la superficie de exposición de secretos, que es donde falla la mayoría del código generado con IA hoy.

Puedes revisar el resto de preguntas frecuentes en /faq y comparar planes en /plans.

En la práctica

El vibe coding no va a desaparecer, y no tiene por qué ser inseguro. El problema no es que la IA escriba código, es que ese código a veces necesita secretos y, por defecto, los pide de la forma más insegura posible. Cambiar el hábito es simple: que el asistente escriba getSecret('NOMBRE') en vez de un valor real, y que ese nombre resuelva a un secreto cifrado que solo se descifra tras verificar quién lo pide.

Si quieres dejar de pegar claves reales en tus prompts, regístrate en Koove y añade tu primer secreto en menos de un minuto.

Código generado por IA

Tu IA escribe el código. ¿Quién guarda los secretos?

El fallo de seguridad más común en apps generadas con IA son las credenciales expuestas. Con Koove, tu propio asistente guarda cada token desde la CLI — cifrado en tu máquina, nunca en el código ni en el repo.