Capacité

Transparent pour l'œil humain, un cauchemar pour les lecteurs d'écran IA

Les lettres de la page rendue sont silencieusement remplacées par des frères visuellement proches du même alphabet — a transformé en e, b transformé en p, m transformé en w. La zone autour du curseur de l'utilisateur révèle les originaux, de sorte qu'une personne lisant la page ne perçoit aucun changement. Un moteur OCR ou un modèle de vision IA alimenté d'une capture d'écran de cette même page lit des mots complètement différents.

La distorsion au niveau des pixels s'érode en tant que défense : les modèles de vision IA modernes comme GPT-4V, Claude Vision et Gemini deviennent progressivement meilleurs pour lire du texte à travers le bruit, le flou et les patterns adversariaux. La surface d'attaque plus profonde est le texte lui-même. ZeroLeak substitue silencieusement une partie des lettres de la page rendue par des frères visuellement proches mais sémantiquement différents du même alphabet latin. Là où se trouve le curseur de l'utilisateur, une zone de révélation remet le texte substitué à l'original — l'humain lit là où il regarde, et le pattern recognition naturel du cerveau complète le reste. Lorsque la même page est capturée en capture d'écran et transmise à un modèle IA, le modèle n'a pas de zone de révélation ; il lit les caractères substitués comme le contenu réel, et ce qu'il retourne est un document différent.

Même alphabet
Lettres latines remplacées par des voisines latines — rien pour les normaliseurs OCR à annuler
Piloté par curseur
Une zone de révélation autour du curseur montre les originaux — l'utilisateur lit là où il regarde
Couche DOM
Fonctionne au niveau des données de caractères, complémentaire à la distorsion au niveau des pixels

Les défenses au niveau des pixels s'érodent ; les modèles de vision IA lisent à travers elles

Les défenses antérieures contre la lecture d'écran par IA opéraient au niveau de la couche de pixels — bruit aléatoire, perturbation dans le domaine fréquentiel, gigue sous-pixel, micro-flou, décalages chromatiques. Elles restent efficaces contre les moteurs OCR classiques et font partie de la défense en couches. Mais les modèles de vision-langage modernes — GPT-4V, Claude Vision, Gemini et leurs successeurs — disposent d'encodeurs de patches avec conscience des tokens qui reconstruisent de mieux en mieux les mots à partir de preuves visuelles partielles. Les pixels peuvent être bruités et le modèle récupère toujours le texte sous-jacent.

La prochaine surface d'attaque se trouve une couche au-dessus : le DOM. À l'intérieur du navigateur headless qui rend la page protégée, nous possédons les données de caractères réelles peintes sur l'écran. Nous pouvons décider que la lettre à la position 47 du troisième paragraphe n'est plus l'original ; c'est un caractère visuellement proche mais différent du même alphabet. L'OCR ou le VLM qui regarde une capture d'écran de cette page voit le caractère substitué et le rapporte comme la vérité. Le modèle ne sait pas qu'il a été substitué ; il n'a rien à comparer.

La partie difficile consiste à faire cela sans gêner la lecture pour l'utilisateur humain. Le mécanisme de révélation — une petite zone autour du curseur qui remet le texte substitué à l'original — est la réponse. Les gens lisent en regardant : l'œil se fixe sur une phrase, le pattern recognition du cerveau complète le reste à partir de la vision périphérique et du contexte. La révélation par curseur s'aligne avec l'endroit où l'utilisateur regarde réellement ; le reste de la page peut rester substitué car l'utilisateur ne le lit pas de toute façon caractère par caractère. Un modèle IA regardant la même capture d'écran n'a pas un tel curseur, pas une telle révélation — il lit tout comme le texte substitué.

Substituer les lettres, révéler là où l'utilisateur regarde

Un script est injecté dans chaque page protégée par le navigateur headless de ZeroLeak. Au démarrage, le script parcourt le DOM, choisit des substituts visuellement proches pour une partie des lettres du même alphabet latin, et les écrit dans la page. La position du curseur pilote une zone de révélation — partout où l'utilisateur regarde, les originaux apparaissent. Tout ce qui est en dehors de la révélation reste substitué.

Les lettres sont silencieusement remplacées par des frères visuellement proches du même alphabet

