El equipo detrás de Stolen Thoughts logró algo que ningún proveedor de IA daba por posible: transcribir, casi palabra por palabra, el razonamiento cifrado y oculto de Claude, GPT y Gemini. Lo hicieron sin robar ninguna clave de cifrado, solo reinyectando el mismo bloque firmado en un modelo más débil y jailbreakeado de la misma familia.
El hallazgo no se quedó en el laboratorio. Al aplicar la técnica sobre 6.708 trayectorias públicas de agentes de IA en GitHub y Hugging Face, los investigadores reconstruyeron 315.320 bloques de razonamiento y encontraron 704 secretos reales adentro, entre ellos 62 API keys y 33 contraseñas.
TL;DR
- Stolen Thoughts decodifica el razonamiento cifrado de Claude, GPT y Gemini reinyectando el bloque firmado en un modelo más débil y jailbreakeado de la misma familia.
- Los investigadores procesaron 6.708 trayectorias públicas de agentes de IA de GitHub y Hugging Face que aún tenían bloques cifrados adjuntos.
- El pipeline reconstruyó 315.320 bloques de razonamiento a partir de esas trazas.
- Restringiendo a sesiones reales (no benchmarks), hallaron 704 artefactos de privacidad: 62 API keys, 33 contraseñas, 24 tokens de acceso y 30 correos personales.
- 64 de esos 704 secretos existían únicamente dentro del razonamiento oculto, sin aparecer en la conversación visible.
- En un tally previo del proyecto ya se habían contado 351 elementos filtrados: 204 identificadores técnicos, 126 datos de PII y 23 credenciales.
- La técnica se demostró en modelos frontera de Anthropic, OpenAI y Google, con la decodificación siguiendo de cerca el conteo de tokens de pensamiento ocultos que reporta la API.
Qué pasó
Los principales proveedores de modelos de razonamiento (Claude con extended thinking, GPT con sus modelos de razonamiento, Gemini con thinking config) devuelven al cliente un bloque de pensamiento cifrado junto con la respuesta visible. Ese bloque viaja de vuelta al servidor cuando la conversación continúa, pero en teoría nadie fuera del proveedor puede leer su contenido: solo ven un texto codificado y una firma criptográfica larga.
El equipo de Stolen Thoughts demostró que esa opacidad no implica que el bloque esté atado a su sesión original. Tomaron el bloque firmado de un turno generado por un modelo fuerte (por ejemplo, claude-opus-4-8 resolviendo un problema de factorización) y lo reinyectaron como contexto previo en un modelo más débil de la misma familia, al que primero jailbrekearon con una instrucción que le pedía transcribir literalmente el razonamiento adjunto a ese turno. El modelo débil, sin poder verificar de dónde venía realmente ese bloque, obedeció y devolvió el razonamiento original casi palabra por palabra.
Repitieron el experimento con un caso real de agente: una traza de GPT-5.2 Codex ejecutando una tarea de Terminal-Bench para sanitizar un repositorio de claves API. Al decodificar el bloque cifrado con GPT-5.6 Luna, recuperaron el razonamiento interno completo, incluyendo los patrones de búsqueda y las decisiones que el modelo fuerte tomó paso a paso mientras identificaba credenciales reales en el repositorio.
Cada turno con razonamiento incluye un bloque cifrado que el cliente reenvía tal cual al siguiente turno.
Contexto e historia
Los proveedores empezaron a cifrar y firmar los bloques de razonamiento por dos motivos declarados: evitar que terceros destilen el estilo de razonamiento de un modelo propietario copiando sus cadenas de pensamiento, y permitir que el cliente reenvíe el bloque sin poder alterarlo, lo que sirve como control de integridad en conversaciones multi-turno con herramientas.
Ese diseño asumía implícitamente que el cifrado también funcionaba como límite de confidencialidad: si nadie puede leer el contenido, no importa que el cliente lo tenga en su poder ni que termine publicado sin querer en un repositorio. Stolen Thoughts rompe ese supuesto al mostrar que la firma no ancla el bloque a un usuario, una sesión ni una conversación específica. Es portable: se puede extraer, guardar y volver a usar en cualquier otro contexto donde el proveedor la acepte.
El fenómeno de fondo (agentes de IA que publican sus trazas completas de ejecución en repositorios abiertos para reproducibilidad o benchmarking) también viene creciendo. Plataformas como Hugging Face y GitHub acumulan miles de estos registros como subproducto de evaluaciones automatizadas, y hasta ahora nadie los auditaba pensando que el campo de razonamiento cifrado era, por definición, ilegible.
Cómo funciona la reinyección, en términos simples
El bloque de razonamiento cifrado no es solo texto oculto: viene acompañado de una firma que el proveedor puede validar. Cuando un cliente reenvía ese bloque en un turno posterior, el servidor lo reconoce como legítimo y continúa la conversación como si el modelo recordara haber razonado eso. Stolen Thoughts aprovecha exactamente ese mecanismo, pero apunta el bloque hacia un modelo distinto (más barato, con menos filtros) en lugar de hacia el modelo que lo generó originalmente.
💭 Clave: la firma criptográfica de un bloque de razonamiento no ata el contenido a la sesión original: es portable y se puede reproducir fuera de contexto.
Detalles técnicos y rendimiento
Para validar que el texto decodificado era fiel al razonamiento real (y no una alucinación del modelo débil inventando algo plausible), los investigadores corrieron el experimento contra 120 problemas de Codeforces por proveedor y compararon dos cifras: la cantidad de tokens de pensamiento oculto que la propia API reporta haber usado, contra la cantidad de tokens del texto decodificado al reinyectar el bloque. Según describen, ambos números siguen de cerca la misma tendencia, lo que sugiere que el modelo débil no está fabricando contenido, sino recuperando el razonamiento original casi en su totalidad.
ProveedorModelo fuerte (origen del razonamiento)Modelo débil jailbreakeado (decodifica)Resultado reportado
Anthropicclaude-opus-4-8claude-haiku-4-5-20251001Transcribe el razonamiento de factorización dentro de una etiqueta <thinking-copy>
OpenAIGPT-5.2 CodexGPT-5.6 LunaDecodifica el razonamiento de una tarea de Terminal-Bench sobre sanitización de claves API
GoogleModelo Gemini de razonamiento (sin identificador específico en la fuente)Variante Gemini jailbreakeadaLos autores afirman haber reproducido la técnica con la misma metodología, sin publicar el par exacto de modelos
A escala de corpus, el pipeline procesó 6.708 trayectorias públicas de agentes producidas por modelos de Claude, GPT y Gemini que todavía conservaban bloques de razonamiento cifrados adjuntos. De ahí salieron 315.320 bloques reconstruidos. Restringiendo el análisis a sesiones genuinas de usuarios (descartando ejecuciones de benchmark), el equipo recuperó 704 artefactos de privacidad distintos: 62 API keys, 33 contraseñas, 24 tokens de acceso y 30 direcciones de correo personales, además de nombres, direcciones postales y URLs internas. En un conteo separado del proyecto, ya se habían identificado 351 elementos filtrados, desglosados en 204 identificadores técnicos, 126 datos de PII y 23 credenciales.
El dato que más debería preocupar a cualquier equipo que publique trazas de agentes: 64 de esos 704 secretos solo existían dentro del razonamiento oculto. No estaban en el prompt visible, ni en la respuesta final, ni en ningún otro campo del log. El cifrado era literalmente lo único que los protegía.
64 de los 704 secretos hallados solo existían dentro del razonamiento oculto.
Cómo protegerte: audita tus trazas antes de publicarlas
Si tu equipo publica logs de agentes, datasets de fine-tuning o ejemplos de benchmarking que incluyen el campo de razonamiento cifrado (thinking, reasoning o similar según el proveedor), tratalo como si fuera texto plano sensible, no como un campo opaco seguro de compartir. El primer paso es auditar lo que ya publicaste.
1. Detectar bloques cifrados largos en tus archivos
Antes de escanear por secretos, conviene contar cuántos bloques de razonamiento estás a punto de publicar. Una firma cifrada suele ser una cadena base64 de miles de caracteres dentro del campo signature:
grep -o '\"signature\":\"[^\"]\{200,\}\"' trayectorias-agente.jsonl | wc -l
Ese comando cuenta cuántas entradas de tu archivo .jsonl tienen un bloque de firma de más de 200 caracteres, una señal clara de que ahí viaja razonamiento cifrado completo.
2. Escanear por secretos con herramientas dedicadas
Instalá gitleaks según tu sistema operativo:
# Windows (PowerShell, con scoop)
scoop install gitleaks
# macOS (Homebrew)
brew install gitleaks
# Linux (Debian/Ubuntu, binario)
curl -sSL https://github.com/gitleaks/gitleaks/releases/latest/download/gitleaks_linux_x64.tar.gz | tar -xz
sudo mv gitleaks /usr/local/bin/
Después corré el escaneo sobre el directorio donde guardás las trazas de tus agentes:
gitleaks detect --source ./trayectorias-agente --report-path secretos-encontrados.json
El reporte JSON lista cada coincidencia con el archivo, la línea y el tipo de secreto detectado (API key, token, credencial de base de datos). Cualquier hallazgo dentro del campo de razonamiento cuenta igual que uno en el código visible.
3. Redactar el campo de razonamiento antes de publicar
Si vas a compartir trazas por reproducibilidad pero no necesitás el bloque cifrado en sí, lo más simple es eliminarlo antes de subir el archivo:
import json
con open("trayectorias-agente.jsonl") as entrada, open("trayectorias-limpias.jsonl", "w") as salida:
for linea in entrada:
registro = json.loads(linea)
for mensaje in registro.get("messages", []):
contenido = mensaje.get("content")
if isinstance(contenido, list):
mensaje["content"] = [
bloque for bloque in contenido if bloque.get("type") != "thinking"
]
salida.write(json.dumps(registro, ensure_ascii=False) + "\n")
Este script quita cada bloque de tipo thinking de la traza antes de guardarla, así el archivo que subís a un repositorio público ya no arrastra razonamiento cifrado que alguien pueda decodificar más adelante.
⚠️ Ojo: publicar trazas de agentes de IA en GitHub o Hugging Face sin limpiar el campo de razonamiento cifrado puede filtrar secretos que ni siquiera aparecen en la conversación visible.
Impacto y análisis
El hallazgo cambia una asunción de diseño compartida por Anthropic, OpenAI y Google: que el cifrado del razonamiento es, además de protección de propiedad intelectual, una barrera de confidencialidad de facto para lo que sea que el modelo haya \"pensado\" en el camino. Stolen Thoughts muestra que esa barrera depende de que nadie tenga acceso a un modelo débil jailbreakeado de la misma familia, algo que en la práctica es trivial de conseguir.
El vector de exposición no es la API en sí, sino el ecosistema de datasets y trazas públicas que rodea al desarrollo de agentes. Cada framework de evaluación, cada benchmark reproducible y cada demo publicada como \"mirá cómo resolvió esto mi agente\" es, potencialmente, un archivo con secretos cifrados esperando a ser decodificados por cualquiera que replique la técnica.
También reabre la pregunta de qué tan aislado está realmente el razonamiento oculto del resto del sistema. Si un bloque firmado por claude-opus-4-8 puede procesarse en claude-haiku-4-5-20251001 sin que el servidor detecte nada anómalo, la firma criptográfica está validando que el bloque es auténtico, no que corresponde a la sesión o al usuario correcto.
Qué sigue
Lo esperable a corto plazo es que los tres proveedores mencionados ajusten cómo validan estos bloques: atando la firma a un identificador de conversación o de usuario para que un bloque robado de una sesión no sirva en otra, o directamente dejando de aceptar bloques de razonamiento reinyectados desde fuera del turno inmediatamente anterior. Ninguno de los tres ha confirmado públicamente un cambio de este tipo hasta la fecha de esta nota.
En paralelo, es probable que plataformas como Hugging Face y GitHub empiecen a recibir pedidos de retirada de datasets que contienen trazas de agentes sin sanitizar, y que aparezcan herramientas de escaneo específicas para el campo de razonamiento cifrado, más allá de los escáneres de secretos genéricos que ya existen hoy.
📖 Resumen en Telegram: Ver resumen
Probalo vos: corré gitleaks detect sobre el último dataset de trazas de agentes que publicaste o descargaste, y confirmá si algún bloque de razonamiento se te coló sin limpiar.
Preguntas frecuentes
¿Qué es exactamente Stolen Thoughts?
Es una investigación que demuestra cómo decodificar el razonamiento cifrado que devuelven modelos de Claude, GPT y Gemini, reinyectando el bloque firmado en un modelo más débil y jailbreakeado de la misma familia, sin necesidad de romper el cifrado en sí.
¿Esto significa que mis conversaciones normales con un chatbot están expuestas?
El riesgo documentado se concentra en trazas de agentes de IA publicadas públicamente (en GitHub o Hugging Face) que todavía incluyen el bloque de razonamiento cifrado. Una conversación privada que nunca se publica no está expuesta por esta vía.
¿Por qué el razonamiento no se envía directamente en texto plano si igual se puede decodificar?
El cifrado sigue cumpliendo su función original: evitar que un tercero lea el razonamiento con solo interceptar el tráfico o abrir el archivo. Stolen Thoughts no rompe el cifrado, aprovecha que el bloque firmado es aceptado por otro modelo de la misma familia.
¿Cómo sé si ya publiqué trazas con razonamiento cifrado expuesto?
Buscá el campo thinking o reasoning con un signature largo en tus archivos .jsonl y corré un escáner de secretos como gitleaks sobre esos archivos, tal como se detalla en la sección \"Cómo protegerte\" de esta nota.
¿Los proveedores consideran esto una vulnerabilidad de seguridad?
La fuente original no reporta una respuesta oficial de Anthropic, OpenAI o Google al momento de esta publicación. El hallazgo se enmarca como investigación de seguridad sobre el diseño de los bloques de razonamiento cifrados.
¿Qué debería hacer si encuentro una API key filtrada en una traza pública?
Rotá esa credencial de inmediato, incluso si el archivo lleva tiempo publicado. Una vez que un secreto queda expuesto en un repositorio público, hay que tratarlo como comprometido, sin importar cuántas personas hayan podido verlo realmente.
Referencias
- Stolen Thoughts: fuente original de la investigación, con las cifras de trayectorias analizadas, bloques reconstruidos y artefactos de privacidad hallados.
- Documentación de Anthropic: referencia oficial sobre el funcionamiento del razonamiento extendido y los bloques de pensamiento firmados en la API de Claude.
- gitleaks: herramienta open source usada para escanear repositorios y datasets en busca de secretos filtrados.
- detect-secrets: escáner alternativo de secretos mantenido por Yelp, útil para auditar trazas de agentes antes de publicarlas.
📱 ¿Te gusta este contenido? Únete a nuestro canal de Telegram @programacion donde publicamos a diario lo más relevante de tecnología, IA y desarrollo. Resúmenes rápidos, contenido fresco todos los días.
Top comments (0)