IEl modelo de custodia
Nada sale.
Nada llama a casa.
SQAI se ejecuta donde viven tus datos. En el momento de la consulta no hay llamada de red que interceptar, ningún servicio que almacene tus filas, ninguna telemetría. Esta hoja da cuenta de cada byte que cruza el cable — hay exactamente dos movimientos, y ninguno es tu información.
- Tus filas
Leídas dentro de tu proceso. Nunca copiadas, nunca subidas, nunca en manos de nadie más que tú.
nunca - Planes y resultados
Validados y ejecutados en proceso. Los resultados viven en un almacén local acotado y expiran a los 15 minutos.
nunca - Telemetría
No existe. Sin llamadas de analítica, sin informes de fallos, sin ningún destino al que llamar.
nunca - Paquete de runtime
Código del motor, descargado una vez desde Cloudflare R2 y verificado antes de escribir un solo archivo. El código entra; las filas nunca salen.
una vez · entrante · firmado - Inicio de sesión del dispositivo
Opcional. Transfiere un token de licencia firmado entre tu máquina y el servicio de cuenta — nunca tus datos.
opcional · solo token
Sin red en tiempo de consulta. Corta el cable tras la instalación y cada consulta sigue respondiendo.
Solo lectura no es una configuración.
Es la forma de la herramienta.
4.574 capacidades expuestas · todas de lectura · sin ruta de escritura que configurar mal
IIILa única descarga
Seis verificaciones antes de escribir un archivo.
El paquete de runtime es lo único que SQAI descarga — código del motor desde Cloudflare R2, tratado como hostil hasta que se demuestre lo contrario. La verificación se ejecuta antes de la extracción, continúa archivo por archivo, y la instalación es atómica.
- 01
Una clave aceptada
Las versiones se firman con RS256 mediante una única clave RSA-4096. Una sola clave verifica; nada más es de confianza.
- 02
Verificar antes de extraer
La firma se comprueba sobre el manifiesto antes de desempaquetar cualquier archivo. Un paquete manipulado o sin firmar nunca llega tan lejos.
- 03
Esquema y seguridad de rutas
El manifiesto debe ajustarse al esquema esperado, y cada ruta listada debe resolverse dentro del directorio raíz de instalación.
- 04
sha256 por artefacto
Cada archivo se hashea y se compara con el manifiesto firmado. Un solo byte discrepante invalida toda la instalación.
- 05
No listado o enlace simbólico — rechazado
Un archivo que el manifiesto no lista, o cualquier enlace simbólico, rechaza el paquete de inmediato.
- 06
Instalación atómica, reversión bloqueada
La extracción se realiza en un directorio temporal y se mueve a su lugar con un único renombrado atómico. Las versiones por debajo del umbral aceptado se rechazan como rollback_protected.
runtime_bundle 0.1.0sha256 4d64142e4c1ff63d299cfc8b172fdf97cb59169b545e1e02978e678a632ce6e1MIN_ACCEPTED_RUNTIME_VERSION 0.1.0 · below → rollback_protectedIVClaves e higiene de errores
Superficies pequeñas, mantenidas pequeñas.
La clave de dispositivo
- ubicación
- ~/.sqai — en tu directorio personal, nunca a nivel de sistema
- permisos
- modo de archivo 600 — legible solo por ti
- emisión
- inicio de sesión de dispositivo opcional (código de dispositivo RFC 8628)
- qué se transmite
- un token de licencia firmado — nunca tus datos
Lo que ve el modelo
ENOENT: no such file or directory — /Users/dana/finance/q3-actuals.csvENOENT: no such file or directorysanitizeMessage elimina las rutas absolutas de cada error visible por el modelo. La estructura de tu sistema de archivos nunca forma parte del contexto del modelo.
VEl almacén de resultados
Un identificador que no prueba nada.
Los resultados voluminosos permanecen tras un identificador en lugar de saturar el contexto del modelo. El identificador está diseñado para ser inútil para cualquiera que no sea el tenant emisor.
- result_id
- 16 bytes aleatorios, base64url — imposible de adivinar, sin vínculo con ninguna consulta ni tenant
- autorización
- con ámbito de tenant — solo el tenant emisor puede canjearlo
- tenant incorrecto
- result_not_found — indistinguible de un identificador que nunca existió
- vigencia
- TTL de 15 minutos · ≤256 resultados · 64 MB en total · 16 MB por tenant
result_id = base64url(randomBytes(16))
→ ok→ result_not_foundNo prohibido — no encontrado. La existencia nunca se revela.
VIEl manual de air-gap
Funciona donde el cable está cortado.
El plano de consultas está desconectado por diseño; solo el runtime de cómputo se descarga alguna vez. Para operar completamente desconectado, recibe el paquete tú mismo — al verificador no le importa de dónde provienen los bytes.
- 01
Desactivar la instalación automática
SQAI nunca descargará el runtime de forma implícita.
$export SQAI_RUNTIME_AUTO_INSTALL=0 - 02
Transferir el paquete manualmente
Descarga el paquete firmado en una máquina conectada y transfiérelo según tu propia política de transferencia.
- 03
Instalar desde el archivo
Las seis comprobaciones se ejecutan sobre el archivo local — misma firma, mismo manifiesto, mismos hashes por artefacto.
$sqai runtime install --from-file <bundle> - 04
Verificar en sitio
Vuelve a comprobar el runtime instalado contra la única clave de versión aceptada, en cualquier momento.
$sqai runtime verify
Tras la instalación: red cero. Las consultas, las comprobaciones de política y los hashes de procedencia se calculan localmente.
VIILas preguntas de revisión
Preguntado en toda revisión de seguridad.
¿Qué sale exactamente de mi máquina?
En el momento de la consulta, nada. A lo largo de la vida de una instalación, dos cosas cruzan la red: un paquete de runtime firmado entrante desde Cloudflare R2 (código del motor, no filas) y — solo si optas por el inicio de sesión de dispositivo — un token de licencia firmado. No hay telemetría.
¿El modo de solo lectura es simplemente un indicador que alguien podría cambiar?
No. Un indicador de solo lectura en una conexión de base de datos es una promesa; SQAI es una superficie ausente. Las 4.574 capacidades expuestas son lecturas — no existe ruta de escritura, DDL ni eval que proteger — y la salida de emergencia (getUnsafeRuntime) nunca es accesible para un modelo.
¿Puede el modelo ampliar su propio acceso?
No. La política se fija en código en el momento de createSQAI() y se verifica en proceso antes de la ejecución. La entrada de herramienta que completa el modelo no contiene campos allowed*, y nombrar una capacidad fuera de la lista de permitidos lanza unsupported_operation.
¿Funciona SQAI en modo air-gapped?
Sí. Establezca SQAI_RUNTIME_AUTO_INSTALL=0, transfiera el paquete firmado manualmente e instálelo con sqai runtime install --from-file. La misma cadena de verificación se ejecuta contra el archivo, y el plano de consultas opera completamente sin conexión.
¿Puede un mensaje de error filtrar rutas de archivo al modelo?
No. sanitizeMessage elimina las rutas absolutas de cada error visible para el modelo, de modo que este nunca conoce la estructura de su sistema de archivos.
El siguiente paso
Traiga su revisión de seguridad.
Recorra el cuestionario con nosotros — custodia, firma, política, air-gap — cada respuesta trazable hasta el código.