Un caractère à une position de la page devient un autre caractère qui ressemble visuellement mais est une lettre différente — a transformé en e, b transformé en p, m transformé en w, n transformé en u. La substitution est entre des lettres qui partagent une famille visuelle dans l'alphabet latin, pas entre des sosies Unicode. Pourquoi cette distinction est importante : les pipelines OCR et de vision IA normalisent les homoglyphes Unicode (le а cyrillique devient le a latin) vers le latin canonique. Les substitutions au sein du même alphabet ne laissent rien à normaliser — le modèle lit le caractère substitué comme la lettre réelle.

Une zone de révélation autour du curseur montre les originaux

Partout où l'utilisateur déplace le curseur, une zone autour de lui (cercle par défaut, configurable comme bande horizontale) remet les caractères substitués à leurs originaux. L'utilisateur lit là où il regarde ; le pattern recognition naturel du cerveau gère le reste à partir de la vision périphérique. En dehors de la révélation, la page reste substituée — ce qu'un modèle IA regardant la capture d'écran voit.

Cipher statique — chaque caractère reçoit une substitution qui ne change pas

Lorsque la page se charge, chaque lettre substituée reçoit un remplacement spécifique qui reste stable pour la durée de vie de la page. Il n'y a aucun scintillement, aucune rotation temporelle, aucune animation dans le champ de vision de l'utilisateur — le cipher se tient silencieusement derrière la révélation par curseur. Une conception antérieure faisait tourner le cipher toutes les quelques images ; les tests de fatigue des utilisateurs ont montré que cela causait un inconfort de lecture mesurable, donc la conception finale reste statique.

Fonctionne au niveau de la couche DOM, complémentaire aux défenses au niveau des pixels

Text Cipher opère à l'intérieur du DOM du navigateur headless — directement sur les données de caractères, pas sur les pixels rendus. Les défenses au niveau des pixels contre les modèles de vision IA continuent de fonctionner en dessous ; Text Cipher ajoute une surface d'attaque orthogonale que les techniques de récupération de pixels ne peuvent pas aider. Un attaquant qui perce la couche de pixels doit toujours lire correctement le texte substitué. Un attaquant qui récupère d'une façon ou d'une autre les caractères originaux doit toujours vaincre la couche de pixels.

Ce que le cipher fait réellement

Chaque comportement ci-dessous fait partie de la conception de production après la révision empirique de la fatigue ; l'implémentation en production correspond exactement à ceci. La configuration se fait par service protégé via la console opérateur.

Substitution latine au sein du même alphabet, table soigneusement éditée

Les substitutions restent à l'intérieur de l'alphabet latin. La table de substitution est éditée par famille visuelle : cavités rondes (a, e, o, c), cavités en miroir (b, p, d, q), verticales étroites (i, l, j, 1), arches (m, n, u, h, w), descendantes (g, y, j, q). Chaque lettre de la table a 2-4 voisins visuels ; la substitution en choisit un. L'appariement des largeurs est favorisé pour que la mise en page ne se déplace pas.

Zone de révélation — cercle autour du curseur ou bande horizontale

La forme par défaut est un cercle de rayon configurable (200 px par défaut). Une forme de bande alternative couvre une bande horizontale à la hauteur du curseur — utile pour lire du contenu à longues lignes où le mouvement des yeux est principalement horizontal. La forme est partagée avec d'autres effets ZeroLeak basés sur le curseur, les opérateurs configurent donc une fois.

Cipher statique persisté dans une map par nœud

Lorsque le script voit pour la première fois un nœud de texte, il stocke la valeur originale dans une map par nœud et écrit la valeur substituée dans le DOM. Les mises à jour ultérieures utilisent la même substitution — il n'y a pas de rotation par image. L'utilisateur perçoit une page statique ; le cipher est invisible derrière la révélation par curseur.

Injecté via le hook de script du navigateur headless

Le script de substitution est injecté par le moteur ZeroLeak dans chaque document navigué à l'intérieur de Chromium headless. L'application web protégée n'est pas modifiée ; le cipher s'exécute comme un assistant côté page entre le document rendu et la couche de visualisation de l'utilisateur. Aucune coordination avec le code de l'application protégée n'est requise.

