Referencia técnica pública · v1.0

Esquema de manifiesto de paquete de evidencia de agente de IA

Un manifiesto de paquete de evidencia nombra la exportación sellada, el alcance del tenant, los artefactos retenidos, la raíz Merkle, los enlaces a registros y los anclajes de integridad. Úselo cuando una exportación de Evidence Room se traslada entre KLA y un verificador sin conexión.

Especificación del paquete · evidence-room-bundle-v1 · formato de manifiesto 1.0

Referencia rápida del manifiesto de paquete de evidencia

Definición
El registro de sello manifest.json de un paquete de evidencia exportado.
Se usa cuando
Una exportación sellada se inspecciona, se transfiere o se verifica sin conexión.
Mínimo
Identidad, metadatos de exportación, digests de artefactos, raíz Merkle y anclajes de integridad.
Verificación
Normalizar, calcular el hash, verificar firmas, comprobar la inclusión de artefactos y ejecutar los anclajes aplicables.

02

Dónde se sitúa el manifiesto dentro del paquete

El exportador escribe un directorio con un resumen, un manifiesto, un JWS separado, claves públicas incrustadas, una prueba de sello de tiempo, un anclaje de ledger y los artefactos exportados.

  1. 01Resumen de sellobundle.json registra los identificadores de exportación y de tenant, el digest del manifiesto, la raíz Merkle, el recuento de artefactos, las clases de firmantes requeridas, el recibo de sello de tiempo y las rutas de anclaje de ledger.
  2. 02Manifiestomanifest.json registra los metadatos de exportación, las rutas y digests de artefactos, la vinculación de registros, los metadatos Merkle, los metadatos de redacción y omisión, y los anclajes de integridad.
  3. 03Material criptográficomanifest.jws.json lleva firmas ES256 separadas sobre el digest del manifiesto. keys/jwks.json proporciona claves públicas incrustadas para comprobaciones sin conexión.
  4. 04Bytes de evidenciaartifacts/exports contiene archivos JSON, CSV o PDF exportados. artifacts/index/artifact_index.json indexa el conjunto exportado.
  5. 05Anclajes externostimestamp.ots contiene la prueba OpenTimestamps. ledger_anchor.json contiene el anclaje immudb o el registro NOT_PRESENT del productor.
<bundle-dir>/
  bundle.json
  manifest.json
  manifest.jws.json
  keys/jwks.json
  timestamp.ots
  ledger_anchor.json
  artifacts/exports/...
  artifacts/index/artifact_index.json

03

Diccionario de campos

Los campos obligatorios provienen del contrato actual de paquete sellado. Los campos condicionales aparecen cuando el productor registra el alcance o el detalle de Evidence Factory correspondiente. Los campos opcionales aportan contexto adicional de la exportación.

Identidad del paquete y exportación

CampoEstadoPropósito
formatVersionObligatorioSelecciona el formato de manifiesto sellado; el productor actual emite 1.0.
bundleSpecObligatorioIdentifica evidence-room-bundle-v1.
exportIdObligatorioVincula el manifiesto a una exportación.
tenantIdObligatorioIndica el alcance de tenant que lleva la exportación.
createdAtObligatorioRegistra cuándo se creó el registro de exportación.
exporter.nameObligatorioIdentifica el exportador que produjo el paquete.
exporter.versionObligatorioIdentifica la versión del exportador.
export.exportIdObligatorioDebe coincidir con el exportId de nivel superior.
export.tenantIdObligatorioDebe coincidir con el tenantId de nivel superior.
export.environmentObligatorioRegistra la etiqueta del entorno de origen.
export.platformVersionObligatorioRegistra la versión de la plataforma proporcionada por el productor.
export.requestedByObligatorioRegistra la referencia del solicitante de la exportación.
export.requestedAtObligatorioRegistra la hora de la solicitud de exportación.
export.sealedAtObligatorioRegistra cuándo se escribió el sello.
export.traceIdsObligatorioLleva las referencias de traza asociadas a la exportación.
export.policySnapshotsObligatorioLleva las referencias de instantáneas de políticas seleccionadas por el exportador.

