Saltar al contenido

Plataforma

Un gateway entre su aplicación y el modelo que deja evidencia verificable.

Aegis es un gateway de gobernanza y evidencia compatible con OpenAI (y con la API nativa de Anthropic). Aplica la política configurada y confirma un registro firmado y encadenado de cada interacción gobernada antes de devolver la respuesta. Se autoaloja: el código es suyo.

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.

MMR append-only

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.

Sellado criptográfico

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.

Verificación sin confianza

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.

Fail-closed

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.

Admisión y WAF

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

Qué está construido y qué no

Vocabulario de docs/BOUNDARIES.md. Cada fila remite a su localizador en el repositorio; lo que no está implementado no se describe como disponible.

CapacidadEstadoDetalleRef.
Evidencia confirmada antes de la respuestaImplementadoLlamadas 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 acotadoImplementadoEventos 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 portablesImplementadoPrueba 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)ImplementadoUna hoja no puede producir el hash de un nodo interno. Las cadenas v1 existentes siguen verificando.CLM-064
Firma HMAC / Ed25519 / ML-DSA-65Depende de configuraciónHMAC 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-closedImplementadoSin 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.shImplementadoCanonicalización RFC 8785 en canonical_jcs_bytes; rechaza números no finitos.UC-053
Borrado criptográfico por sujeto (AES-256-GCM)Opt-inApagado 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 proveedorOpt-inAEGIS_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)MedidoEndurecido contra homoglifos, espaciado y leetspeak. No es una frontera contra la inyección de prompts.UC-042
Escáner de inyección RAGImplementadoMó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 clasificadasNo conectadoEn 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 conectadoMódulos construidos, sin conexión a ningún path de petición.UC-056
Autenticación CAC/PIV y LDAP / ADNo conectadoLos ajustes existen pero ningún path los lee.UC-064 · UC-065
Pruebas de conocimiento cero sobre el MMRRoadmapLa 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 / podsRoadmapUn 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 TEERoadmapNingún código realiza atestación hoy; los adaptadores de plataforma la rechazan.UC-040

Qué es

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.

Qué no es

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.

Límites, dichos una vez

  • La manipulación se detecta, no se impide: un operador con acceso al sistema de archivos puede alterar registros.
  • No elimina toda la PII: la redacción protege el registro, no a su proveedor.
  • No valida salidas: registra lo que devolvió el modelo, no comprueba si era cierto (UC-068).
  • No hay orden global entre réplicas.
  • No garantiza prevenir la inyección de prompts.
  • No es una certificación: sin SOC 2, ISO 27001, atestación HIPAA ni FedRAMP, y ninguna en curso.
  • No determina aplicabilidad regulatoria, conformidad ni admisibilidad judicial: eso corresponde a la organización y a sus asesores.
Mediciones

Números con su frontera

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.

Latencia de commit
MMR + firma HMAC + un fsync real · n = 1 000
p99 1.22 ms
Commits por segundo
Un proceso, un WAL, un escritor: no escala con hilos, por diseño
1727/s
Firma por operación
Ed = Ed25519 · ML = ML-DSA-65. ML verify NO es constant-time
µs/op
Corpus WAF15 maliciosos · 8 benignos · 0 bypass · 0 falsos positivos

Cota superior Wilson 95 % ≈ 20,39 % de bypass. No prueba detección universal de prompt injection.

Rotación de claves2 239 registros · 0 commits fallidos · 0 registros no verificables

Arnés local; no cubre propagación en Kubernetes ni secret managers.

ML-DSA sign (timing)1 000 000 muestras · p = 0,852

Sin diferencia significativa detectada; no es prueba de constant-time.

ML-DSA verify (timing)1 000 000 muestras · p = 0,0 · Δ media 540 ns

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 ↗.

Compruébelo usted mismo

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…e92cf5
INCLUDED
$ python prove_it.py record_tampered.json faf613f9…e92cf5
NOT INCLUDED
$ python prove_it.py record.json 00000000…000000
NOT INCLUDED