La saisie de formulaire par l'utilisateur est exclue

Le texte que l'utilisateur saisit dans les inputs, les textareas ou les régions contentEditable est exclu de la substitution. L'application protégée voit une saisie propre telle que l'utilisateur l'a écrite. Les champs de recherche, la composition de messages, la soumission de formulaires — tous ne sont pas affectés.

Seul le texte visible dans le viewport est touché

Un IntersectionObserver suit quels nœuds de texte sont réellement visibles. Le texte hors écran n'est pas substitué (l'utilisateur ne peut de toute façon pas le voir). Lorsque l'utilisateur fait défiler une section cachée dans le champ de vision, la substitution est appliquée juste à temps. Cela maintient le coût d'exécution proportionnel à ce qui est à l'écran, pas à la taille totale de la page.

La table de substitution et ce qui reste intact

La substitution visuelle au sein du même alphabet est au cœur de la technique. La table ci-dessous est un échantillon du mapping de production réel ; la table complète couvre l'intégralité des minuscules, majuscules et chiffres sélectionnés.

01

Cavités rondes — a, e, o, c

Ces quatre caractères partagent tous la forme de cavité fermée ; substituer l'un pour l'autre préserve la silhouette à distance de lecture. Un mot comme 'data' pourrait devenir 'doto' sous la forme substituée — un humain y jetant un coup d'œil à travers la révélation du curseur lit 'data' instantanément, un moteur OCR ou un modèle IA lisant la forme substituée retourne 'doto'.

02

Cavités en miroir — b, p, d, q

Ces quatre sont des miroirs visuels les uns des autres ; substituer l'un pour l'autre préserve le pattern tige verticale + cavité. Le mot 'database' pourrait devenir 'patabose' sous forme de cipher — visuellement assez proche pour que le pattern recognition du cerveau récupère l'original, sémantiquement sans rapport pour qu'un modèle IA qui le lit retourne le mauvais mot.

03

Arches — m, n, u, h, w

Ces cinq partagent le pattern arche / arche inversée / arche répétée ; la substitution au sein de cette famille préserve le rythme général du texte. 'human' pourrait devenir 'wuwon' — lisible d'un coup d'œil sous le curseur, méconnaissable pour une IA lisant le texte substitué.

04

Pourquoi pas les homoglyphes Unicode (cyrillique, grec)

Des propositions antérieures utilisaient des confusables Unicode (а cyrillique pour le a latin, ο grec pour le o latin). Celles-ci ont été rejetées car les pipelines OCR et les modèles de vision IA normalisent ces caractères vers le latin canonique au cours de leur phase de modèle de langage — Tesseract avec un pack de langue russe sur du texte mixte latin-cyrillique retourne une sortie latin propre, car la deuxième passe du modèle de langage projette les homoglyphes cyrilliques sur leurs équivalents latins. La substitution au sein du même alphabet ne laisse rien à normaliser.

05

Ce qui reste intact — canvas, texte SVG, saisie de formulaire

Le texte rendu à l'intérieur d'un canvas HTML5 ou SVG ne fait pas partie de l'ensemble des nœuds de texte DOM ; le cipher ne le touche pas. De même, le texte que l'utilisateur saisit dans les inputs et textareas reste propre. Ces lacunes de couverture sont délibérées : le contenu canvas et SVG est géré par les défenses au niveau des pixels en parallèle, et la saisie de formulaire doit rester propre pour que l'application protégée fonctionne.

Où Text Cipher ferme le chemin

Modèles de vision IA capturant l'écran

Les utilisateurs avec des assistants IA personnels sur leur téléphone ou à côté de leur poste de travail — n'importe qui peut coller une capture d'écran dans GPT-4V ou Claude Vision et lui demander de résumer. Avec Text Cipher en place, le résumé IA est construit sur le texte substitué — il retourne une sortie plausible qui, à l'inspection, diffère de ce qui était sur l'écran original.

États financiers et documents de data room

Documents lus à l'écran mais non destinés à être exfiltrés via un outil IA. Une capture d'écran transmise à une IA pour analyse retourne des chiffres brouillés et des noms altérés — l'IA rapporte avec assurance un contenu qui ne correspond pas au document réel.

Dossiers patients analysés par des assistants IA

