Las defensas anteriores contra la lectura de pantalla por IA operaban en la capa de píxeles — ruido aleatorio, perturbación en el dominio de frecuencias, vibración sub-píxel, micro desenfoque, desplazamientos cromáticos. Estas siguen siendo efectivas contra los motores OCR clásicos, y permanecen como parte de la defensa en capas. Pero los Modelos de Visión-Lenguaje modernos — GPT-4V, Claude Vision, Gemini y sus sucesores — tienen codificadores de parches conscientes del tokenizador que reconstruyen palabras a partir de evidencia visual parcial de forma cada vez más eficaz. Los píxeles pueden ser ruidosos y el modelo igualmente recupera el texto subyacente.
La siguiente superficie de ataque vive una capa más arriba: el DOM. Dentro del navegador headless que renderiza la página protegida, somos propietarios de los datos de caracteres reales que se pintan en pantalla. Podemos decidir que la letra en la posición 47 del tercer párrafo ya no es la original; es un carácter visualmente similar pero diferente del mismo alfabeto. El OCR o VLM que mira una captura de pantalla de esa página ve el carácter sustituido y lo reporta como la verdad. El modelo no sabe que fue sustituido; no tiene nada con lo que comparar.
La parte difícil es hacer esto sin interrumpir la lectura para el usuario humano. El mecanismo de revelación — una pequeña área alrededor del cursor que hace girar el texto sustituido de vuelta al original — es la respuesta. Las personas leen mirando: el ojo se fija en una frase, el reconocimiento de patrones del cerebro completa el resto desde la visión periférica más el contexto. La revelación del cursor se alinea con donde el usuario está mirando realmente; el resto de la página puede permanecer sustituida porque el usuario no lo está leyendo carácter a carácter de todos modos. Un modelo IA que mira la misma captura de pantalla no tiene tal cursor, no tiene tal revelación — lee todo como el texto sustituido.
ZeroLeak's headless browser inyecta un script en cada página protegida. Al arrancar, el script recorre el DOM, elige sustitutos visualmente similares para una porción de las letras del mismo alfabeto latino, y los escribe en la página. La posición del cursor guía una zona de revelación — dondequiera que el usuario esté mirando, los originales se muestran. Todo fuera de la revelación permanece sustituido.
Un carácter en una posición de la página se convierte en otro carácter que parece visualmente similar pero es una letra diferente — a convertida en e, b convertida en p, m convertida en w, n convertida en u. El intercambio es entre letras que comparten una familia visual en el alfabeto latino, no entre caracteres Unicode de apariencia similar. Por qué importa esta distinción: los pipelines OCR y de visión IA normalizan los homoglifos Unicode (Cirílico а se convierte en Latino a) de vuelta al Latino canónico. Los intercambios del mismo script no dejan nada que el normalizador deshaga — el modelo lee el carácter sustituido como la letra real.
Dondequiera que el usuario mueva el cursor, un área a su alrededor (círculo por defecto, configurable como banda horizontal) hace girar los caracteres sustituidos de vuelta a sus originales. El usuario lee donde mira; el reconocimiento de patrones natural del cerebro maneja el resto desde la visión periférica. Fuera de la revelación, la página permanece sustituida — lo que ve un modelo IA mirando la captura de pantalla.
Cuando la página carga, cada letra sustituida obtiene un reemplazo específico que permanece estable durante toda la vida de la página. No hay parpadeo, no hay rotación temporal, no hay animación en la visión del usuario — el cipher se sienta silenciosamente detrás de la revelación del cursor. Un diseño anterior rotaba el cipher cada pocos fotogramas; las pruebas de fatiga del usuario mostraron que causaba incomodidad de lectura medible, por lo que el diseño final permanece estático.
Text cipher opera dentro del DOM del navegador headless — directamente sobre los datos de caracteres, no sobre los píxeles renderizados. Las defensas de capa de píxeles contra los modelos de visión IA siguen funcionando por debajo; text cipher agrega una superficie de ataque ortogonal con la que las técnicas de recuperación de píxeles no pueden ayudar. Un atacante que rompa la capa de píxeles todavía tiene que leer correctamente el texto sustituido. Un atacante que de alguna manera recupere los caracteres originales todavía tiene que derrotar la capa de píxeles.
Cada comportamiento a continuación forma parte del diseño de producción tras la revisión empírica de fatiga; la implementación en vivo coincide exactamente con esto. La configuración es por servicio protegido a través de la consola del operador.
Las sustituciones permanecen dentro del alfabeto latino. La tabla de sustitución está seleccionada por familia visual: cuencos redondos (a, e, o, c), cuencos en espejo (b, p, d, q), verticales estrechos (i, l, j, 1), arcos (m, n, u, h, w), descendentes (g, y, j, q). Cada letra de la tabla tiene 2-4 vecinos visuales; la sustitución elige uno de ellos. Se prefiere la correspondencia de ancho para que no se produzca redistribución del diseño.
La forma predeterminada es un círculo de radio configurable (200 px por defecto). Una forma de banda alternativa cubre una franja horizontal a la altura del cursor — útil para leer contenido de líneas largas donde el movimiento del ojo es mayormente horizontal. La forma se comparte con otros efectos basados en cursor de ZeroLeak, por lo que los operadores configuran una vez.
Cuando el script ve por primera vez un nodo de texto, almacena el valor original en un mapa por nodo y escribe el valor sustituido en el DOM. Las actualizaciones posteriores usan la misma sustitución — no hay rotación por fotograma. El usuario percibe una página estática; el cipher es invisible detrás de la revelación del cursor.
El script de sustitución es inyectado por el motor ZeroLeak en cada documento navegado dentro del Chromium headless. La aplicación web protegida no se modifica; el cipher funciona como un ayudante del lado de la página entre el documento renderizado y la capa de visualización del usuario. No se requiere coordinación con el código de la aplicación protegida.
El texto que el usuario escribe en inputs, textareas o regiones contentEditable queda excluido de la sustitución. La aplicación protegida recibe entrada limpia tal como el usuario la escribió. Cuadros de búsqueda, composición de mensajes, envío de formularios — todo sin afectar.
Un IntersectionObserver rastrea qué nodos de texto son realmente visibles. El texto fuera de pantalla no se sustituye (el usuario no puede verlo de todos modos). Cuando el usuario desplaza una sección oculta hacia la vista, la sustitución se aplica justo a tiempo. Esto mantiene el coste de ejecución proporcional a lo que está en pantalla, no al tamaño total de la página.
La sustitución visual del mismo script es el corazón de la técnica. La tabla a continuación es una muestra del mapeo de producción real; la tabla completa cubre todas las minúsculas, mayúsculas y dígitos seleccionados.
Estos cuatro caracteres comparten la forma de cuenco cerrado; sustituir uno por otro preserva la silueta a distancia de lectura. Una palabra como 'data' podría convertirse en 'doto' en la forma sustituida — un humano que la mire a través de la revelación del cursor lee 'data' instantáneamente, un motor OCR o modelo IA que lea la forma sustituida devuelve 'doto'.
Estos cuatro son espejos visuales entre sí; sustituir uno por otro preserva el patrón de tallo vertical + cuenco. La palabra 'database' podría convertirse en 'patabose' en forma de cipher — visualmente lo suficientemente cercana para que el reconocimiento de patrones del cerebro recupere el original, semánticamente no relacionada lo suficiente para que un modelo IA que la lea devuelva la palabra incorrecta.
Estos cinco comparten el patrón de arco / arco invertido / arco repetido; la sustitución dentro de esta familia preserva el ritmo general del texto. 'human' podría convertirse en 'wuwon' — legible de un vistazo bajo el cursor, irreconocible para una IA que lea el texto sustituido.
Propuestas anteriores usaban confusables Unicode (Cirílico а para Latino a, Griego ο para Latino o). Estas fueron rechazadas porque los pipelines OCR y los modelos de visión IA normalizan estos de vuelta al Latino canónico — Tesseract con un paquete de idioma ruso en texto mixto Latino-Cirílico devuelve salida Latino limpia, porque el paso del modelo de lenguaje proyecta los homoglifos Cirílicos sobre sus equivalentes Latinos. La sustitución del mismo script no deja nada que normalizar.
El texto renderizado dentro de canvas HTML5 o SVG no es parte del conjunto de nodos de texto DOM; el cipher no lo toca. Igualmente, el texto que el usuario escribe en inputs y textareas permanece limpio. Estos vacíos de cobertura son deliberados: el contenido de canvas y SVG es manejado en paralelo por las defensas de capa de píxeles, y la entrada de formulario debe permanecer limpia para que la aplicación protegida funcione.
Usuarios con asistentes IA personales en su teléfono o junto a su estación de trabajo — cualquiera puede pegar una captura de pantalla en GPT-4V o Claude Vision y pedirle que resuma. Con text cipher activado, el resumen de la IA se construye sobre el texto sustituido — devuelve una salida de apariencia plausible que, al inspeccionarla, es diferente de lo que estaba en la pantalla original.
Documentos leídos en pantalla pero no destinados a ser exfiltrados a través de una herramienta de IA. Una captura de pantalla tomada y proporcionada a una IA para análisis devuelve números incorrectos y nombres alterados — la IA reporta con confianza contenido que no coincide con el documento real.
El personal médico con acceso de solo lectura a los historiales de pacientes no puede utilizar significativamente una IA externa para resumir o consultar los datos — la IA ve texto sustituido. La visión clínica permanece dentro del entorno protegido; la ruta de ingesta de IA devuelve un documento diferente.
Contenido clasificado visto por analistas. Cualquier herramienta IA consultada desde fuera del entorno protegido lee texto sustituido, no el material clasificado original. El límite de divulgación se mantiene en la ruta de ingesta de IA del mismo modo que se mantiene en la ruta de captura de pantalla.
Cargaremos una página, moveremos el cursor sobre el texto para que vea la lectura normal, tomaremos una captura de pantalla, y la proporcionaremos a Tesseract, GPT-4V y Claude Vision — y le mostraremos el texto muy diferente que devuelve cada uno.