Artefactos y vinculación

CampoEstadoPropósito
artifacts[]ObligatorioEnumera cada artefacto exportado cubierto por la raíz Merkle.
artifacts[].pathObligatorioResuelve el artefacto dentro del directorio del paquete.
artifacts[].sha256ObligatorioIndica el digest SHA-256 de los bytes del artefacto.
artifacts[].bytes or sizeBytesObligatorioPermite al verificador comparar el tamaño declarado con el archivo.
artifacts[].contentTypeObligatorioDescribe el tipo de contenido del archivo exportado.
artifacts[].classOpcionalEtiqueta una clase de artefacto como execution-evidence o artifact-index.
artifacts[].provenanceOpcionalLleva metadatos de procedencia del productor para el artefacto.
artifacts[].createdAtOpcionalRegistra cuándo se creó el artefacto.
artifacts[].sourceOpcionalVincula el artefacto a un tipo de origen y una referencia.
record.decisionRequestIdOpcionalVincula el paquete a la solicitud de decisión que lo gobierna.
record.executionIdOpcionalVincula el paquete a una ejecución.
record.lineageRecordIdOpcionalVincula el paquete al linaje de ejecución.
scopeOpcionalDescribe la población de la exportación o el límite temporal cuando se proporciona.
profileOpcionalRegistra el perfil de evidencia seleccionado por el productor: full, redacted o minimal.
omissionsOpcionalRegistra las omisiones declaradas.
redactionsOpcionalRegistra los metadatos de redacción declarados.

Sello y evidencia de gobernanza condicional

CampoEstadoPropósito
merkle.algorithmObligatorioIdentifica kla-merkle-v1.
merkle.rootSha256ObligatorioSe compromete con el conjunto ordenado de rutas y digests de artefactos.
integrity.manifestHashAlgoObligatorioIdentifica SHA-256 para el digest del manifiesto.
integrity.manifestHashObligatorioAlmacena el digest hexadecimal sin procesar del manifiesto normalizado.
integrity.signatureAlgoObligatorioIdentifica el algoritmo de firma del manifiesto, actualmente ES256.
integrity.signaturePayloadObligatorioIndica que la carga útil de la firma es MANIFEST_HASH.
integrity.signingKeyIdObligatorioIdentifica la referencia de la clave de firma del productor.
integrity.anchors[]ObligatorioEnumera los registros de anclaje de sello de tiempo y de ledger.
evidenceFactory.request.requestedArtifactsCondicionalDetermina si receipt-signatures y ledger-hash-chain son obligatorias.
evidenceFactory.contractVersionCondicionalIdentifica el contrato de solicitud de Evidence Factory cuando se incrusta una solicitud de factory.
evidenceFactory.request.tenantIdCondicionalLleva la vinculación de tenant para la solicitud de Evidence Factory incrustada.
evidenceFactory.request.actorCondicionalIdentifica el actor humano o de servicio que solicitó la exportación de factory.
evidenceFactory.request.sourceCondicionalIdentifica la superficie de KLA que solicitó la exportación de factory.
evidenceFactory.request.scopeCondicionalLleva la cronología y los selectores usados para la exportación de factory.
evidenceFactory.request.redactionProfileCondicionalIndica el perfil de redacción de la exportación de factory.
evidenceFactory.request.idempotencyKeyCondicionalLleva la clave de idempotencia de la solicitud.

04

Ejemplo completo mínimo

Este manifiesto sintético usa el mismo identificador de exportación y los mismos enlaces a registros que la referencia de ejecución completa. El resumen del paquete complementario repite los valores de sello que compara el verificador.

