# Manual de Seguridad, Privacidad y Soberanía de Datos — Radar GovTech

Este documento describe el modelo de seguridad, la arquitectura de privacidad, las defensas técnicas contra vulnerabilidades web, los controles criptográficos en el cliente y el cumplimiento normativo de **Radar** ([licitacion.co](https://licitacion.co)).

---

## 1. Modelo de Privacidad Zero-Storage en Servidor

A diferencia de las plataformas tradicionales de contratación que recopilan y centralizan los perfiles, presupuestos, licitaciones de interés y estrategias de sus usuarios en bases de datos corporativas en la nube, Radar opera bajo el principio arquitectónico de **Zero-Storage en Servidor**:

```mermaid
flowchart TD
    subgraph ServidorCloud["Infraestructura Cloudflare Edge"]
        Edge["Archivos Estáticos HTML / JS / CSS"]
        NoDB["Cero Bases de Datos Centrales"]
        NoLogs["Cero Registro de Búsquedas Privadas"]
    end

    subgraph DispositivoUsuario["Dispositivo del Contratista (Cliente)"]
        Navegador["Navegador Web"]
        LocalStore["localStorage Seguro del Navegador"]
        LocalStore -->|Almacena Localmente| MisAlertas["Palabras Clave & Códigos RUP"]
        LocalStore -->|Almacena Localmente| MisLicitaciones["Licitaciones Guardadas en Seguimiento"]
        LocalStore -->|Almacena Localmente| MisChecklists["Checklists Habilitantes & Personalizados"]
        LocalStore -->|Almacena Localmente| MiComparador["Bandeja de Comparación Cara a Cara"]
    end

    Edge -->|Entrega Aplicación| Navegador
```

### Ventajas Estratégicas para el Proponente:
* **Inmunidad ante Fugas Masivas de Datos:** Al no existir una base de datos central que custodie información de usuarios, es técnicamente imposible que un atacante extraiga listas de licitaciones seguidas o palabras clave de los contratistas.
* **Confidencialidad Empresarial Absoluta:** Ningún competidor, entidad pública ni administrador de Radar tiene visibilidad sobre qué procesos específicos está analizando una empresa.
* **Control y Soberanía del Usuario:** El usuario puede exportar sus datos a CSV o destruirlos de inmediato con un solo clic mediante las funciones de limpieza de almacenamiento (`clearAllSaved`, `clearViewedHistory`, `resetUserProfileDefaults`).

---

## 2. Defensas contra Inyecciones, XSS y Clickjacking

Los portales de datos abiertos de Secop contienen millones de registros generados por miles de entidades públicas en todo el territorio colombiano. Radar trata todas las respuestas de las APIs externas como contenido potencialmente no confiable.

### 2.1. Sanitización de Textos e Inserción Segura
* **Escape de Caracteres Especiales:** La función central [`escapeHtml(str)`](file:///c:/Users/Darg/Documents/Volrisk/Herramientas/Radar/index.html#L12097) convierte de manera determinista caracteres de control HTML (`<`, `>`, `&`, `"`, `'`) en sus correspondientes entidades HTML seguras (`&lt;`, `&gt;`, `&amp;`, `&quot;`, `&#039;`).
* **Depuración de Campos de Texto Libre:** Funciones como [`cleanStr(text)`](file:///c:/Users/Darg/Documents/Volrisk/Herramientas/Radar/index.html#L5363) y [`cleanSentenceCase(text)`](file:///c:/Users/Darg/Documents/Volrisk/Herramientas/Radar/index.html#L4148) filtran saltos de línea anómalos, secuencias nulas y caracteres de escape antes de renderizar tarjetas o modales.

### 2.2. Aislamiento de Hipervínculos Externos
Todos los enlaces dirigidos a portales externos (como los expedientes de Secop I, Secop II, Colombia Compra Eficiente o plataformas de terceros) incorporan de manera estricta los atributos:
```html
rel="noopener noreferrer" target="_blank"
```
* **`noopener`:** Previene que la página externa acceda al objeto `window.opener` de Radar, evitando ataques de tipo *Tabnabbing* o redirecciones maliciosas de la pestaña de origen.
* **`noreferrer`:** Evita que el navegador envíe la cabecera `Referer`, protegiendo la URL interna y los términos de búsqueda activos.

### 2.3. Content Security Policy (CSP) en Metadatos
Directamente en el `<head>` de `index.html`, Radar implementa una directiva CSP estricta que restringe la ejecución de scripts y conexiones exclusivamente a orígenes auditados:
```html
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.tailwindcss.com https://accounts.google.com https://alcdn.msauth.net; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://cdnjs.cloudflare.com; font-src 'self' data: https://fonts.gstatic.com https://cdnjs.cloudflare.com; img-src 'self' data: blob: https:; connect-src 'self' https://www.datos.gov.co https://*.workers.dev https://licitacion.co https://accounts.google.com https://login.microsoftonline.com https://api.indexnow.org; frame-src 'self' https://accounts.google.com https://login.microsoftonline.com; object-src 'none'; base-uri 'self';">
```

### 2.4. Protección contra Clickjacking (Frame-Busting)
Para impedir que terceros incrusten la plataforma dentro de un marco transparente (`iframe`) malicioso:
```javascript
if (window.top !== window.self) {
    window.top.location = window.self.location;
}
```

### 2.5. Respeto a Señales Do Not Track (DNT) y Global Privacy Control (GPC)
En la función de telemetría anónima [`trackRadarEvent`](file:///c:/Users/Darg/Documents/Volrisk/Herramientas/Radar/index.html#L8237), el sistema verifica automáticamente:
```javascript
if (navigator.doNotTrack === '1' || window.doNotTrack === '1' || navigator.globalPrivacyControl === true) {
    return; // Silenciar cualquier evento de telemetría
}
```

### 2.6. Integridad de Subrecursos (SRI)
Todos los activos externos cargados desde redes de distribución de contenido (CDN) con versiones fijadas incluyen atributos criptográficos de verificación de integridad `integrity="sha384-..."` y `crossorigin="anonymous"`. Si un CDN fuese comprometido o alterase el archivo servido, el navegador bloquea su ejecución de forma preventiva.

### 2.7. Sanitización contra Inyección de Fórmulas en CSV (CWE-1236)
En la función de exportación de convocatorias [`exportListToCSV`](file:///c:/Users/Darg/Documents/Volrisk/Herramientas/Radar/index.html#L8340), toda celda de texto susceptible de comenzar con caracteres interpretables como fórmulas por hojas de cálculo como Microsoft Excel o LibreOffice Calc (`=`, `+`, `-`, `@`, tabulaciones o retornos) es neutralizada automáticamente anteponiendo un apóstrofe de escape `'`.

---

## 3. Seguridad Perimetral en Cloudflare Edge

La distribución global de Radar se apoya en los mecanismos de seguridad de capa de transporte y perímetro de Cloudflare:

| Mecanismo | Configuración | Beneficio |
| :--- | :--- | :--- |
| **Cifrado en Tránsito** | TLS 1.3 / HTTPS Obligatorio | Cifra todo el tráfico entre el usuario y la red Edge, impidiendo intercepciones en redes Wi-Fi públicas. |
| **Hsts (Seguridad Estricta de Transporte)** | `max-age=31536000; includeSubDomains; preload` | Fuerza a los navegadores a conectarse exclusivamente mediante HTTPS, bloqueando ataques de degradación (*downgrade*). |
| **Mitigación DDoS** | Capa Anycast no medida | Absorbe ataques distribuidos de denegación de servicio a nivel de red (capas 3 y 4) y de aplicación (capa 7). |
| **Aislamiento de Origen** | Cloudflare Workers Serverless | No hay servidores de backend con puertos SSH, bases de datos o servicios vulnerables expuestos a internet. |

---

## 4. Criptografía en el Cliente con Web Crypto API (AES-GCM 256 bits)

Radar incorpora un motor criptográfico nativo en JavaScript (`radarCrypto`) que opera directamente con la **Web Crypto API** del navegador:

### 4.1. Algoritmo y Parámetros
* **Algoritmo de Cifrado:** AES-GCM simétrico con longitud de clave de **256 bits**.
* **Derivación de Clave:** PBKDF2 con **100.000 iteraciones** y función hash SHA-256.
* **Vector de Inicialización (IV):** Generado aleatoriamente para cada operación mediante `window.crypto.getRandomValues(new Uint8Array(12))`.
* **Sal Criptográfica (Salt):** Vector aleatorio de 16 bytes independiente por cada operación.

### 4.2. Capacidades Criptográficas
1. **Bóveda Local con PIN (Capa 2 Punto 5):** Permite cifrar el perfil de la empresa (NIT, códigos RUP, lista de competidores y notas) en `localStorage`, impidiendo su lectura en herramientas de inspección del navegador (`DevTools`) sin el PIN.
2. **Copia de Seguridad Cifrada `.radar` (Capa 2 Punto 6):** Permite exportar e importar todas las licitaciones guardadas y configuración como un archivo comprimido cifrado con contraseña.

---

## 5. Matriz de Administración y Feature Flags de Seguridad

Para brindar control total al administrador y respetar la experiencia del usuario, las características avanzadas de seguridad se gestionan mediante variables de configuración (*Feature Flags*):

| Feature Flag | Capa y Punto | Estado por Defecto | Descripción |
| :--- | :--- | :---: | :--- |
| `enablePanicPurgeMode` | **Capa 1 — Punto 4** | **Apagado (`false`)** | Modo pánico: Habilita el botón de purga rápida e irreversible en modal de cuenta y pestaña de seguridad para computadores compartidos. |
| `enableLocalVaultEncryption` | **Capa 2 — Punto 5** | **Apagado (`false`)** | Bóveda local: Habilita la interfaz de bloqueo y desbloqueo de datos locales con PIN mediante AES-GCM 256 bits. |
| `enableEncryptedBackupRadar` | **Capa 2 — Punto 6** | **Apagado (`false`)** | Respaldo cifrado: Habilita la exportación e importación de archivos `.radar` protegidos con contraseña. |

> [!NOTE]
> Estas tres variables son administrables en caliente desde la subpestaña **Feature flags & freemium** (`user-subtab-flags`) en la Zona de Usuario. Al encender o apagar cualquiera de ellas, la interfaz se actualiza de forma reactiva sin necesidad de recargar la página.

---

## 6. Autenticación Federada y Gestión de Identidad (SSO)

El modelo de identidad de Radar está diseñado para minimizar la superficie de ataque de credenciales:
* **Proveedores de Identidad de Confianza:** La autenticación se apoya en protocolos estándar de inicio de sesión único (SSO) con **Google** y **Microsoft**.
* **Cero Almacenamiento de Contraseñas:** Radar no gestiona, no solicita ni almacena contraseñas de usuarios. Esto elimina el riesgo de ataques de fuerza bruta, robo de hashes o filtraciones de contraseñas.
* **Modelo Freemium No Invasivo:** La consulta de convocatorias, la lectura de pliegos y la simulación financiera son completamente abiertas. La autenticación solo se promueve para características que requieran sincronización de cuenta.

---

## 7. Cumplimiento Normativo (Ley 1581 de 2012 — Habeas Data Colombia)

En concordancia con el régimen legal de protección de datos personales de la República de Colombia (Ley 1581 de 2012 y Decreto 1377 de 2013):

### 7.1. Principio de Libertad y Consentimiento
* El uso de la herramienta no condiciona la consulta de información pública a la entrega de datos personales ni números de identificación privados.
* El perfil de empresa proponente (NIT, códigos RUP, palabras clave) es suministrado voluntariamente por el usuario para personalizar su experiencia y se conserva en su propio equipo.

### 7.2. Principio de Veracidad y Calidad de la Información
* Los datos de contratos, cuantías, pliegos y estados contractuales provienen directamente y sin alteración de las fuentes oficiales primarias del Estado colombiano (Portal de Datos Abiertos - Secop I y Secop II).
* Radar actúa como un visor neutral de datos abiertos oficiales, sin modificar la información jurídica o presupuestal de los expedientes.

### 7.3. Derecho de Acceso, Rectificación y Supresión ("Derecho al Olvido")
El usuario tiene control total e inmediato sobre sus datos en cualquier momento:
* **Eliminar Historial:** El botón de limpieza en la pestaña de procesos vistos vacía el historial de lectura local.
* **Eliminar Seguimiento:** La función `clearAllSaved()` borra de forma irreversible todas las licitaciones guardadas.
* **Restablecer Perfil:** La función `resetUserProfileDefaults()` elimina los códigos RUP, palabras clave y preferencias de la empresa, devolviendo el aplicativo a su estado de fábrica sin dejar rastros en servidores externos.
* **Purga de Emergencia (`purgeAllUserDataAndQuit`):** Cuando está activada por el administrador, destruye de forma inmediata todo el almacenamiento local, historial, portapapeles y claves de sesión con un solo clic.
