Ir al contenido

Código abierto · Local · Línea de comandos

Audita tu propio historial como lo haría una IA.

Los modelos de lenguaje de hoy pueden leer unos cientos de tus publicaciones públicas más comunes y deducir dónde vives, dónde trabajas y cuál es tu rutina, y enlazar una cuenta seudónima con tu nombre real. No a partir de un único desliz, sino del mosaico de muchas publicaciones juntas. ExposureCheck realiza esa misma lectura adversaria sobre tu propia exportación, en tus propios términos, y te muestra qué conviene generalizar o reescribir.
$ exposurecheck audit --twitter ./twitter_export \
    --backend local --expensive-model llama3.1 --i-own-this-data

ExposureCheck v0.1  ·  local backend  ·  nothing left this machine
Parsed 3,214 posts · 19 months · prefilter kept 2,901 (weak signals retained)

RISK CONTRIBUTION        posts   what drives it
───────────────────────────────────────────────────────────────
● LOCATION       High      28    local events, commute clues, "my gym"
● EMPLOYER       High      11    project code-names, office banter
● SCHEDULE       Medium    63    posting-time concentration → UTC-8
○ FAMILY         Low        4    a relative's first name, a school

Top card · LOCATION (High)
  [LOCAL EVENT] near [NEIGHBORHOOD]  — 6 posts
  [COMMUTE] on [TRANSIT LINE]        — mentioned 9 times
  → generalise: drop venue names; delay event posts by a week
  12 posts to review · re-run with -i to open YOUR own originals

No dossier written. No profile saved. "High" is not "you are doxxed" —
it means a model could narrow this down. Fix, then re-scan.

Una ejecución real con un modelo local. Las categorías van enmascaradas, el valor original no se muestra y no se guarda ningún perfil.

Qué hace, en un minuto
#

ExposureCheck lee los datos que exportas de una plataforma: nunca una cuenta en vivo, nunca la de otra persona. Y plantea la pregunta que se haría un adversario: con todo esto junto, ¿qué se puede deducir de la persona que hay detrás?

  • Lee tu exportación GDPR de Reddit y tu archivo de X / Twitter (una carpeta o un .zip).
  • Avanza con una cascada que preserva el recall (tasa de detección): una primera pasada barata ordena cada publicación, una pasada cara lee las prioritarias y las señales débiles se conservan, porque el mosaico se arma con señales débiles y descartarlas sería un falso consuelo.
  • Extrae la capa de metadatos sin recurrir a conjeturas: el campo de ubicación que tú mismo pusiste, los enlaces salientes, los datos EXIF / GPS de las imágenes (la información que la cámara incrusta en cada foto), el modelo del dispositivo y la concentración de horarios que delata tu zona horaria. En X, eso revela más que el propio texto.
  • Informa con tarjetas de riesgo por categoría —ubicación, empleo, familia, horarios, finanzas, vínculos entre cuentas—, ordenadas por su aporte al riesgo, cada una con ejemplos enmascarados y arreglos concretos que generalizan antes de borrar.

Funciona en local, no escribe ningún dosier y nunca guarda en el disco un perfil tuyo.

¿No conoces la «reidentificación por mosaico»? Empieza por la amenaza, no por la herramienta: lee el artículo hermano, Audita tu propio historial como lo haría una IA, y vuelve después.

Lo que a propósito no hace
#

  • Nada de dosier. Nunca imprime «vives en X, trabajas en Y, te llamas Z». Las tarjetas muestran fragmentos enmascarados; el valor resuelto solo aparece cuando abres tu propia publicación original, ahí en el momento, sin que se guarde.
  • No exporta los hallazgos. No hace scraping (su única entrada son tus exportaciones). No publica ni borra nada por ti. No analiza el historial de nadie más.
  • No te vuelve anónimo. Reduce el riesgo. «Low» no es «a salvo», y los metadatos, los horarios y el estilo de escritura solo entran en parte en su alcance.

Qué sale de tu equipo, y qué no
#

Es lo primero que una herramienta de privacidad debería decirte, así que aquí va por delante. La inferencia corre sobre un backend que eliges , y esa elección —no la herramienta— decide qué viaja:

