Zum Inhalt springen
getnextpdf.com

Schwärzung ist kein schwarzes Rechteck

Spec: ISO 32000-2, §7.11Spec: ISO 32000-2, §14.13.5

Ein schwarzes Rechteck über einem Namen verbirgt nichts. Die Seite sieht geschwärzt aus, aber der Text darunter ist immer noch da, immer noch auswählbar, immer noch kopierbar. Echte Schwärzung deckt den Inhalt nicht ab. Sie löscht ihn.

Diese Seite erklärt die Lücke zwischen einer kosmetischen Überlagerung und echter Inhaltsentfernung, warum Metadaten und eingebettete Dateien eine naive Arbeit überleben und wie die NextPDF-Enterprise-RedactionEngine sich weigert vorzutäuschen, dass ein Bereich weg ist, wenn sie ihn nicht tatsächlich entfernen kann.

Die meistzitierten PDF-Datenpannen waren keine raffinierten Angriffe. Sie waren schwarze Rechtecke. Jemand zeichnete einen gefüllten Kasten über einen sensiblen Absatz, exportierte die Datei und schickte sie ab. Der Empfänger drückte auf den Kasten, zog darüber, und die ursprünglichen Worte kopierten sich direkt aus dem Dokument in die Zwischenablage.

Der Grund ist strukturell. Eine PDF-Seite ist eine Menge von Zeichenoperatoren, in Reihenfolge geschichtet. Ein undurchsichtiges Rechteck zu malen fügt obenauf einen weiteren Operator hinzu; es entfernt nicht den Textanzeige-Operator darunter. Für das Auge ist der Text verborgen. Für die Maschine ist er genau dort, wo er immer war. Die Überlagerung ist ein Kostüm, und ein Kostüm zieht man aus.

Das ist teuer, weil der Fehler still und endgültig ist. Das Dokument sieht korrekt aus, besteht eine Sichtprüfung und wird veröffentlicht. Die Panne wird später von jemandem entdeckt, der den Text ausgewählt hat, und bis dahin ist jede Kopie bereits draußen.

  • Ein schwarzer Kasten ist eine über den Text geschichtete Zeichenoperation, keine Löschung davon. Die Bytes überleben.
  • Auswählbarer Text überlebt, weil der Seiteninhalts-Stream immer noch die Glyphen trägt, die die Worte zeichnen.
  • Dokumentmetadaten überleben, weil sie an einer separaten Stelle leben – dem Document-Information-Dictionary und dem XMP-Paket –, die kein Rechteck auf einer Seite erreichen kann.
  • Eingebettete Dateien überleben, weil ein PDF ganze Dateien als eingebettete Dateistreams in sich tragen kann. Spec: ISO 32000-2, §7.11 Ein Zeichen auf einer Seite berührt einen Anhang nie.
  • Echte Schwärzung ist zerstörend. Sie entfernt den Inhalt aus dem Byte-Stream, nicht aus dem Bild. Was weg ist, ist weg, und die Rückstandsoberflächen werden auch bereinigt.

Eine kosmetische Überlagerung ändert, wie eine Seite aussieht. Eine zerstörende Schwärzung ändert, was das Dokument enthält. Das Erste ist von jedem mit einem Textcursor umkehrbar. Das Zweite lässt nichts zum Wiederherstellen übrig.

Die NextPDF-Enterprise-RedactionEngine ist für den zerstörenden Fall auf der Ebene des Textinhalts gebaut. Ihre redact()-Methode nimmt den Inhalt, eine RedactionPolicy, die beschreibt, was zu finden und wie es zu ersetzen ist, und gibt ein RedactionResult zurück. Im Inneren erkennt sie die sensiblen Spannen, fasst alle überlappenden zu disjunkten abdeckenden Bereichen zusammen und schreibt dann den Inhalts-String mit substr_replace um, sodass jedes abgedeckte Byte genau einmal entfernt wird. Der sensible Text wird nicht übermalt. Er ist aus dem Puffer, den das Ergebnis zurückträgt, verschwunden.

Das Ergebnis ist ehrlich darüber, was geschehen ist: Es erfasst den SHA-256-Hash des Originalinhalts, den umgeschriebenen redactedContent, einen Prüfbericht jedes Fundes und ein wasModified-Flag. Sie können beweisen, dass sich die Bytes geändert haben, und Sie können beweisen, welche.