{
  "bundle": {
    "exportId": "bundle_manifest_synthetic_20260721_01",
    "tenantId": "tenant_synthetic_001",
    "manifestDigestSha256": "1bae725ba61cf55f94310e37ee491d3d52145d98da8580df63e0b91fa9968117",
    "merkleRootSha256": "cb170b4d42403ed97c4818a723ebd93607902a84159deb4555357bc73a432102",
    "artifactCount": 2
  },
  "manifest": {
    "formatVersion": "1.0",
    "bundleSpec": "evidence-room-bundle-v1",
    "record": {
      "decisionRequestId": "dr_01JZ8V4Q4N9K6T2D5B3M7X1S0E",
      "executionId": "run_01JZ8V4K2D9A6N3P7M5R1C8X0E",
      "lineageRecordId": "lin_01JZ8V4R8A2C6N9Q3S5D7M1T0E"
    },
    "artifacts": [
      {
        "path": "artifacts/exports/evidence-export-synthetic.json",
        "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
        "bytes": 128,
        "sizeBytes": 128,
        "contentType": "application/json",
        "class": "execution-evidence",
        "source": {
          "type": "synthetic",
          "ref": "run_01JZ8V4K2D9A6N3P7M5R1C8X0E"
        }
      },
      {
        "path": "artifacts/index/artifact_index.json",
        "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
        "bytes": 64,
        "sizeBytes": 64,
        "contentType": "application/json",
        "class": "artifact-index",
        "source": {
          "type": "synthetic",
          "ref": "bundle_manifest_synthetic_20260721_01"
        }
      }
    ],
    "integrity": {
      "manifestHashAlgo": "SHA-256",
      "manifestHash": "1bae725ba61cf55f94310e37ee491d3d52145d98da8580df63e0b91fa9968117",
      "signatureAlgo": "ES256",
      "signaturePayload": "MANIFEST_HASH",
      "signingKeyId": "sample-key-sek-synthetic-01",
      "anchors": [
        {
          "type": "immudb",
          "status": "NOT_PRESENT",
          "reason": "IMMUDB_DISABLED",
          "ledger": "immudb",
          "proofPath": "ledger_anchor.json",
          "valueHash": ""
        },
        {
          "type": "ots",
          "status": "PRESENT",
          "proofPath": "timestamp.ots"
        }
      ]
    }
  }
}

Valid seal values

The manifest digest is 1bae725ba61cf55f94310e37ee491d3d52145d98da8580df63e0b91fa9968117. The Merkle root is cb170b4d42403ed97c4818a723ebd93607902a84159deb4555357bc73a432102.

Cross-reference

The record fields and export identifier connect this file to the complete sanitized execution record and its evidence.manifest_ref.

Download the companion bundle summary

05

Integridad y verificación sin conexión

El verificador de producción trata los bytes del paquete y los manifiestos como entrada no confiable y falla de forma cerrada cuando una comprobación obligatoria falla. El procedimiento tiene seis comprobaciones con nombre.

manifest-signature

Firma del manifiesto

Normaliza el manifiesto, calcula el digest JCS/SHA-256, compara los resúmenes del manifiesto y del paquete, comprueba la carga útil separada, valida las firmas ES256 de SEK y TEK contra claves incrustadas no revocadas y valida las rutas de anclaje declaradas.

receipt-signatures

Firmas de recibos

Cuando hay material de gobernanza EvidenceEntry[] presente, verifica las firmas de recibo Ed25519, las claves incrustadas, el estado de revocación y los enlaces prevReceiptHash. El material de recibo sin firmar sigue la ruta explícita de recibo sin firmar del verificador.

ledger-hash-chain

Cadena de hashes del ledger

Cuando hay material de gobernanza EvidenceEntry[] presente, recalcula los hashes de los registros del ledger, aplica las transformaciones de redacción registradas, comprueba los hashes de las entradas y exige un único componente de ledger conectado.

merkle-inclusion

Inclusión Merkle

