Las características marcadas con [ROADMAP] están definidas arquitectónicamente pero aún no están disponibles en la versión actual.
Resumen de las Capas de Seguridad
Capa 1: Guardian AST
El módulo Guardian AST realiza una inspección estática de latencia cero sobre los módulos WebAssembly antes de su compilación. UtilizaWebAssembly.Module.imports() para enumerar todas las solicitudes de importación dirigidas al host y validarlas contra una lista blanca estricta.
Lista Blanca de Funciones WASI
Solo las siguientes 14 funciones dewasi_snapshot_preview1 están permitidas:
SandboxViolation inmediato. Un tope fijo de 128 importaciones totales por módulo previene el agotamiento de recursos mediante payloads de tipo bomba lógica.
Capa 2: WASI Sandbox
El SDK proporciona un motor de ejecución de doble vía que enruta cada payload al mecanismo de aislamiento apropiado:Envenenamiento de Globales V8
Veinticinco vectores de ataque son neutralizados asignándolesundefined y sellándolos como no modificables:
Object.freeze(), impidiendo cualquier alteración del entorno aislado en tiempo de ejecución.
Defensa contra Contaminación de Prototipos
Dentro del IIFE del sandbox, once prototipos core de JavaScript se congelan antes de que el código de usuario se ejecute para cumplir con las estrictas normativas de aislamiento lógico PCI-DSS e HIPAA:Function y otros espacios de nombres globales están explícitamente envenenados (establecidos como undefined) en el ámbito global para eliminar vías de escape de ejecución, no es posible congelar Function.prototype directamente. El SDK lo resuelve dinámicamente mediante Object.getPrototypeOf(function(){}) para aplicar el congelamiento.
Toda la ejecución del huésped se envuelve en un bloque que contiene "use strict";. Por consiguiente, cualquier intento por parte del código inyectado de escribir o asignar propiedades a estos prototipos congelados (ej., Object.prototype.polluted = "leak") arrojará inmediatamente un error duro TypeError, deteniendo la ejecución y previniendo vulnerabilidades de contaminación de prototipos.
Límites de Consumo de CPU
Defensa contra Evasión de Microtareas
En la ejecución del contexto de V8, las microtareas (como las Promesas resueltas) planificadas durante la evaluación a veces pueden sobrevivir al límite de ejecución del script o eludir las restricciones síncronas simples. Para prevenir esto, el SDK impone:microtaskMode: 'afterEvaluate' le indica a Node.js que ejecute inmediatamente todas las microtareas encoladas por el script antes de retornar. Esto garantiza que ninguna lógica asíncrona sobreviva fuera del límite de ejecución del sandbox de 5.000 ms, neutralizando potenciales evasiones del sandbox mediante bombas lógicas asíncronas.
Variables de Entorno Seguras del Host (allowEnv)
Por defecto, el sandbox WASI aísla por completo el entorno del huésped. Si su lógica de negocio requiere estrictamente variables de entorno, puede habilitar la propagación segura de variables del host:
AWS_SECRET_ACCESS_KEY o NPM_TOKEN), el SDK filtra las variables de entorno mediante una lista permitida estricta y segura a través de getDefaultEnvironment():
- Lista de Permitidos en Windows:
APPDATA,HOMEDRIVE,HOMEPATH,LOCALAPPDATA,PATH,PROCESSOR_ARCHITECTURE,SYSTEMDRIVE,SYSTEMROOT,TEMP,USERNAME,USERPROFILE,PROGRAMFILES. - Lista de Permitidos en Unix/Linux:
HOME,LOGNAME,PATH,SHELL,TERM,USER.
() se rechaza de inmediato para neutralizar vectores de ejecución de código remoto.
Limpieza Post-Ejecución
El sandbox destruye todos los artefactos temporales después de cada ciclo de ejecución:Capa 3: Escudo de Privacidad (PII Egress Shield)
El escáner PII intercepta toda la salida del sandbox antes de devolver los resultados al llamador. A partir de la v3, opera un pipeline de detección en cuatro etapas que combina análisis estructural, coincidencia de patrones y procesamiento de lenguaje natural. Cada etapa es independiente — el sistema bloquea los datos si cualquier etapa detecta una violación.Pipeline de Detección
Etapas 1–2: Análisis de Claves
La coincidencia exacta utiliza unSet<string> para búsqueda en tiempo constante O(1) contra una lista configurable de claves prohibidas.
La coincidencia difusa extiende la protección a aliases y variaciones mediante dos algoritmos:
- Tokens cortos (< 4 caracteres, ej.
id): Regex con detección de contorno que identificapatientId,record_id,user-idpero permitegrid,video,android - Tokens largos (≥ 4 caracteres, ej.
name,phone): Contención por subcadena que detectafirstName,accountName,names
diagnosis, medication, image_id o timestamp.
Etapa 3: Validadores de Patrones
Etapa 4: Reconocimiento de Entidades Nombradas (NER)
CuandoenableNerScanning se establece en true, el escáner utiliza la librería NLP compromise para detectar nombres de personas, ubicaciones geográficas y nombres de organizaciones embebidos en los valores de salida — independientemente de la clave utilizada para almacenarlos.
El escaneo NER es opt-in durante la fase alpha. Añade aproximadamente 10ms de latencia para tamaños de salida típicos (< 10KB). La librería
compromise opera enteramente dentro del proceso sin realizar llamadas a APIs externas.Presets Regionales
El SDK incluye tres conjuntos de patrones preconfigurados, adaptados a los marcos regulatorios más comunes:Protecciones Anti-Bypass
- Defensa contra JSON Anidado: El análisis recursivo de cadenas con JSON embebido neutraliza la ofuscación mediante envolturas de
JSON.stringify() - Protección contra Referencias Circulares: Un
WeakSetde seguimiento previene la recursión infinita en objetos auto-referenciantes - Política Aggregation-First: Bloquea la exportación de datos crudos a nivel de fila — solo pasan resultados agregados (conteos, promedios, resúmenes)
- Aplicación de Output Schema: Cuando se define un esquema de salida
Zod, el modo.strict()se aplica automáticamente, rechazando cualquier clave no permitida explícitamente en el esquema - Desempaquetado Criptográfico y de Envoltura: Aísla y extrae automáticamente el payload de datos de negocio real de las envolturas de transporte MCP/LIOP y de las respuestas proxied de gRPC (mediante
unwrapForAggregationPolicyScan) antes de realizar el escaneo. Esto evita falsos positivos procedentes de metadatos binarios y sellos criptográficos (como las firmas HMAC-SHA256 de los recibos ZK). - Sanitización Numérica Recursiva en Memoria: Antes de realizar el escaneo, todos los valores numéricos del payload devuelto se procesan de forma recursiva: los números decimales positivos (floats) se redondean a un máximo de 4 decimales, y los valores negativos se acotan de forma segura a
0(mediantesanitizeOutput()). Esto se ejecuta enteramente en memoria para evitar canales laterales en representaciones de coma flotante y previene conversiones de cadena de caracteres redundantes. - K-Anonymity en Datasets Pequeños: Para micro-datasets o demos sintéticas (tamaño del dataset < 10), el Escudo de Egreso aplica un filtro estricto de K-Anonymity. Cualquier salida devuelta por el sandbox es rechazada si contiene más de 3 claves escalares (propiedades planas) o si incluye algún array u objeto anidado. Esto bloquea intentos de reconstruir bases de datos registro a registro mediante consultas superpuestas o canales de estructura anidada.
Privacidad Diferencial y Presupuesto de Consultas de 3 Tiers (NIST SP 800-226)
Para prevenir ataques de reconstrucción y diferenciación estadística (donde un agente realiza múltiples consultas superpuestas para aislar los valores de un único registro), el SDK implementa un sistema de presupuesto de consultas estratificado junto con privacidad diferencial de Laplace.Límites de Sesión del Presupuesto de Consultas de 3 Tiers
Durante una sesión segura negociada por PQC, el SDK rastrea el acceso a los campos de datos. Cumpliendo con las directrices NIST SP 800-226, los campos se clasifican en tres tiers de sensibilidad, cada uno con su propio límite de consultas estricto por sesión:- Tier Prohibido (Máx 3 consultas/sesión): Se aplica a campos declarados en
forbiddenKeys(ej.,ssn,password,email). Cualquier intento de consultar estos campos superando el límite dispara un bloqueo de egreso inmediato. - Tier Sensible (Máx 8 consultas/sesión): Se aplica a campos declarados en
sensitiveKeysglobales o a nivel de herramienta (ej.,balance,diagnosis,ticker). - Tier Público (Máx 25 consultas/sesión): Se aplica a cualquier campo público no registrado como sensible o prohibido.
Presupuestos de Consultas Persistentes y Control de Concurrencia
Para mantener los invariantes de seguridad Zero-Trust a través de reinicios o fallas del servidor, o en clústeres multi-instancia (como múltiples procesos puente locales en paralelo), el SDK admite la persistencia de presupuestos de consultas activos en el sistema de archivos:- Configuración de Persistencia: Los operadores pueden proporcionar la propiedad
budgetStorePathde forma global en las opciones del constructor deLiopServero localmente dentro de una políticaLogicExecutionPolicya nivel de herramienta. - Anclaje de Identidad del Cliente (Anti-Bypass): Los límites de presupuesto están estrictamente vinculados a la identidad criptográfica del cliente (
agentDidderivado de su PeerID Ed25519 persistente, oclientIdde los tokens JWT autorizados por el servidor Nexus OAuth 2.1). Al auditar la identidad real del cliente en lugar de tokens de transporte efímeros (como elsession_tokende gRPC), el SDK evita que los adversarios restablezcan sus presupuestos de consultas al iniciar nuevos handshakes o reconectarse. - Bloqueo Atómico de Archivos: Bajo el capó, el SDK impone la sincronización entre procesos y actualizaciones atómicas en el archivo JSON del presupuesto mediante bloqueos del sistema de archivos (archivos
.lock). Esto evita condiciones de carrera donde múltiples peticiones paralelas de un LLM se ejecutan simultáneamente en diferentes hilos o instancias de workers para exceder los límites de presupuesto. - Tolerancia a Fallos en Memoria: Si fallan los permisos de escritura en el sistema de archivos, si el directorio de almacenamiento es de solo lectura, o si ocurre un deadlock de bloqueo, el SDK reporta automáticamente el error a los logs del sistema y realiza un fallback al rastreo de presupuesto en memoria aislado por sesión, asegurando la continuidad del servicio del nodo sin comprometer las políticas de seguridad.
Mecanismo de Laplace y Sensibilidad por Campo
Cuando el tamaño del dataset es menor quedpSmallDatasetThreshold (por defecto: 50), el motor de DP aplica ruido Laplace calibrado () a todas las salidas numéricas.
El motor calibra la sensibilidad () automáticamente basándose en la nomenclatura de los campos:
- Campos de Conteo (
count,length,size,num): La sensibilidad se fija en . - Campos de Promedio (
avg,mean): La sensibilidad se calcula dinámicamente como . - Campos de Suma y Generales: La sensibilidad se establece según el parámetro
dpSensitivityconfigurado en la herramienta.
Capa 4: ZK-Receipts
Cada ejecución del sandbox produce un recibo criptográfico que vincula la salida con la lógica exacta que la generó, proporcionando una prueba de computación honesta a prueba de manipulaciones.Estructura del Recibo (Binario v1)
Pipeline Criptográfico
- Generación de ImageID: Un hash
SHA-256del payload de lógica original identifica de forma única el código exacto ejecutado - Hash del Dataset: Un hash
SHA-256del dataset serializado ancla el estado de los datos al momento de la ejecución (cumplimiento de auditoría SOX) - Privacidad Diferencial: El ruido Laplace se aplica a las salidas numéricas antes del compromiso, garantizando que el ZK-Receipt coincida con los datos ruidosos que el cliente recibe. Soporta modo DDP (PRNG con semilla via
dataset_hash + image_id) para reproducibilidad en auditorías. - Ensamblaje del Journal: Un objeto JSON que contiene
image_id,dataset_hash,output_hash(SHA-256 del resultado post-DP),fuelconsumido yts(timestamp) - Sello HMAC:
crypto.createHmac("sha256", sessionSecret).update(journal).digest()— el secreto de sesión se deriva del intercambio de claves ML-KEM-768 (Kyber) - Verificación y Mitigación de Replay: El verificador valida el sello HMAC en tiempo constante (
crypto.timingSafeEqual). Adicionalmente, para prevenir ataques de replay e intercambio de respuestas Man-in-the-Middle (MITM), el verificador calcula un hash SHA-256 local del resultado recibido (expectedOutput) y comprueba rigurosamente que coincida conJournal.output_hash(medianteverifyZkReceipt). - Extractor de Proxy por Llaves Balanceadas: Si la llamada a la herramienta se delegó mediante proxy (
__liop_proxy_tool), el verificador ejecuta una máquina de estados de llaves balanceadas en proceso para aislar y extraer los argumentos crudos del proxy a partir de la respuesta antes de calcular el hash, eludiendo falsos positivos de validación cuando el host inyecta metadatos.
Seguridad de Transporte
Encapsulación de Claves Post-Cuántica (ML-KEM-768)
El SDK utiliza el paquetemlkem (compatible con FIPS 203) para la encapsulación de claves:
Aislamiento de Nonce
Cada payload cifrado utiliza un nonce aleatorio fresco de 12 bytes (crypto.randomBytes(12)), antepuesto al texto cifrado. Esto previene la reutilización de nonce en AES-GCM cuando múltiples payloads se cifran bajo la misma clave de sesión.
Endurecimiento de TLS en Producción
Si bien la capa PQC de LIOP cifra todos los payloads a nivel de aplicación de extremo a extremo, el cifrado a nivel de transporte (TLS/mTLS) es crítico para prevenir la escucha de metadatos y garantizar la identidad de los nodos. Para evitar fallos silenciosos en producción, el SDK implementa una verificación estricta a prueba de fallos:- En entornos de desarrollo/pruebas, la falta o mala configuración de los archivos de certificado genera una advertencia y realiza un fallback elegante a canales gRPC inseguros.
- En producción (
process.env.NODE_ENV === 'production'), cualquier fallo al resolver o cargar los certificados TLS configurados (rootCert,certChainoprivateKey) lanza un error fatal, forzando al proceso a detenerse inmediatamente en lugar de degradarse silenciosamente a un canal no cifrado.
Autenticación Zero-Trust del Bridge
ElLiopStreamBridge aplica autenticación obligatoria mediante token Bearer en todos los endpoints HTTP:
- Si
ZERO_TRUST_TOKENno está configurado, se auto-genera un token efímero seguro víarandomUUID() - Cada solicitud a
/mcprequiere un header válidoAuthorization: Bearer <token> - Limitación de tasa por IP en la creación de sesiones (por defecto: 10 sesiones concurrentes)
- Expulsión automática de sesiones inactivas (TTL: 30 minutos)
Seguridad de Red P2P
Aislamiento del Worker Pool
Las operaciones criptográficas de alto consumo se despachan a threads del sistema operativo mediante pools de workers Piscina, previniendo el bloqueo del event loop principal de V8:
Configuración por defecto: 2–8 threads (producción), 0–1 threads (test), planificación
FixedQueue, 5s de timeout por inactividad.
Defensa contra Heap Bomb
Cada thread worker está restringido medianteresourceLimits.maxOldGenerationSizeMb de V8 (por defecto: 64 MB, configurable vía workerPool.maxHeapMb o la variable de entorno LIOP_WORKER_MAX_HEAP_MB). Si la lógica inyectada intenta alojar memoria más allá de este límite, el worker se termina inmediatamente con un WorkerPoolError, previniendo ataques de denegación de servicio que buscan agotar el heap de Node.js.
Precalentamiento Asíncrono del Pool de Workers
Para evitar picos iniciales de latencia de CPU y mitigar los arranques en frío (cold-starts) de V8/WASI (~820k unidades de combustible), el SDK incluye una estrategia de precalentamiento asíncrono para el pool de hilos. Durante la inicialización del servidor (o la creación del verificador), se despachan tareas de “precalentamiento” en segundo plano (isWarmup: true o action: "warmup") para precalentar las instancias de workers de Piscina. Esto garantiza que los hilos worker estén inicializados, los contextos de isolate de V8 estén reservados y los handles de WASI estén pre-cacheados antes de procesar payloads reales de clientes.
Política de Agregación Primero
El SDK impone una heurística de Agregación Primero que bloquea la exportación de datos crudos a nivel de fila desde el sandbox. Esta es la última defensa computacional antes de la capa de ZK-Receipt.Cómo Funciona
Tras la ejecución, la salida se escanea recursivamente buscando arrays que contengan objetos. Si el número de elementos tipo objeto supera el umbral configurado, la respuesta se bloquea:Normalización Condicional de Errores
El SDK implementa reporte de errores consciente del entorno para violaciones de políticas:
Esto se controla automáticamente mediante
process.env.NODE_ENV. En despliegues de producción, asegúrese siempre de que NODE_ENV=production esté configurado para activar la opacidad total de errores.
Canales de Directivas Nativos del Protocolo
Para garantizar que los LLM clientes generen código JavaScript compatible que respete los límites del sandbox sin latencia de prueba y error, el SDK difunde instrucciones estructuradas y nativas del protocolo en tres niveles:- Metadatos de JSON Schema (
$comment): El diccionario de datos inyecta automáticamente un campo$commentque contiene directivas del sandbox directamente en la representación del esquema JSON activo. - Recurso de Directivas de Ejecución: Un recurso dinámico (
liop://schema/guidelines) detalla los workarounds específicos (como el filtrado de fechas mediante cadenas ISO 8601) y restricciones (reglas de K-Anonymity, sufijos de Laplace) requeridos por el nodo. - Prompts de Sistema Multi-IA: El sistema de adaptadores de prompts normaliza las restricciones para diferentes modelos (Claude, OpenAI, Gemini) con el fin de prevenir llamadas a APIs alucinadas.