BackendQué es¿Tus datos salen de tu equipo?
localun modelo local de Ollama / llama.cpp / LM StudioNo: se queda en tu ordenador
heuristicun stub de expresiones regulares sin conexión, recall casi nuloNo, pero solo para desarrollo / CI, no es una auditoría de verdad
cloudcualquier endpoint compatible con OpenAI, con tu clave⚠️ : tus publicaciones van a ese proveedor

La herramienta en sí no tiene servidor, ni telemetría, ni cuenta. La autora no guarda ninguno de tus datos ni ninguna clave. Cuando eliges cloud, tu exportación va al proveedor de API que tú indicaste, y se aplican el registro, la retención y la política de entrenamiento de ese proveedor, además de la IP y la facturación atadas a tu clave. ExposureCheck no añade un salto; tampoco puede quitar el que tú decidiste dar.

La única advertencia sobre la nube que de verdad importa
#

Si la cuenta que auditas es una seudónima que mantienes aparte de tu identidad real y tu cuenta de IA o de nube está registrada o pagada a tu nombre real, entonces enviar ese historial a la nube le permite al proveedor enlazar identidad real ↔ cuenta anónima en su lado (una citación judicial, una filtración, un infiltrado). Esa es exactamente la desanonimización que esta herramienta existe para evitar.

En la práctica: para auditar una cuenta estrictamente anónima, usa --backend local (o una cuenta en la nube abierta y pagada de forma anónima). Para auditar tu cuenta pública, la de tu nombre real, la nube va bien. La herramienta lo advierte en pantalla y te pide que lo confirmes cuando viene al caso. Nunca forzamos el modo local —eso reduciría el público a nadie—; lo que hacemos es dejar la disyuntiva a la vista.

Cómo funciona
#

export ─▶ parse ─▶ prefilter (drop only TRUE-empty) ─┬─▶ deterministic: profile + EXIF + timing ─┐
                                                     └─▶ cascade: cheap route ─▶ expensive read ─┤
                                         risk-contribution scoring ─▶ category cards ─▶ no-dossier report

La cascada existe para que un historial de mil a tres mil publicaciones siga siendo asequible: la pasada barata decide qué merece la lectura cara en vez de mandarlo todo. Después, la puntuación por aporte al riesgo ordena las categorías por cuánto te acotan de verdad, y no por la confianza bruta del modelo, que no está calibrada.

Instalación
#

El núcleo —el análisis, el EXIF, la cascada y los backends HTTP de nube y local— usa solo la biblioteca estándar de Python. Ningún paquete de terceros toca tu exportación, de modo que el código en el que depositar tu confianza es mínimo.

# from source (a PyPI release ships with the first public version):
git clone https://github.com/coraaegis/exposurecheck && cd exposurecheck
pip install -e .

# or run without installing:
python -m exposurecheck --help
# Local model — nothing leaves your machine (recommended for anonymous accounts)
exposurecheck audit \
  --reddit ./reddit_export.zip \
  --twitter ./twitter_export \
  --backend local --expensive-model llama3.1 \
  --i-own-this-data

# Cloud — bring your own key; set it in the ENV, never on the command line
export OPENAI_API_KEY=sk-...
exposurecheck audit --twitter ./twitter_export --backend cloud --i-own-this-data

La clave de API se lee desde una variable de entorno a propósito: los argumentos de la línea de comandos se filtran al historial del intérprete y al listado de procesos.

Hoy ExposureCheck es una herramienta de línea de comandos, pensada para quien se mueve con soltura en una terminal —que es también donde viven sus primeros revisores—. El siguiente hito es una aplicación de un solo clic para quien no es técnico (un paquete con una interfaz local en el navegador y sin Python que instalar); la CLI se queda para los usuarios avanzados.

Confía como confiarías en cualquier herramienta de privacidad: comprobando, no por fe
#