Resuelve cada ruta declarada dentro del paquete, compara el tamaño del archivo y el SHA-256, recalcula kla-merkle-v1, comprueba las pruebas de inclusión cuando se proporcionan y compara la raíz y el recuento de artefactos con bundle.json.

ots-anchor

Anclaje OpenTimestamps

Analiza timestamp.ots, comprueba su compromiso SHA-256 contra el digest del manifiesto y acepta una prueba de calendario pendiente o una atestación de Bitcoin dentro del límite de confianza del verificador sin conexión.

pii-absence

Ausencia de PII

Se ejecuta solo cuando el llamante proporciona marcadores prohibidos. Escanea los archivos del paquete como bytes, informa los digests de marcadores enmascarados y falla cuando un archivo listado o el manifiesto no puede leerse.

Valid synthetic manifest

The declared digest reproduces from the normalized manifest. The declared Merkle root is computed from the two sorted artifact entries. A complete on-disk bundle supplies the bytes and detached signatures for the remaining checks.

Single artifact-digest tamper

The tampered file changes one artifact sha256 from the valid example while retaining the original manifest digest and Merkle root. The manifest remains schema-valid. Digest comparison fails, and the full merkle-inclusion check also compares the declaration with the artifact bytes.

  1. 01Leer bundle.json, manifest.json, manifest.jws.json, keys/jwks.json y los archivos de anclaje declarados desde el directorio del paquete.
  2. 02Validar la estructura del manifiesto y mantener cada ruta dentro del directorio del paquete.
  3. 03Dejar en blanco los campos integrity.manifestHash y valueHash del anclaje immudb, canonicalizar con el orden de estilo JCS del exportador y calcular el SHA-256.
  4. 04Comparar el digest calculado con manifest.json, bundle.json y la carga útil del JWS separado. Verificar las firmas ES256 de SEK y TEK con las claves públicas incrustadas.
  5. 05Determinar si las comprobaciones de evidencia de gobernanza son obligatorias: un array requestedArtifacts ausente, execution-evidence o raw-evidence, archivos de evidencia encontrados en el paquete o errores de carga de evidencia activan receipt-signatures y ledger-hash-chain.
  6. 06Ejecutar las seis comprobaciones en el orden del verificador. Un llamante puede añadir marcadores prohibidos para la comprobación opcional pii-absence. El paquete pasa solo cuando pasa cada comprobación aplicable.

06

Correspondencia con la implementación actual de KLA

Estas fuentes del repositorio definen el productor, el contrato del manifiesto, el verificador y las comprobaciones individuales descritas aquí.

ContractRepository source pathMappingStatus
BundleManifest / BundleJsonpackages/evidence-verifier/src/types.tsDefine las formas de manifiesto, resumen, artefacto, anclaje, registro, JWS, JWKS, comprobación y verificación.Fuente actual
Contrato de manifiesto selladopackages/evidence-contract/src/index.tsValida los campos obligatorios del productor: formatVersion, exportación, artefactos, Merkle, registro e integridad.Fuente actual
Productor del paqueteservices/evidence-exporter/src/export-api.tsEscribe bundle.json, manifest.json, el JWS separado, el JWKS, la prueba OTS, el anclaje de ledger y el índice de artefactos.Productor actual
Orquestación de la verificaciónpackages/evidence-verifier/src/verifier.tsCarga bytes no confiables, elige las comprobaciones condicionales y falla de forma cerrada en todo el conjunto de resultados aplicable.Verificador actual
Comprobaciones de manifiesto y Merklepackages/evidence-verifier/src/checks/manifest-signature.ts; packages/evidence-verifier/src/checks/merkle-inclusion.tsVerifica la coherencia de digest/firmas/resumen y los bytes, rutas, tamaños, hashes y raíz de los artefactos.Comprobaciones actuales
Comprobaciones de evidencia y anclajespackages/evidence-verifier/src/checks/receipt-signatures.ts; packages/evidence-verifier/src/checks/ledger-hash-chain.ts; packages/evidence-verifier/src/checks/ots-anchor.ts; packages/evidence-verifier/src/checks/pii-absence.tsVerifica la evidencia condicional de recibos y ledger, además de OTS y los escaneos opcionales de marcadores.Comprobaciones actuales

