Le caviardage n'est pas un rectangle noir
Spec: ISO 32000-2, §7.11ISO 32000-2 §7.11Spec: ISO 32000-2, §14.13.5ISO 32000-2 §14.13.5
Un rectangle noir dessiné par-dessus un nom ne cache rien. La page paraît caviardée, mais le texte en dessous est toujours là, toujours sélectionnable, toujours copiable. Le vrai caviardage ne recouvre pas le contenu. Il le supprime.
Cette page explique l’écart entre une surimpression cosmétique et une véritable suppression de contenu, pourquoi les métadonnées et les fichiers incorporés survivent à un travail naïf, et comment le RedactionEngine enterprise de NextPDF refuse de faire semblant qu’une région a disparu lorsqu’il ne peut pas réellement la supprimer.
Pourquoi c’est important
Section intitulée « Pourquoi c’est important »Les fuites de données PDF les plus citées n’étaient pas des attaques ingénieuses. C’étaient des rectangles noirs. Quelqu’un a dessiné une boîte pleine par-dessus un paragraphe sensible, exporté le fichier, et l’a expédié. Le destinataire a appuyé sur la boîte, l’a parcourue, et les mots d’origine se sont copiés tout droit du document dans le presse-papiers.
La raison est structurelle. Une page PDF est un ensemble d’opérateurs de dessin empilés dans l’ordre. Peindre un rectangle opaque ajoute un opérateur de plus par-dessus ; cela ne supprime pas l’opérateur d’affichage de texte en dessous. À l’œil, le texte est caché. Pour la machine, il est exactement là où il a toujours été. La surimpression est un déguisement, et un déguisement se retire.
C’est coûteux parce que l’échec est silencieux et définitif. Le document a l’air correct, passe une revue visuelle, et est publié. La fuite est découverte plus tard par quelqu’un qui a sélectionné le texte, et d’ici là chaque copie est déjà dehors.
La version courte
Section intitulée « La version courte »- Une boîte noire est une opération de dessin superposée au texte, pas une suppression de celui-ci. Les octets survivent.
- Le texte sélectionnable survit parce que le flux de contenu de la page porte toujours les glyphes qui dessinent les mots.
- Les métadonnées du document survivent parce qu’elles vivent à un endroit séparé — le dictionnaire d’information du document et le paquet XMP — qu’aucun rectangle sur une page ne peut atteindre.
- Les fichiers incorporés survivent parce qu’un PDF peut transporter des fichiers entiers en son sein sous forme de flux de fichiers incorporés. Spec: ISO 32000-2, §7.11ISO 32000-2 §7.11 Une marque sur une page ne touche jamais à une pièce jointe.
- Le vrai caviardage est destructif. Il supprime le contenu du flux d’octets, pas de l’image. Ce qui a disparu a disparu, et les surfaces de résidu sont nettoyées elles aussi.
L’approche de NextPDF
Section intitulée « L’approche de NextPDF »Cosmétique contre destructif, précisément
Section intitulée « Cosmétique contre destructif, précisément »Une surimpression cosmétique change ce à quoi une page ressemble. Le caviardage destructif change ce que le document contient. Le premier est réversible par quiconque dispose d’un curseur de texte. Le second ne laisse rien à récupérer.
Le RedactionEngine enterprise de NextPDF est conçu pour le cas destructif au niveau
du contenu textuel. Sa méthode redact() prend le contenu, une RedactionPolicy
décrivant ce qu’il faut trouver et comment le remplacer, et retourne un
RedactionResult. À l’intérieur, il détecte les segments sensibles, fusionne tout
chevauchement en plages couvrantes disjointes, puis réécrit la chaîne de contenu
avec substr_replace de sorte que chaque octet couvert soit supprimé exactement une
fois. Le texte sensible n’est pas peint par-dessus. Il a disparu du tampon que le
résultat rapporte.
Le résultat est honnête sur ce qui s’est passé : il enregistre le hachage SHA-256 du
contenu d’origine, le redactedContent réécrit, un rapport d’audit de chaque
trouvaille, et un drapeau wasModified. Tu peux prouver que les octets ont changé,
et tu peux prouver lesquels.
Le résidu que tu dois traquer
Section intitulée « Le résidu que tu dois traquer »Supprimer le texte visible est nécessaire mais non suffisant. Les mêmes mots, et des mots que tu n’as jamais vus sur la page, se cachent à des endroits qu’une édition au niveau de la page n’atteint jamais.
Un document porte des métadonnées en double : un dictionnaire d’information hérité et un paquet XMP, dont l’un comme l’autre peut contenir un nom d’auteur, un titre ou une empreinte d’outil. Il peut transporter des fichiers entiers sous forme de flux de fichiers incorporés. Spec: ISO 32000-2, §7.11ISO 32000-2 §7.11 Il peut lier ces charges utiles à la structure de page sous forme de fichiers associés, un canal d’artefact lié que la page ne rend pas mais que le document détient toujours. Spec: ISO 32000-2, §14.13.5ISO 32000-2 §14.13.5 Aucun de ceux-ci n’est sur la page que tu as caviardée, donc aucun d’eux n’est touché par un rectangle. Le guide classique sur ce sujet — le rapport de la NSA « Hidden Data and Metadata in Adobe PDF Files » — existe précisément parce que tant de vraies fuites venaient du résidu, pas de la page visible.
Un caviardage qui supprime les mots de la page mais laisse le nom de l’auteur dans le paquet XMP et le tableur d’origine en pièce jointe n’a pas caviardé le document. Il en a caviardé une seule vue.
- DetectFind every sensitive span — visible text, and the entity types a policy targets — not just the region you happen to see.
- Delete, do not coverRewrite the content stream so the glyphs are removed from the bytes. An opaque box on top leaves the text underneath intact.
- Clear the residueStrip the information dictionary and XMP metadata, and remove embedded and associated files that carry the same payload off-page.
- VerifyConfirm no selectable text, metadata field, or attachment reproduces the redacted content before the file leaves the building.
Échouer de manière fermée plutôt que faire semblant
Section intitulée « Échouer de manière fermée plutôt que faire semblant »Il y a deux manières de caviarder : par contenu (trouve ce nom, supprime-le) et par zone (peins par-dessus ce rectangle de la page, quoi qu’il y ait dessous). Le moteur enterprise fait la première fidèlement. Il refuse délibérément de faire semblant de faire la seconde.
La méthode redact() accepte un troisième argument, une liste de régions de
coordonnées ZoneRedaction. Le moteur de contenu textuel n’a aucun puits de
surimpression de contenu de page — aucun moyen de réellement supprimer ce qui se
trouve à l’intérieur d’une boîte de coordonnées. Alors, lorsque cette liste n’est pas
vide, il ne dessine pas un rectangle et ne qualifie pas la zone de « caviardée ». Il
lève une RuntimeException typée et te dit de router la zone à travers une chaîne de
caviardage de contenu de page à la place.
Ce refus est tout le propos de cette page transformé en code. Le moteur préfère s’arrêter et nommer ce qu’il ne peut pas faire plutôt que de retourner une trouvaille « caviardée » pour une région qu’il a laissée totalement intacte. Une surimpression cosmétique silencieuse rapportée comme une suppression est exactement la fausse assurance qui produit une fuite. Échouer de manière fermée transforme cette fuite en un message d’erreur que tu vois avant d’expédier.
Idée fausse courante
Section intitulée « Idée fausse courante »« J’ai dessiné une boîte noire dessus, donc c’est caviardé. »
C’est le piège, et c’est le plus courant de tout le format. Un rectangle plein est une instruction de dessin empilée par-dessus le texte. Les opérateurs d’affichage de texte sont toujours dans le flux de contenu, les glyphes se dessinent toujours, et une sélection ou une copie les ressort inchangés. Tu as caché une image ; tu n’as pas changé un document.
Un second piège, plus subtil : « J’ai supprimé le texte sur la page, donc le document est propre. » Pas encore. Le même contenu, et du contenu que tu n’as jamais affiché, peut persister dans les métadonnées et dans les fichiers incorporés. Le caviardage n’est terminé que lorsque chaque surface — contenu de page, métadonnées et pièces jointes — est dégagée de ce que tu cherchais à supprimer.
Limites et frontières
Section intitulée « Limites et frontières »La portée honnête de ce que NextPDF fait ici, par édition :
- Core n’a aucun caviardage de document du tout. Il fournit un assainisseur de confidentialité pour les PII des journaux d’audit — gardant les valeurs sensibles hors de tes propres enregistrements de diagnostic — et c’est une chose entièrement différente de caviarder un PDF livré. Si tu es sur Core et que tu dois caviarder un document, la capacité que tu veux n’est pas présente. Ne dessine pas une boîte en supposant que le moteur a supprimé quoi que ce soit.
- Le
RedactionEngineenterprise caviarde le contenu textuel, de manière destructive. Il réécrit le tampon de contenu pour supprimer les octets sensibles et rapporte un hachage, un rapport d’audit et un drapeauwasModifiedpour que la suppression soit prouvable. - Le caviardage par zone de coordonnées échoue de manière fermée. Passe une liste
ZoneRedactionnon vide et le moteur lève une exception plutôt que de feindre une surimpression. C’est une propriété de sécurité délibérée, pas une fonctionnalité manquante : une région qu’il ne peut pas réellement dégager est une région qu’il refuse de qualifier de propre. - Dégager chaque surface de résidu est aussi la responsabilité de l’opérateur. Supprimer le texte visible est une étape. Un travail complet supprime également le dictionnaire d’information, le paquet XMP, et tout fichier incorporé ou associé (Spec: ISO 32000-2, §7.11ISO 32000-2 §7.11, Spec: ISO 32000-2, §14.13.5ISO 32000-2 §14.13.5) qui transporte la même charge utile hors de la page.
| Edition | Availability |
|---|---|
| Core | Not in this edition. Core has no document redaction. It provides only an audit-log PII sanitiser, which keeps sensitive values out of your own diagnostic records — it does not redact a delivered PDF. |
| Pro | Not in this edition |
| Enterprise | Available. The enterprise RedactionEngine performs destructive text-content redaction and fails closed — it throws a typed exception — on coordinate-zone redaction it cannot truly fulfil, rather than painting a cosmetic overlay and reporting a region as removed. |
Documents liés
Section intitulée « Documents liés »- Comment fonctionne réellement le chiffrement PDF — pourquoi chiffrer un fichier n’est pas la même chose qu’en supprimer du contenu, et où chacun te protège.
- Métadonnées et paquet XMP — la surface de résidu qu’un caviardage au niveau de la page ne touche jamais, en détail.
- Une API qui refuse de deviner — la même posture d’échec fermé que le moteur de caviardage applique à une zone qu’il ne peut pas honorer.
Glossaire
Section intitulée « Glossaire »- Surimpression cosmétique — une opération de dessin, telle qu’un rectangle plein, superposée à du contenu pour le cacher visuellement. Elle ne supprime pas le contenu en dessous, qui reste sélectionnable et copiable.
- Caviardage destructif — la suppression du contenu du flux d’octets du document, pas de l’image. Une fois fait, il n’y a plus rien en dessous à récupérer.
- Flux de contenu — la liste ordonnée d’opérateurs de dessin qui rendent une page, y compris les opérateurs d’affichage de texte qui dessinent les glyphes. Une boîte par-dessus ne supprime pas les opérateurs de texte en dessous.
- Surface de résidu — un endroit où un document détient du contenu que la page n’affiche pas : le dictionnaire d’information, le paquet de métadonnées XMP, et les fichiers incorporés ou associés. Un caviardage complet les dégage tous.
- Flux de fichier incorporé — un fichier entier transporté à l’intérieur d’un PDF (ISO 32000-2 §7.11). Une marque sur une page ne touche jamais à une pièce jointe.
- Échouer de manière fermée — s’arrêter avec une erreur typée lorsqu’une opération ne peut pas être effectuée fidèlement, plutôt que de produire un résultat d’apparence plausible qui est faux. Le moteur enterprise fait cela pour le caviardage par zone de coordonnées qu’il ne peut pas honorer.