La huella digital de 90 segundos: lo que ECH realmente oculta
El Encrypted Client Hello (ECH) de Vercel oscurece los nombres de host SNI en la capa CDN. Bien. Un observador pasivo ya no puede leer qué endpoint está llamando tu agente. Pero hemos visto agentes filtrar su gráfico de herramientas completo en menos de 90 segundos, sin ver nunca un nombre de host.
Así es cómo: ECH cifra SNI + ClientHello. No cifra el tiempo de los paquetes, el tamaño de los paquetes o las distribuciones de registros TLS. La API de streaming de OpenAI envía fragmentos con una cadencia inter-token reconocible, aproximadamente 30–80ms por token dependiendo del modelo. Los puntos finales de inferencia de Hugging Face tienen una distribución diferente, más plana e irregular. Un clasificador entrenado en 500 muestras de cada proveedor alcanza una precisión del 85% en la atribución de proveedores dentro de un agente de 4 proveedores usando solo deltas de tiempo y longitudes de registros TLS. El mismo agente, tres llamadas externas, 90 segundos de captura de cable, nombre de host completamente redactado.
Las fugas de recuento de tokens son peores. Un registro TLS de 2KB casi siempre se correlaciona con un límite de tokenizador. La respuesta de uso de OpenAI incluye recuentos de tokens exactos en el cuerpo de la respuesta; ese recuento se registra por defecto. Una ventana de contexto de 8K frente a 128K es visible en el tamaño del registro final antes del cierre. Puedes inferir si un agente accedió a un sistema de recuperación, qué tan profundo va el contexto y qué proveedor manejó la llamada, todo observando el cable sin romper el cifrado.
Tu instrumentación es la nueva superficie de ataque
La fuga real no está en el cable. Está en tus registros, trazas y métricas, la infraestructura que posees y envías abiertamente a Datadog, Sentry, LangSmith y lo que sea que hayas conectado. La privacidad de la red movió la superficie de ataque hacia adentro.
Por defecto, los nombres de span de OpenTelemetry incluyen modelo y endpoint: openai.chat.completions, huggingface.inference. Las cargas útiles de prompt y finalización aterrizan en migas de pan de Sentry. Los recuentos de tokens aparecen en etiquetas de métricas, huellas dactilares de alta cardinalidad de la intención del usuario. Los enviadores de registros de terceros se convierten en exfiltración fuera de banda para la misma información de proveedor que ECH intentó ocultar. Un interno con acceso de lectura a tu capa de observabilidad puede reconstruir el gráfico de herramientas del agente en segundos. Un enviador de registros comprometido (sucede) es un volcado completo de qué proveedores llamas, cuándo y con qué intención.
El modelo de amenaza cambió. El MITM externo es más difícil ahora. La visibilidad interna + cadena de suministro es el nuevo apalancamiento. Vercel Connect muestra ciclos de vida de tokens e IDs de correlación por conector, pero la observabilidad se detiene en la capa del conector, no en el agente. Esa es la brecha.
Tiempo, tokens y errores: las tres fugas que todos envían
La mayoría de los equipos no redactan antes de exportar. Seamos concretos sobre lo que se filtra:
Tiempo: La varianza TTFT (tiempo al primer token) entre GPT-4o (~350ms promedio) y Claude (~600ms promedio) es una indicación de proveedor en cualquier sistema de trazas. Los percentiles de latencia en tu panel de métricas son una huella digital de proveedor. Un tiempo de respuesta del percentil 90 de 450ms susurra "OpenAI" a cualquiera con acceso a tu Prometheus.
Uso de tokens: prompt_tokens en atributos de span filtra la tasa de aciertos de recuperación y la profundidad del contexto. Un pico de 500 a 3500 tokens te dice que el agente accedió a un sistema de recuperación y cargó contexto. El patrón de deltas de tokens entre llamadas revela la lógica de ramificación en el árbol de decisión del agente.
Errores: Un 429 (límite de velocidad) frente a 529 (sobrecargado) frente a una firma 4xx personalizada se asigna 1:1 al proveedor incluso cuando los nombres de host se eliminan. Los encabezados Retry-After ecoados en registros re-exponen al proveedor. Los IDs de correlación de proveedores ascendentes (el x-request-id de OpenAI) pasados sin cambios son tatuajes de proveedor en tus registros de auditoría.
Patrones de endurecimiento que ahora enviamos por defecto
Comienza con las partes que controlas. Ahora hacemos estas preguntas en cada implementación de producción:
Agrupa métricas de tiempo en histogramas gruesos (cubos de 50ms, no milisegundos sin procesar) antes de exportar. Redacta la cola; la latencia del percentil 99 es útil, los tiempos de respuesta individuales no lo son.
Haz hash de IDs específicos del proveedor en el procesador de span, no en el panel. No confíes en la sanitización posterior. x-request-id → hash SHA256 antes de que cualquier enviador de registros lo vea.
Unifica taxonomías de errores. Normaliza 429/529/quota_exceeded a un único código interno pre-registro. Elimina mensajes de error del proveedor. Registra solo el valor enum interno.
Separa telemetría 'ops' de 'debug'. Las tasas y latencias p99 van al almacenamiento a largo plazo. Las cargas útiles sin procesar, recuentos de tokens e IDs de correlación viven en registros de depuración de retención corta con controles de acceso. Diferentes políticas de retención, diferentes ACL.
Relleno de respuesta de tiempo casi constante para llamadas de servicio a servicio donde el modelo de amenaza lo justifica. Para llamadas externas de agente a proveedor, la relación señal-ruido del relleno no vale el costo de latencia. Para composición de herramientas internas, puede serlo.
Listas de permitidos de egreso a través de AI Gateway. Las reglas de enrutamiento de AI Gateway de Vercel sacan el failover del código. Un beneficio secundario: no ocurre resolución de DNS en el momento de la llamada, sin fuga de canal lateral a través de registros de resolvedores. Los cambios de proveedor permanecen internos.
Cuando ECH + Gateway + Redacción no es suficiente
Algunas cargas de trabajo demandan cambios arquitectónicos. No puedes registrar tu camino fuera de estos:
Agentes multi-tenant: Los perfiles de tiempo de un tenant filtran los patrones de uso de otro. Si tu arquitectura no está ya aislada por tenant en el límite del servicio, la higiene de observabilidad no lo arreglará.
Datos regulados: HIPAA, PCI o política interna: cualquier atribución de proveedor en registros es un hallazgo. La inferencia auto-hospedada es la única solución, con compensaciones de costo real. Posees el modelo, los registros, la superficie de amenaza.
Agrupamiento + desacoplamiento asincrónico. Si tu agente orquesta llamadas de forma asincrónica (agrupa 10 solicitudes, procesa respuestas en 5 minutos), las correlaciones de tiempo desaparecen. Este es un control de privacidad, no solo un control de latencia. Pero cambia completamente el modelo de interacción de tu agente.
Trazamos la línea en compromisos de cliente donde la redacción es defendible. Visibilidad de recuento de tokens + normalización de errores + sin IDs de correlación es una línea de base sólida. Donde el modelo de amenaza exige oscuridad de proveedor en los registros mismos, generalmente hablamos sobre tratar el pipeline de evaluación como una superficie de ataque e aislarlo antes de endurecer la observabilidad.
Audita tu stack esta noche
Abre una trazas de producción de tu agente. Si puedes identificar al proveedor a partir de atributos de span sin leer el nombre de host, ECH no te compró nada. Comienza con normalización de errores y redacción de recuento de tokens en tus procesadores de span. Si envías Datadog o Sentry, audita lo que está aterrizando en migas de pan esta noche. Los IDs de correlación y la varianza de tiempo son los próximos objetivos.
Si tu modelo de amenaza exige más, si la atribución de proveedor en registros es en sí misma una violación, habla con nosotros en /contact sobre aislamiento arquitectónico. No hay forma de cifrar tu camino fuera de los canales laterales de observabilidad. La privacidad comienza con lo que registras.