Deliberate abstractions

  • El esquema descargable valida manifest.json. El resumen bundle.json separado se describe en el mismo esquema bajo $defs.bundleJson y lo compara el verificador de producción.
  • Los ejemplos sintéticos contienen metadatos del manifiesto y digests de artefactos. No incluyen bytes de artefactos, firmas JWS, JWKS, bytes de prueba OTS ni archivos de anclaje de ledger.
  • El verificador de referencia calcula el digest del manifiesto normalizado y acepta una firma ES256 separada opcional. packages/evidence-verifier sigue siendo el verificador de producción para el paquete completo en disco.
  • La página describe el comportamiento condicional de receipt-signatures y ledger-hash-chain. Un ejemplo de integridad independiente de firma ausente o versión no admitida sigue aplazado por decisión del fundador.
  • El manifiesto lleva identificadores de tenant y de exportación. La verificación del paquete compara esos identificadores; la autorización, el aislamiento de tenants en el momento de la solicitud y las decisiones de retención legal siguen siendo responsabilidad de los servicios y políticas que los poseen.
  • La comprobación pii-absence requiere marcadores proporcionados por el llamante. El resultado de verificación predeterminado no hace ninguna afirmación universal de ausencia de PII.

Implementation source

The links above point to the current repository contract, exporter, and verifier. The documentation-layer reference helper lives at /ai-agent-evidence-bundle-manifest/v1/verify.ts; the production procedure remains the package verifier.

Open the production verifier source

07

Questions readers ask

The implementation boundary stays visible in the answers below.

¿Cuál es la diferencia entre bundle.json y manifest.json?

bundle.json es el resumen breve del sello. manifest.json es el manifiesto completo de exportación con entradas de artefactos, enlaces a registros, metadatos de alcance y anclajes de integridad. El verificador compara sus identificadores compartidos, el digest, la raíz Merkle y el recuento de artefactos.

¿Cuándo son obligatorias receipt-signatures y ledger-hash-chain?

El verificador las exige cuando la evidence factory solicita execution-evidence o raw-evidence, cuando falta el campo requested-artifacts, o cuando hay archivos de evidencia o errores de carga de evidencia presentes. Un paquete sin esas señales recibe resultados explícitos de no obligatorio para las dos comprobaciones.

¿Un manifiesto válido demuestra que cada decisión de acceso de tenant fue autorizada?

El manifiesto vincula la exportación a su tenant declarado y a sus referencias de registros. Las decisiones de autorización y aislamiento de tenants las evalúan los servicios que crean y exponen los registros. El verificador del paquete comprueba la coherencia interna y la integridad del paquete sellado.

¿Qué demuestra el ejemplo manipulado?

Cambia el sha256 de un artefacto manteniendo la raíz Merkle y el digest del manifiesto originales. El manifiesto sigue siendo estructuralmente válido, mientras que la comparación de digests falla. Una verificación completa en disco también compara la declaración modificada con los bytes del artefacto y la raíz Merkle.

¿El verificador contacta con OpenTimestamps o con un ledger?

Las comprobaciones sin conexión analizan los archivos locales de sello de tiempo y de anclaje de ledger. La comprobación OTS puede reconocer estructuras de prueba pendientes o atestadas en Bitcoin. La confirmación por red pertenece a un procedimiento operativo separado.

Related references

Follow one governed action through its records.

Start with the action request, policy decision, approval, and audit event schemas. Then inspect the complete execution record and evidence-room sample.

Open the execution record
Esquema de manifiesto de paquete de evidencia de agente de IA