Den sichtbaren Text zu entfernen ist notwendig, aber nicht hinreichend. Dieselben Worte, und Worte, die Sie nie auf der Seite gesehen haben, verstecken sich an Stellen, die eine Bearbeitung auf Seitenebene nie erreicht.

Ein Dokument trägt Metadaten doppelt: ein altes Information-Dictionary und ein XMP-Paket, von denen jedes einen Autorennamen, einen Titel oder einen Werkzeug-Fingerabdruck halten kann. Es kann ganze Dateien als eingebettete Dateistreams tragen. Spec: ISO 32000-2, §7.11 Es kann diese Nutzlasten als zugeordnete Dateien an die Seitenstruktur binden, einen Kanal für verwandte Artefakte, den die Seite nicht rendert, das Dokument aber dennoch hält. Spec: ISO 32000-2, §14.13.5 Nichts davon befindet sich auf der Seite, die Sie geschwärzt haben, also wird nichts davon von einem Rechteck berührt. Der klassische Leitfaden hierzu – der NSA-Bericht „Hidden Data and Metadata in Adobe PDF Files” – existiert gerade deshalb, weil so viele echte Pannen aus dem Rückstand stammten, nicht aus der sichtbaren Seite.

Eine Schwärzung, die die Worte auf der Seite löscht, aber den Autorennamen im XMP-Paket und die ursprüngliche Tabellenkalkulation als Anhang belässt, hat das Dokument nicht geschwärzt. Sie hat eine Ansicht davon geschwärzt.

  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.
What a complete destructive redaction removes, in order: detect the sensitive content, delete the bytes from the content stream rather than draw over them, then clear the residue surfaces — metadata and embedded payloads — that a page-level mark never reaches, and finally verify nothing copyable survived.

Es gibt zwei Wege zu schwärzen: nach Inhalt (finde diesen Namen, lösche ihn) und nach Zone (übermale dieses Rechteck der Seite, was auch immer darunter ist). Die Enterprise-Engine erledigt den ersten wahrheitsgemäß. Sie täuscht bewusst nicht vor, den zweiten zu tun.

Die redact()-Methode akzeptiert ein drittes Argument, eine Liste von ZoneRedaction-Koordinatenbereichen. Die Textinhalts-Engine hat keine Senke zur Überlagerung von Seiteninhalt – keine Möglichkeit, tatsächlich zu entfernen, was in einem Koordinatenkasten sitzt. Wenn diese Liste also nicht leer ist, zeichnet sie kein Rechteck und nennt die Zone „geschwärzt”. Sie wirft eine typisierte RuntimeException und weist Sie an, die Zone stattdessen durch eine Schwärzungspipeline für Seiteninhalt zu leiten.

Diese Weigerung ist der ganze Sinn dieser Seite, in Code gegossen. Die Engine hält lieber an und benennt, was sie nicht kann, als ein „geschwärzt”-Ergebnis für einen Bereich zurückzugeben, den sie völlig unberührt ließ. Eine stille kosmetische Überlagerung, gemeldet als Entfernung, ist genau die falsche Zusicherung, die eine Panne erzeugt. Fail-closed verwandelt diese Panne in eine Fehlermeldung, die Sie sehen, bevor Sie ausliefern.

„Ich habe einen schwarzen Kasten darüber gezeichnet, also ist es geschwärzt.”

Das ist die Falle, und es ist die häufigste im ganzen Format. Ein gefülltes Rechteck ist eine Zeichenanweisung, gestapelt auf den Text. Die Textanzeige-Operatoren sind immer noch im Inhalts-Stream, die Glyphen zeichnen immer noch, und eine Auswahl oder ein Kopieren liest sie unverändert aus. Sie haben ein Bild verborgen; Sie haben kein Dokument geändert.

Eine zweite, subtilere Falle: „Ich habe den Text auf der Seite gelöscht, also ist das Dokument sauber.” Noch nicht. Derselbe Inhalt, und Inhalt, den Sie nie angezeigt haben, kann in den Metadaten und in eingebetteten Dateien fortbestehen. Die Schwärzung ist erst abgeschlossen, wenn jede Oberfläche – Seiteninhalt, Metadaten und Anhänge – frei von dem ist, was Sie zu entfernen vorhatten.

