Aller au contenu
getnextpdf.com

Le caviardage n'est pas un rectangle noir

Spec: ISO 32000-2, §7.11Spec: ISO 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.

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.

  • 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.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.

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.

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.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.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.

  1. DetectFind every sensitive span — visible text, and the entity types a policy targets — not just the region you happen to see.
  2. 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.
  3. Clear the residueStrip the information dictionary and XMP metadata, and remove embedded and associated files that carry the same payload off-page.
  4. VerifyConfirm no selectable text, metadata field, or attachment reproduces the redacted content before the file leaves the building.
Ce qu'un caviardage destructif complet supprime, dans l'ordre : détecter le contenu sensible, effacer les octets du flux de contenu plutôt que de dessiner par-dessus, puis dégager les surfaces de résidu — métadonnées et charges utiles incorporées — qu'une marque au niveau de la page n'atteint jamais, et enfin vérifier que rien de copiable n'a survécu.

É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.

« 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.

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 RedactionEngine enterprise 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 drapeau wasModified pour que la suppression soit prouvable.
  • Le caviardage par zone de coordonnées échoue de manière fermée. Passe une liste ZoneRedaction non 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.11, Spec: ISO 32000-2, §14.13.5) qui transporte la même charge utile hors de la page.
Document redaction — edition availability
EditionAvailability
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.

ProNot 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.

  • 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.