Saltar a contenido

Decision: Aplazamiento de SQLCipher (GOB-13)

Sistema: Sherlock-docs v1.0 Entidad: Centro de Servicios Judiciales de Bello, Antioquia — Rama Judicial Marco normativo: Ley 1581 de 2012, Acuerdo PCSJA24-12243 Fecha: 2026-03-19 Version: 1.0 Referencia interna: GOB-13 Tipo de decision: Aplazamiento con mitigaciones alternativas


1. Contexto

La contraauditoria SDD (doc 03) identifico que la base de datos SQLite de Sherlock-docs almacena datos judiciales y personales sin cifrado en reposo (at-rest encryption). La recomendacion fue implementar SQLCipher via pysqlcipher3.

1.1 Datos almacenados en la BD

Tipo de dato Ejemplos Clasificacion Ley 1581
Nombres de partes Demandantes, demandados Dato personal
Cedulas Numeros de identificacion Dato personal
Correos electronicos Datos de contacto Dato personal
Radicados judiciales Numeros de proceso Dato publico (*)
Texto OCR Contenido de tutelas Dato sensible (puede contener datos de salud)

(*) Los radicados son publicos (Ley 1712), pero el contenido del proceso puede contener datos sensibles.


2. Decision

Se aplaza la implementacion de SQLCipher hasta que se cumplan las condiciones descritas en §5.


3. Justificacion Tecnica

3.1 Problemas de compatibilidad

Problema Impacto
pysqlcipher3 requiere compilacion de OpenSSL/libsqlcipher desde fuente +15-20 min build time Docker, imagen +200MB
Incompatibilidad con SQLite FTS5 compilado en modo estandar Requiere recompilar SQLite con FTS5 + cipher; alto riesgo de regresion
No soporta WAL mode con acceso concurrente cifrado en algunas versiones Sherlock-docs usa WAL mode para lecturas concurrentes (GUI + CLI)
pysqlcipher3 sin release estable desde 2021 (PyPI) Riesgo de dependencia abandonada
Migracion de BD existente: requiere export/import completo Downtime de servicio + riesgo de perdida de datos

3.2 Relacion costo-beneficio

Factor Evaluacion
Esfuerzo estimado 1-2 semanas (incluye pruebas de compatibilidad FTS5 + WAL + migracion)
Riesgo de regresion Alto — afecta pipeline completo (OCR → NER → Dedup → BD)
Beneficio marginal Bajo — las mitigaciones alternativas ya cubren el vector de ataque principal
Usuarios del sistema 1-3 operadores en red local del CSJ
Volumen de datos ~100 documentos/dia, ~3000 registros totales

4. Mitigaciones Alternativas Implementadas

4.1 Controles en capas (defense in depth)

Capa Control Estado Referencia
Red Firewall UFW — solo puertos 80, 443, 22 abiertos Implementado SEC-04, F2
Red HTTPS obligatorio via Traefik + Let's Encrypt Implementado SEC-02
Sistema VPS con disco cifrado (Hostinger provisiona con LUKS) Verificado Infraestructura
Container Docker non-root user (gosu pattern) Implementado SEC-03
Container Volumenes de datos no expuestos publicamente Implementado Dockerfile
Aplicacion Autenticacion Streamlit con bcrypt Implementado SEC-05/GOB-05
Aplicacion Auditoria de operaciones (tabla audit_events) Implementado GOB-11
Datos Backups cifrados con gzip (compresion, no cifrado AES) Parcial F1 (pendiente offsite)
Acceso SSH con clave publica, password auth deshabilitado Implementado SEC-04

4.2 Analisis de vectores de ataque

Vector Mitigacion sin SQLCipher Riesgo residual
Acceso fisico al servidor Disco cifrado LUKS + datacenter Hostinger con seguridad fisica Bajo
Acceso SSH no autorizado Clave publica + UFW + fail2ban Bajo
Acceso al container Docker non-root + volumenes internos Bajo
Backup robado en transito gzip (pendiente: cifrado AES en F1) Medio
Vulnerabilidad en aplicacion Auth + auditoria + HTTPS Bajo
Acceso via red local CSJ El sistema solo es accesible via HTTPS (no hay BD expuesta) Bajo

4.3 Riesgo residual aceptado

El riesgo residual sin SQLCipher es BAJO dado que: - El acceso a la BD requiere acceso al container Docker + sistema de archivos - El disco del VPS esta cifrado en reposo (LUKS) - No hay puerto de BD expuesto (SQLite es archivo local, no servidor) - La autenticacion impide acceso no autorizado via la aplicacion


5. Condiciones para Re-evaluar

Condicion Trigger
Migracion a PostgreSQL Si se migra a PostgreSQL (roadmap API .NET), usar TLS + pg_crypto nativo en lugar de SQLCipher
Regulacion explicita Si el CSJ o la SIC requieren cifrado at-rest especificamente para BD de herramientas auxiliares
Incidente de seguridad Si ocurre un acceso no autorizado que exponga la BD
Multi-sede Si el sistema se despliega en multiples sedes con distintos niveles de seguridad fisica
Release estable de pysqlcipher3 Si se publica version compatible con Python 3.12 + FTS5 + WAL

6. Firmas

Rol Nombre Firma Fecha
Coordinador CSJ Bello _____ _ _
Administrador de TI _____ _ _

Decision tecnica documentada conforme a GOB-13. Sujeta a revision periodica (semestral) o cuando se cumpla alguna condicion de re-evaluacion.

Referencias: Ley 1581 de 2012, Acuerdo PCSJA24-12243 Version: 1.0 — 2026-03-19