Der ehrliche Geltungsbereich dessen, was NextPDF hier tut, nach Edition:

  • Core hat überhaupt keine Dokumentschwärzung. Es liefert einen Datenschutz-Sanitizer für Prüfprotokoll-PII – der sensible Werte aus Ihren eigenen Diagnoseaufzeichnungen heraushält – und das ist etwas völlig anderes als das Schwärzen eines ausgelieferten PDF. Wenn Sie auf Core sind und ein Dokument schwärzen müssen, ist die gewünschte Fähigkeit nicht vorhanden. Zeichnen Sie keinen Kasten und nehmen Sie nicht an, die Engine habe irgendetwas entfernt.
  • Die Enterprise-RedactionEngine schwärzt Textinhalt, zerstörend. Sie schreibt den Inhaltspuffer um, um die sensiblen Bytes zu entfernen, und meldet einen Hash, einen Prüfbericht und ein wasModified-Flag, sodass die Entfernung beweisbar ist.
  • Koordinatenzonen-Schwärzung verfährt fail-closed. Übergeben Sie eine nicht leere ZoneRedaction-Liste, und die Engine wirft eine Ausnahme, statt eine Überlagerung vorzutäuschen. Das ist eine bewusste Sicherheitseigenschaft, kein fehlendes Feature: Ein Bereich, den sie nicht wahrhaftig bereinigen kann, ist einer, den sie sich weigert, sauber zu nennen.
  • Jede Rückstandsoberfläche zu bereinigen, ist ebenfalls die Verantwortung des Betreibers. Sichtbaren Text zu entfernen ist ein Schritt. Eine vollständige Arbeit entfernt auch das Information-Dictionary, das XMP-Paket und alle eingebetteten oder zugeordneten Dateien (Spec: ISO 32000-2, §7.11, Spec: ISO 32000-2, §14.13.5), die dieselbe Nutzlast abseits der Seite tragen.
Document redaction — edition availability
EditionAvailability
Core

Nicht in dieser Edition. Core hat keine Dokumentschwärzung. Es bietet nur einen Prüfprotokoll-PII-Sanitizer, der sensible Werte aus Ihren eigenen Diagnoseaufzeichnungen heraushält – er schwärzt kein ausgeliefertes PDF.

ProNot in this edition
Enterprise

Verfügbar. Die Enterprise-RedactionEngine führt zerstörende Textinhaltsschwärzung durch und verfährt fail-closed – sie wirft eine typisierte Ausnahme – bei Koordinatenzonen-Schwärzung, die sie nicht wahrhaftig erfüllen kann, statt eine kosmetische Überlagerung zu malen und einen Bereich als entfernt zu melden.

  • Kosmetische Überlagerung – eine Zeichenoperation, etwa ein gefülltes Rechteck, über Inhalt geschichtet, um ihn visuell zu verbergen. Sie entfernt nicht den Inhalt darunter, der auswählbar und kopierbar bleibt.
  • Zerstörende Schwärzung – Entfernung des Inhalts aus dem Byte-Stream des Dokuments, nicht aus dem Bild. Einmal geschehen, gibt es darunter nichts wiederherzustellen.
  • Inhalts-Stream – die geordnete Liste von Zeichenoperatoren, die eine Seite rendern, einschließlich der Textanzeige-Operatoren, die Glyphen zeichnen. Ein Kasten obenauf löscht nicht die Textoperatoren darunter.
  • Rückstandsoberfläche – eine Stelle, an der ein Dokument Inhalt hält, den die Seite nicht anzeigt: das Information-Dictionary, das XMP-Metadaten-Paket und eingebettete oder zugeordnete Dateien. Eine vollständige Schwärzung bereinigt sie alle.
  • Eingebetteter Dateistream – eine ganze Datei, getragen innerhalb eines PDF (ISO 32000-2 §7.11). Ein Zeichen auf einer Seite berührt einen Anhang nie.
  • Fail-closed – mit einem typisierten Fehler anzuhalten, wenn eine Operation nicht wahrhaftig durchgeführt werden kann, statt ein plausibel aussehendes Ergebnis zu erzeugen, das falsch ist. Die Enterprise-Engine tut dies bei Koordinatenzonen-Schwärzung, die sie nicht erfüllen kann.