Evidencia antes de la respuesta
En llamadas no-streaming, el registro se redacta, se hashea, se firma, se añade al WAL con fsync y entra en el MMR antes de que el cliente vea la respuesta. Los rechazos también se registran.
Plataforma
En llamadas no-streaming, el registro se redacta, se hashea, se firma, se añade al WAL con fsync y entra en el MMR antes de que el cliente vea la respuesta. Los rechazos también se registran.
Cada registro es una hoja de un Merkle Mountain Range. Una prueba de inclusión portable O(log n) permite a un tercero verificar un registro divulgado contra una raíz obtenida por su cuenta.
Cada registro se encadena por hash y se firma: HMAC por defecto, Ed25519 (RFC 8032) o ML-DSA-65 (FIPS 204) donde se configure, con ruta HSM en el servidor enterprise.
Las pruebas se verifican offline: un verificador de 313 líneas de Python puro y un gemelo TypeScript, sin llamadas de red y sin confiar en el gateway, el proveedor ni el operador.
Sin firmante, sin limitador distribuido o con un ledger que no se puede reproducir, no hay servicio. Nunca sirve tráfico sin evidencia en silencio.
Autenticación, alcance, límites de tamaño, WAF de capa 1 y rate limiting antes de reenviar. Útil para filtrar, pero no es una frontera contra la inyección de prompts.
Estado real
Vocabulario de docs/BOUNDARIES.md. Cada fila remite a su localizador en el repositorio; lo que no está implementado no se describe como disponible.
| Capacidad | Estado | Detalle | Ref. |
|---|---|---|---|
| Evidencia confirmada antes de la respuesta | Implementado | Llamadas no-streaming: el registro se escribe, firma y sincroniza (fsync) antes de que el cliente vea la respuesta. Los rechazos también se registran en la misma cadena. | README · Architecture |
| Streaming SSE acotado | Implementado | Eventos saneados emitidos de forma incremental con estado pending-terminal; un resumen terminal exacto se confirma antes del marcador final. Si falla, el marcador se retiene. | UC-004 · CLM-106 |
| MMR append-only con pruebas de inclusión portables | Implementado | Prueba O(log n), sin conocimiento cero. Verificable offline con un verificador Python de 313 líneas o su gemelo TypeScript. | docs/PROVE_IT.md |
| Separación de dominio MMR v2 (estilo RFC 6962) | Implementado | Una hoja no puede producir el hash de un nodo interno. Las cadenas v1 existentes siguen verificando. | CLM-064 |
| Firma HMAC / Ed25519 / ML-DSA-65 | Depende de configuración | HMAC por defecto (simétrica: no identifica al autor). Ed25519 o ML-DSA-65 donde se configure; ruta HSM en el servidor enterprise. | UC-041 |
| Fail-closed | Implementado | Sin firmante, sin limitador distribuido o con un ledger que no reproduce, no hay servicio: nunca sirve tráfico sin evidencia. | FAILURE_SEMANTICS.md |
| Exportación forense JCS / DAG-CBOR / CIDv1 / PDF / VERIFY.sh | Implementado | Canonicalización RFC 8785 en canonical_jcs_bytes; rechaza números no finitos. | UC-053 |
| Borrado criptográfico por sujeto (AES-256-GCM) | Opt-in | Apagado por defecto (AEGIS_ENABLE_CRYPTOGRAPHIC_SHREDDING). No equivale por sí solo al derecho de supresión del GDPR. | UC-037 |
| Redacción de PHI / PCI hacia el proveedor | Opt-in | AEGIS_PHI_DEIDENTIFY / AEGIS_PCI_SCRUB apagados por defecto. Coincidencia de patrones finita: no es el método Safe Harbor completo. | UC-009 · UC-045 |
| WAF de capa 1 (regex normalizadas + Aho-Corasick en Rust) | Medido | Endurecido contra homoglifos, espaciado y leetspeak. No es una frontera contra la inyección de prompts. | UC-042 |
| Escáner de inyección RAG | Implementado | Módulo alcanzable desde el path de petición según el inventario de módulos. | MODULE_INVENTORY.md |
| Detectores YARA, ManyShot, GCG, HL7/FHIR, OT, marcas clasificadas | No conectado | En el repositorio con tests, pero en la allowlist de alcanzabilidad: no se ejecutan en el path de producción. | MODULE_INVENTORY.md |
| Registro MiFID II / abuso de mercado (MAR) | No conectado | Módulos construidos, sin conexión a ningún path de petición. | UC-056 |
| Autenticación CAC/PIV y LDAP / AD | No conectado | Los ajustes existen pero ningún path los lee. | UC-064 · UC-065 |
| Pruebas de conocimiento cero sobre el MMR | Roadmap | La superficie pública ZKProver/ZKVerifier es un stub; el circuito en Rust es opt-in y experimental. | UC-039 · UC-043 |
| Orden global entre réplicas / pods | Roadmap | Un proceso con su WAL produce una secuencia ordenada local. El orden total entre procesos o regiones no está implementado. | UC-005 · UC-038 |
| Atestación TEE | Roadmap | Ningún código realiza atestación hoy; los adaptadores de plataforma la rechazan. | UC-040 |
Un gateway de gobernanza y evidencia que se interpone entre una aplicación y un proveedor de modelos, aplica la política configurada y confirma un registro firmado y encadenado antes de responder.
No es un modelo, ni un WAF universal, ni una certificación de cumplimiento, ni un dictamen de admisibilidad judicial, ni un objetivo de nivel de servicio, ni un sustituto de los controles de red, identidad, privacidad, retención y respuesta a incidentes de su organización.
Artefacto retenido del 2026-09-24, con un fsync real de WAL por commit, en un contenedor x86_64 compartido, 4 CPU sin fijar, Linux, CPython 3.11.15. Lo que se transfiere es la forma —el coste por commit dejó de crecer con la longitud de la cadena—, no los números absolutos.
Cota superior Wilson 95 % ≈ 20,39 % de bypass. No prueba detección universal de prompt injection.
Arnés local; no cubre propagación en Kubernetes ni secret managers.
Sin diferencia significativa detectada; no es prueba de constant-time.
Diferencia dependiente de clase detectada: la afirmación constant-time está bloqueada (UC-012).
Reproduzca con scripts/run_benchmarks_5.0.1.py --json. Método y artefactos en docs/BENCHMARKS.md ↗.
Pruebe el flujo en la consola, o ejecute docs/PROVE_IT.md del repositorio: doce líneas de Python, sin llamar a nuestros servidores, tres casos de los que dos deben fallar.
$ python prove_it.py record.json faf613f9…e92cf5INCLUDED$ python prove_it.py record_tampered.json faf613f9…e92cf5NOT INCLUDED$ python prove_it.py record.json 00000000…000000NOT INCLUDED