Line Shifting : déplacer les lignes
L'espacement normal entre deux lignes de texte est typiquement 1.2× la taille de la police (interligne simple). Line Shifting modifie légèrement cet espacement pour chaque ligne : ligne déplacée vers le haut = bit 0, vers le bas = bit 1 (ou vice versa selon la convention).
Le déplacement est de l'ordre de 1/300e de pouce(la résolution d'une imprimante laser standard). À cette échelle, l'œil ne perçoit aucune différence. Mais un scan à 600 DPI permet de mesurer précisément la position de chaque ligne.
Document original (5 lignes) : Ligne 1 : y = 100.000 pts ← position normale Ligne 2 : y = 112.000 pts Ligne 3 : y = 124.000 pts Ligne 4 : y = 136.000 pts Ligne 5 : y = 148.000 pts Interligne : 12 pts (standard) Après line shifting (δ = 0.1 pt) : Ligne 1 : y = 100.000 pts (référence, non modifiée) Ligne 2 : y = 111.900 pts → -0.1 → bit 0 Ligne 3 : y = 124.100 pts → +0.1 → bit 1 Ligne 4 : y = 135.900 pts → -0.1 → bit 0 Ligne 5 : y = 148.100 pts → +0.1 → bit 1 Message encodé dans les 4 lignes modifiées : 0101 = 0x5 = partiel... Capacité : 1 bit par ligne Page A4, 12pt : ~50 lignes → 50 bits ≈ 6 octets / page
Word Shifting : déplacer les mots
Word Shifting encode des bits dans l'espacement horizontal entre les mots. Le crénage (kerning) naturel varie légèrement selon les paires de lettres. On augmente ou diminue l'espace entre deux mots de quelques centièmes de point pour encoder un bit — espace plus large = bit 1, espace normal = bit 0.
Word Shifting a une capacité supérieure à Line Shifting : une page moyenne contient ~250 espaces inter-mots, contre ~50 lignes. Mais il est également plus sensible aux retraitement du document (reflow de texte).
Ligne originale :
"Le renard brun rapide" (espaces = 4 pts entre chaque mot)
Après word shifting (δ = 0.3 pt) :
"Le" [4.0] "renard" [4.3] "brun" [4.0] "rapide"
↑ +0.3 → bit 1 ↑ ±0 → bit 0
Encodage de "A" = 01000001 nécessite 8 espaces inter-mots
Dans une page de 250 mots ≈ 249 espaces disponibles
→ 249 bits ≈ 31 octets par page
Robustesse :
Si le texte est copié et recouru dans Word/Google Docs
→ les espaces sont normalisés → message perdu !
Technique UNIQUEMENT fiable sur documents figés (PDF, image scannée)Feature Coding : propriétés des glyphes
Feature Coding est une variante plus avancée qui encode des bits dans des propriétés des glyphes eux-mêmes. Par exemple : la longueur d'un ascendant (le "t" ou le "l"), la courbure d'un "o" ou "c", la longueur d'un trait horizontal dans "f" ou "t".
Cette technique nécessite de modifier le rendu des glyphes individuellement, ce qui n'est possible qu'en générant le document depuis le code (LaTeX, PostScript) et non en modifiant un PDF existant. Elle est plus résistante à la copie numérique car les modifications sont dans la forme des lettres, pas dans leur position.
Application aux PDF et documents numériques
Un PDF stocke les positions de texte en unités de point (1pt = 1/72 pouce) avec une précision en virgule flottante. Il est donc possible de modifier les coordonnées de positionnement du texte dans un PDF existant pour implémenter line shifting et word shifting.
# Line shifting dans un PDF (Python + PyMuPDF) :
import fitz # PyMuPDF
def encode_in_pdf(input_pdf, message, output_pdf, delta=0.15):
doc = fitz.open(input_pdf)
bits = ''.join(format(ord(c), '08b') for c in message)
bit_idx = 0
for page in doc:
# Extraire les blocs de texte avec leurs positions
blocks = page.get_text("dict")["blocks"]
for block in blocks:
for line in block.get("lines", []):
if bit_idx >= len(bits):
break
# Déplacer la ligne selon le bit
offset = delta if bits[bit_idx] == '1' else -delta
# ... modifier la transformation de la ligne dans le PDF stream
bit_idx += 1
doc.save(output_pdf)
# ⚠ Implémentation complète nécessite manipulation
# directe du content stream PDF — non trivialDétection et robustesse
La détection de line/word shifting nécessite une mesure de précision des positions de lignes ou de mots. Sur un document numérique (PDF), cela se fait directement en analysant les coordonnées du flux texte. Sur un document imprimé scanné, il faut un algorithme de détection de lignes suivi d'une mesure d'espacement.
Résistance aux photocopies
Une photocopie introduit un léger flou et une déformation non-uniforme. Les décalages restent mesurables sur une bonne copie.
Imperceptible visuellement
Les déplacements de 0.1 à 0.3 points sont bien en dessous du seuil de perception humaine (≈ 1-2 points).
Fragile au reflow de texte
Copier-coller le texte dans un éditeur, ou convertir PDF → DOCX → PDF, recalcule toutes les positions. Message perdu.
Détectable dans les PDF
Un analyste inspectant le content stream du PDF voit directement les coordonnées fractionnaires anormales des lignes.
Questions fréquentes
Un déplacement de 0,1 point est-il vraiment imperceptible ?
Oui. 0,1 point typographique représente environ 0,035 mm. L'acuité visuelle humaine ne distingue pas des objets séparés de moins de 0,1 mm à distance de lecture normale (40-50 cm). Même avec une règle, vous ne verrez pas la différence. La détection nécessite un scanner haute résolution (600+ dpi) et une analyse numérique.
Est-ce que ça fonctionne avec les PDF numériques ?
Oui, un PDF peut encoder des positions précises en fractions de point. Les visionneuses PDF respectent ces positions. En revanche, une impression puis numérisation peut altérer les micro-déplacements selon la qualité de l'imprimante. Pour le numérique pur, les déplacements sont préservés tant que le PDF n'est pas converti en image.
À quoi sert concrètement le line shifting aujourd'hui ?
Principalement au tatouage de documents confidentiels : chaque copie envoyée à un employé ou partenaire différent contient un identifiant unique dans les décalages de lignes. En cas de fuite, on identifie le responsable. Des services de renseignement et des grandes corporations utilisent cette technique pour leurs documents les plus sensibles.
Peut-on l'automatiser pour de gros volumes ?
Oui. PyMuPDF (Python) permet de lire et modifier précisément les positions des lignes dans un PDF. LibreOffice a aussi une API accessible. Un script de quelques dizaines de lignes peut automatiquement tatouer des lots de documents avec des identifiants uniques par destinataire.
Est-ce détectable par des outils automatiques ?
Oui, avec un document de référence (l'original sans tatouage). Des outils d'analyse de documents comparent les positions des lignes entre deux versions du même document pour détecter les décalages. Sans original de référence, la détection est beaucoup plus difficile.
Techniques texte connexes
D'autres techniques cachent des données dans le contenu sémantique du texte.