ScrubVault
Proxy de airgap de PII en memoria sin dependencias y enmascaramiento reversible para LLMs en la nube (cumple con el Art. 32 del GDPR).
Documentación
🛡️ ScrubVault: Motor de Enmascaramiento de PII Reversible y Aislamiento de IA con Cero Fugas de Datos
Envía datos sensibles a LLMs en la nube (ChatGPT, Claude, Gemini) sin filtrar nunca información personal confidencial.
pip install scrub-vault
ScrubVault es un proxy de privacidad ligero en memoria, sin dependencias, y un servidor de Protocolo de Contexto de Modelo (MCP). Intercepta prompts, reemplaza información personal identificable (correos electrónicos, IBANs, direcciones IP, tarjetas de crédito, identificadores fiscales) con tokens locales deterministas ({{EMAIL_1}}, {{IBAN_1}}), y restaura los valores originales cuando la IA responde.
🚀 La Arquitectura
+----------------------------------+
| Your Prompt (Confidential PII) |
+----------------------------------+
│
▼
┌─────────────────────────────┐
│ ScrubVault (Local RAM) │
│ - Scans & Masks Sensitive │
│ - Stores Mapping in Memory │
└─────────────────────────────┘
│
▼ (Masked Prompt: "{{EMAIL_1}}, {{IBAN_1}}")
┌─────────────────────────────┐
│ Public Cloud LLM API │
│ (OpenAI / Anthropic / ...) │
│ *Zero PII is transmitted* │
└─────────────────────────────┘
│
▼ (Response with tokens)
┌─────────────────────────────┐
│ ScrubVault (Local RAM) │
│ - Deterministic Unmasking │
└─────────────────────────────┘
│
▼
+----------------------------------+
| End-User Result (Restored PII) |
+----------------------------------+
⚡ Inicio Rápido
1. SDK de Python (Cero Dependencias)
from src.core.vault import ScrubVault
vault = ScrubVault()
# 1. Mask sensitive input
input_text = "Order for client Max, email: max@corp.de, IBAN: DE89370400440532013000"
result = vault.mask(input_text)
print(result.masked_text)
# Output: "Order for client Max, email: {{EMAIL_1}}, IBAN: {{IBAN_1}}"
# 2. Transmit result.masked_text to your LLM of choice...
ai_response = "Received confirmation for {{EMAIL_1}} on account {{IBAN_1}}."
# 3. Unmask locally
clean_response = vault.unmask(ai_response, result.token_map)
print(clean_response)
# Output: "Received confirmation for max@corp.de on account DE89370400440532013000."
2. CLI Independiente
# Calculate GDPR Art. 32 Risk Score
python -m src.cli.main audit "Contract with Herr Schmidt, IBAN: DE89370400440532013000"
# Mask a dataset file directly
python -m src.cli.main scrub-dataset input.json output_clean.json
🤖 Integración con el Protocolo de Contexto de Modelo (MCP)
ScrubVault incluye un servidor MCP nativo de stdio. Añádelo a tu configuración de claude_desktop_config.json o Antigravity:
{
"mcpServers": {
"scrub_vault": {
"command": "python",
"args": ["-m", "src.mcp.server"],
"cwd": "/path/to/scrub_vault"
}
}
}
Instalación en 1 clic vía Smithery (Claude Desktop, Cursor):
npx -y @smithery/cli install @tastenkasperle/scrub-vault --client claude
Herramientas MCP Disponibles:
scrub_mask_text: Enmascara PII en el texto de entrada y devuelve un mapa de tokens reversible.scrub_unmask_text: Reemplaza tokens con los valores originales.scrub_audit_risk: Calcula puntuaciones de riesgo y desgloses de detección.scrub_anonymize_json: Limpia estructuras JSON de forma recursiva.
🛡️ Estándar de Seguridad y Código Limpio
- Biblioteca Estándar de Python Pura: Cero dependencias de terceros (
re,json,sys,typing). - Bóveda en Memoria: Los mapas de tokens viven exclusivamente en RAM volátil y nunca se escriben en disco.
- Endurecido contra ReDoS: Los patrones de expresiones regulares están estrictamente limitados contra ataques de complejidad algorítmica.
- Auditoría Superada: Probado y verificado por Raptor Guard SAST (0 hallazgos Críticos, 0 Altos, 0 Medios).
📄 Licencia
Licencia Apache 2.0. Investigación e ingeniería de código abierto por la Diamantenschmiede.