# Plataforma · Aegis Latent Core

> La lista honesta de lo que Aegis hace hoy, lo que sólo funciona si se activa, lo que está construido pero sin conectar y lo que todavía es un plan, con mediciones reales y sus límites.

- URL: https://aegis-latent-core.vercel.app/plataforma
- Para: Quien evalúa si el producto sirve para su caso.
- Actualizado: 2026-09-27
- Idioma: español

## Pilares

### 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 de cada capacidad

Vocabulario de `docs/BOUNDARIES.md`. 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 |

## 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

- 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 (2026-09-24)

En un contenedor x86_64 compartido, 4 CPU sin fijar, Linux, CPython 3.11.15, con un fsync real de WAL por commit. No son cifras de capacidad.

- Latencia de commit (n = 1000): p50 0.62 ms · p95 1 ms · p99 1.22 ms · máx 4.18 ms.
- Commits por segundo: 1727 a 10 hilos · 1630 a 50 hilos · 1482 a 100 hilos (un proceso, un WAL, un escritor).
- Firma por operación: Ed25519 sign 40.5 µs / verify 128.6 µs · ML-DSA-65 sign 173 µs / verify 62.4 µs (verify NO es constant-time).
- Streaming: +20.1 MB RSS para 1000 streams SSE concurrentes.
- Tests: 7444 pasados, 39 omitidos, 0 fallidos · cobertura 91,3 %.

| Prueba | Resultado | Límite declarado |
| --- | --- | --- |
| Corpus WAF | 15 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 claves | 2 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). |

## Compruébelo usted mismo (docs/PROVE_IT.md)

Tres casos; 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
```

---

Siguiente: [Arquitectura](https://aegis-latent-core.vercel.app/arquitectura.md) · Índice: https://aegis-latent-core.vercel.app/llms.txt · Todo el sitio: https://aegis-latent-core.vercel.app/llms-full.txt