La autora es seudónima, así que no te fíes de un nombre. Fíate, en cambio, de lo que puedes verificar:

  • Lee el código. Es de código abierto (MIT) y usa solo la biblioteca estándar, de modo que el árbol de dependencias que tienes que auditar es, en esencia, la propia biblioteca estándar.
  • Verifica la versión. Cada versión va firmada con PGP por Cora Aegis. Descarga la clave por WKD y comprueba la firma:
    gpg --locate-keys cora@cypherpunkguide.com
    gpg --verify exposurecheck-0.1.0.tar.gz.asc
    Cada versión incluye sus sumas de verificación SHA-256, y las compilaciones son reproducibles: reconstruye desde el código etiquetado y confirma que el artefacto coincide.
  • Sin certificado de firma de código vinculado a una identidad, por diseño: ese tipo de certificado ataría el proyecto a una identidad legal, justo lo contrario de la idea. Un binario de Windows sin firmar puede mostrar el aviso de SmartScreen de «editor desconocido»; es lo esperable. Usa mejor un gestor de paquetes (pip / Scoop / Homebrew) o ejecuta desde el código fuente, y verifica la firma PGP.
  • El diseño de la salida es la salvaguarda. La regla de no escribir dosier está impuesta en el código: las etiquetas enmascaradas las genera la máquina, de modo que ni siquiera el texto del propio modelo puede colar un valor resuelto en el informe. Las defensas frente al doble uso —entrada condicionada a que seas el dueño, salida solo por categorías, enmascarado y una evaluación de abuso previa a la publicación— están documentadas en ABUSE-EVAL.md.

Una tabla transparente del flujo de datos y un modelo de amenazas publicado muestran qué pretende la herramienta. El código, la firma y la compilación reproducible son tu forma de confirmar que hace eso, y nada más.

Límites que conviene tener presentes
#

  • «Low» no es «a salvo». La herramienta reduce el riesgo; no certifica el anonimato.
  • El recall no es perfecto. Que no salte nada («sin hallazgos») no prueba que seas imposible de identificar, sobre todo con el backend heuristic, que está para pruebas, no para auditar.
  • Fuera de alcance: la identificación por el estilo de escritura, el cruce entre plataformas más allá de lo que contienen tus exportaciones, los metadatos a nivel de red y el contenido visual de las imágenes (la v1 solo lee EXIF y metadatos; mira la hoja de ruta).
  • La herramienta lee tus datos más delicados. Por eso, precisamente, funciona en local, usa solo la biblioteca estándar, es de código abierto y va firmada: para que aquello que ejecutas para medir tu exposición sea, en sí mismo, la superficie más pequeña y auditable posible.

Preguntas frecuentes
#

¿ExposureCheck sube mis publicaciones a algún sitio?
#

Solo si eliges el backend cloud, y entonces solo al proveedor de API cuya clave aportaste. Con local o heuristic, nada sale de tu equipo. La herramienta no tiene servidor ni telemetría propios.

¿Me va a decir mi dirección o mi nombre real?
#

No. Ese es el diseño deliberado de «nada de dosier». Muestra categorías enmascaradas y te lleva a tus propias publicaciones originales para que decidas qué cambiar. Nunca arma ni guarda un perfil tuyo.

Estoy auditando una cuenta anónima. ¿Es seguro el backend en la nube?
#

Usa --backend local para una cuenta estrictamente anónima, salvo que tu propia cuenta en la nube sea también anónima. Enviar el historial de una cuenta anónima a una cuenta de IA con tu nombre real enlaza a las dos en el lado del proveedor: justo el riesgo que esta herramienta te ayuda a encontrar.

¿De verdad es seguro pasarla por todo mi historial?
#

El código es abierto y usa solo la biblioteca estándar, así que puedes leer qué hace; la versión va firmada con PGP y es reproducible, así que puedes confirmar qué instalaste; y no escribe ningún perfil en el disco. Verifica esas tres cosas en vez de darlas por buenas: ahí está todo.

¿Por qué una línea de comandos y no una aplicación?
#

El público inicial es técnico, y una CLI es la forma más auditable. Una aplicación de un solo clic, con interfaz local en el navegador, es el siguiente hito para quien no es técnico.


Hecho por Cora Aegis. ¿Has encontrado un fallo de privacidad o de seguridad? La divulgación responsable es bienvenida: cora@cypherpunkguide.com (PGP por WKD). El código canónico y el nombre ExposureCheck viven en github.com/coraaegis/exposurecheck.