Le personnel médical disposant d'un accès en lecture seule aux dossiers patients ne peut pas utiliser de manière significative une IA externe pour résumer ou interroger les données — l'IA voit du texte substitué. Les informations cliniques restent dans l'environnement protégé ; le chemin d'ingestion IA retourne un document différent.

Consoles gouvernementales et de renseignement

Contenu classifié consulté par des analystes. Tout outil IA consulté depuis l'extérieur de l'environnement protégé lit du texte substitué, pas le matériel classifié original. La limite de divulgation tient sur le chemin d'ingestion IA de la même façon qu'elle tient sur le chemin de capture d'écran.

Questions fréquentes

La substitution affecte-t-elle la facilité avec laquelle un humain peut lire la page ?
La lecture se fait au niveau du curseur. La zone de révélation montre les originaux là où l'utilisateur regarde ; le pattern recognition naturel du cerveau gère le reste à partir de la vision périphérique, où la lisibilité est de toute façon plus faible. Les tests empiriques de fatigue de lecture ont conduit au cipher statique actuel (non rotatif) ; la conception rotative antérieure causait un inconfort mesurable, la version statique ne le cause pas.
Qu'en est-il des appareils tactiles sans curseur ?
L'accès tactile exclusif est peu courant dans le déploiement ZeroLeak typique (opérateurs d'entreprise, analystes, sous-traitants sur des postes de travail de bureau), mais pour les contextes tactiles le mécanisme de révélation revient à un modèle appuyer-et-maintenir où la zone touchée est la zone de révélation. Pour les workflows principalement tactiles et de lecture intensive, Text Cipher peut être désactivé par service protégé en faveur des seules défenses au niveau des pixels.
Pourquoi ne pas utiliser des sosies cyrilliques ou grecs ?
Les moteurs OCR et les modèles de vision IA normalisent les homoglyphes Unicode vers le latin canonique au cours de leur phase de modèle de langage. Un а cyrillique inséré dans du texte latin est replié vers un a latin normal au moment où la sortie est produite — la substitution ne laisse aucune trace. La substitution latine au sein du même alphabet (a transformé en e) n'a rien à normaliser ; le caractère substitué est la lettre canonique que le modèle lit.
Que ne couvre pas le cipher ?
Le texte rendu à l'intérieur d'un canvas HTML5 ou SVG ne fait pas partie de l'ensemble des nœuds de texte DOM ; le cipher ne le touche pas. Les défenses au niveau des pixels couvrent ces surfaces. Le texte à l'intérieur des inputs et textareas que l'utilisateur a saisi est également exclu pour que l'application protégée reçoive une saisie propre. Les images de texte (photographies, captures d'écran intégrées dans la page) sont également en dehors de la portée du texte DOM.
Comment cela se combine-t-il avec les défenses anti-OCR au niveau des pixels ?
Les deux sont complémentaires, pas redondants. Les défenses au niveau des pixels (protection anti-OCR) perturbent la façon dont l'image rendue est lue par la reconnaissance de caractères. Text Cipher fonctionne une couche au-dessus — même si un modèle de vision IA contourne chaque défense au niveau des pixels et lit la page proprement, il lit le texte substitué. Pour vaincre les deux, un attaquant devrait casser la couche de pixels pour voir des caractères propres ET récupérer les lettres originales sous-jacentes à partir des caractères substitués — deux problèmes orthogonaux.
Quel est l'impact sur les performances de la session utilisateur ?
Le script de substitution s'exécute à l'intérieur du renderer du navigateur headless, uniquement sur les nœuds de texte réellement visibles dans le viewport. Les mises à jour de révélation pilotées par curseur sont throttlées sur l'animation frame du navigateur et utilisent un seuil de mouvement pour que les petits mouvements de souris ne déclenchent pas de redessins. Sur du matériel courant, le cipher ajoute une petite fraction de milliseconde par image ; l'interaction visible par l'utilisateur reste fluide.

Voir le cipher dans une démo en direct

Nous chargerons une page, déplacerons le curseur sur le texte pour que vous voyiez une lecture normale, prendrons une capture d'écran et la transmettrons à Tesseract, GPT-4V et Claude Vision — et vous montrerons le texte très différent que chacun retourne.