Respuestas verificables

Cómo comprobar que un relay no cambió tu modelo

En las rutas de reenvío sin cambios de Wokey, una respuesta puede incluir una prueba firmada que emite un AWS Nitro Enclave sobre los bytes originales que devolvió el upstream oficial. La compruebas en tu propia computadora con un verificador de código abierto, sin tener que confiar en Wokey.

El contenido de la respuesta por sí solo no prueba nada

Un relay puede poner cualquier cosa en el campo model de su JSON, y la calidad de las respuestas es una cuestión de criterio. Para demostrar que una respuesta es exactamente lo que devolvió el upstream oficial, necesitas una firma que el relay no pueda falsificar y que tú puedas comprobar por tu cuenta.

Cómo se genera una prueba

La salida oficial se ejecuta dentro de un AWS Nitro Enclave, un entorno de ejecución confiable y aislado. Para cada solicitud, el enclave:

  1. 1termina dentro del enclave la conexión TLS con el upstream oficial y valida el certificado del upstream contra un paquete de CA incluido en la imagen;
  2. 2te transmite la respuesta mientras calcula su hash, sin almacenar el cuerpo completo;
  3. 3firma una declaración con una clave Ed25519 que se genera al arrancar y nunca sale del enclave. La declaración incluye el host upstream, la ruta, el método, el estado, el content type y el SHA-256 del cuerpo de la solicitud y del cuerpo de la respuesta;
  4. 4adjunta una attestation de AWS Nitro que vincula la clave pública de firma y la medición de la imagen del enclave (PCR0) con el certificado raíz de AWS Nitro.

Qué puedes comprobar localmente

  • la attestation se encadena al certificado raíz de Nitro que fijaste a partir de la documentación de AWS;
  • PCR0 coincide con el valor publicado en el repositorio de código abierto, que puedes reproducir compilándolo tú mismo, así que el enclave ejecuta ese código público;
  • el hash de los bytes que recibiste coincide con response_body_sha256 de la declaración, así que el relay no cambió ni un byte;
  • el host upstream de la declaración es oficial, por ejemplo api.anthropic.com para solicitudes de Claude. El campo model de la respuesta forma parte de los bytes originales firmados que devolvió el upstream oficial.

Qué respuestas incluyen una prueba

Requisito: activa "Verificación oficial" para la clave de API en la página API.

SolicitudCómo se entrega la prueba
Anthropic Messages en streaming (/v1/messages, stream: true)El SSE del upstream se reenvía tal cual, seguido de un event: tee.proof al final
OpenAI Responses en streaming (/v1/responses, rutas oficiales de Codex)El SSE del upstream se reenvía tal cual, seguido de un event: tee.proof al final
Messages / Responses sin streamingEnvía el encabezado x-wokey-tee-proof-mode: multipart para recibir multipart/mixed: la primera parte son los bytes originales del upstream (el SSE del upstream en Responses) y la segunda es la prueba

Qué respuestas no incluyen prueba

  • Las respuestas que Wokey convierte o vuelve a serializar por compatibilidad de formato, como llamar a Claude a través de Chat Completions. Firmar bytes modificados sería engañoso, así que estas respuestas nunca incluyen una prueba.
  • La generación y edición de imágenes, incluido Studio, siempre omiten el enclave y no producen prueba.
  • Cuando el enclave no está disponible temporalmente, la solicitud usa la salida oficial sin el enclave, y esa respuesta no tiene prueba.
  • Si pides una prueba multipart en una ruta que no puede reenviar la respuesta tal cual, Wokey devuelve HTTP 422 tee_proof_multipart_requires_raw_passthrough en lugar de una prueba falsa.

Basta una regla: trata cualquier respuesta sin tee.proof como no probada.

Qué no demuestra una prueba

  • Demuestra integridad, no confidencialidad. El relay de Wokey sigue manejando el texto plano en tránsito (no se almacena). Si necesitas que el operador no pueda leer tu tráfico, esto no lo cubre.
  • El hash del cuerpo de la solicitud cubre el cuerpo que realmente se envió al upstream. Cuando el gateway reescribe una solicitud (por ejemplo, a las solicitudes de Responses se les completan algunos campos), no coincidirá con tu cuerpo original local, así que por ahora las pruebas de Responses solo prueban la respuesta.
  • Entre solicitudes idénticas byte a byte, como los reintentos, el verificador no puede detectar que se repitió una respuesta antigua.
  • La raíz de confianza es AWS, que firma la attestation de Nitro.

Verifica una tú mismo

  1. 1

    Activa la verificación en una clave

    Crea una clave de API en la página API y activa "Verificación oficial".

  2. 2

    Guarda una respuesta en streaming

    Envía una solicitud de Messages en streaming y guarda la respuesta completa en un archivo tal cual con curl -o. El archivo debe terminar con event: tee.proof. En Windows, usa curl.exe -o en lugar de la redirección > de PowerShell o de volver a guardar en el Bloc de notas, que cambian los saltos de línea o la codificación.

    Guarda una respuesta en streaming
    curl -sN https://api.wokey.ai/v1/messages \
      -H "x-api-key: YOUR_API_KEY" \
      -H "anthropic-version: 2023-06-01" \
      -H "Content-Type: application/json" \
      -d '{"model":"claude-sonnet-5","max_tokens":256,"stream":true,"messages":[{"role":"user","content":"Hello"}]}' \
      -o captured-response
  3. 3

    Compruébala con el verificador de código abierto

    Reemplaza <PCR0> por el PCR0 canónico publicado en el README del repositorio y ejecuta el verificador. También puedes pegar el archivo en el verificador del navegador; todas las comprobaciones se ejecutan localmente.

    Compruébala con el verificador de código abierto
    git clone https://github.com/focuxdot/proof-of-observation
    cd proof-of-observation/verifier
    npm install
    npx tsx tee-verify-stream.ts ../../captured-response --pcr0 <PCR0>