コンテンツにスキップ
getnextpdf.com

墨消しは黒い長方形ではない

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

名前の上に描かれた黒い長方形は、何も隠しません。ページは墨消しされたように見えますが、その下のテキストはなお存在し、なお選択可能で、なおコピー可能です。本物の墨消しはコンテンツを覆いません。それを削除します。

このページは、装飾的なオーバーレイと真のコンテンツ除去との隔たり、なぜメタデータと埋め込みファイルが素朴な作業を生き延びるのか、そして NextPDF エンタープライズの RedactionEngine が、ある領域を実際には除去できないときにそれが消えたと装うことをどう拒むのかを説明します。

最も多く引用される PDF のデータ漏洩は、巧妙な攻撃ではありませんでした。黒い長方形でした。誰かが機微な段落の上に塗りつぶされたボックスを描き、ファイルをエクスポートし、出荷しました。受け取った人がそのボックスを押し、それを横切ってドラッグすると、元の言葉がそっくり文書からクリップボードへコピーされました。

理由は構造的です。PDF のページは、順に重なった描画演算子の集合です。不透明な長方形を塗ることは、その上に演算子をもう 1 つ加えるだけです。それは下のテキスト表示演算子を除去しません。目にはテキストは隠されています。機械にとっては、それは常にあった場所にそっくりあります。オーバーレイは衣装であり、衣装は脱げます。

これが高くつくのは、失敗が無言で最終的だからです。文書は正しく見え、目視レビューを通過し、公開されます。漏洩は後に、テキストを選択した誰かによって発見され、その頃にはあらゆるコピーがすでに外に出ています。

  • 黒いボックスはテキストの 上に重ねられた描画操作 であって、その削除ではありません。バイトは生き残ります。
  • 選択可能なテキストが生き残るのは、ページのコンテンツストリームが、その言葉を描くグリフをなお携えているからです。
  • 文書のメタデータが生き残るのは、それが別の場所 — Document Information ディクショナリと XMP パケット — に存在し、ページ上のどんな長方形も届かないからです。
  • 埋め込みファイルが生き残るのは、PDF が内部にまるごとのファイルを埋め込みファイルストリームとして携えられるからです。Spec: ISO 32000-2, §7.11 ページ上のマークは決して添付に触れません。
  • 本物の墨消しは破壊的です。 それはコンテンツを絵からではなくバイトストリームから除去します。消えたものは消え、残留物の面もまた掃除されます。

装飾的なオーバーレイは、ページが どう見えるか を変えます。破壊的な墨消しは、文書が 何を含むか を変えます。前者は、テキストカーソルを持つ誰にでも可逆です。後者は、復元すべきものを何も残しません。

NextPDF エンタープライズの RedactionEngine は、テキストコンテンツのレベルで破壊的なケースのために作られています。その redact() メソッドは、コンテンツ、何を見つけどう置き換えるかを記述する RedactionPolicy、そして RedactionResult を返します。内部では、機微なスパンを検出し、重なるものを互いに素な覆う範囲へ統合し、それから substr_replaceコンテンツ文字列を書き換え、覆われた各バイトがちょうど一度除去されるようにします。機微なテキストは上から塗られるのではありません。結果が運び返すバッファから、それは消えています。

結果は、起きたことについて正直です。元のコンテンツの SHA-256 ハッシュ、書き換えられた redactedContent、すべての発見事項の監査レポート、そして wasModified フラグを記録します。バイトが変わったことを証明でき、どのバイトかも証明できます。

可視テキストの除去は必要ですが十分ではありません。同じ言葉、そしてページ上で一度も見なかった言葉が、ページレベルの編集が決して届かない場所に潜んでいます。

文書はメタデータを二重に携えます。レガシーな Information ディクショナリと XMP パケットで、そのいずれもが作成者名、タイトル、あるいはツールの指紋を保持し得ます。まるごとのファイルを埋め込みファイルストリームとして携えられます。Spec: ISO 32000-2, §7.11 それらのペイロードを関連ファイルとしてページ構造に結びつけられます。ページがレンダリングしないが文書がなお保持する、関連アーティファクトのチャネルです。Spec: ISO 32000-2, §14.13.5 これらのどれも、あなたが墨消ししたページ上にはないので、どれも長方形に触れられません。これに関する古典的な指針 — NSA の「Hidden Data and Metadata in Adobe PDF Files」レポート — が存在するのは、まさにそれほど多くの実際の漏洩が、可視ページからではなく残留物から来たからです。

ページ上の言葉を削除するが、作成者名を XMP パケットに、元のスプレッドシートを添付として残す墨消しは、文書を墨消ししていません。それは文書の 1 つのビューを墨消ししたにすぎません。

  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.

墨消しには 2 つの方法があります。コンテンツ による(この名前を見つけ、削除する)ものと、ゾーン による(このページの長方形を、その下が何であれ塗りつぶす)ものです。エンタープライズエンジンは前者を正直に行います。後者を装うことは、意図的に しません

redact() メソッドは第 3 引数として、ZoneRedaction 座標領域のリストを受け取ります。テキストコンテンツエンジンには、ページコンテンツのオーバーレイシンクがありません — 座標ボックスの内側に位置するものを実際に除去する術がありません。だからそのリストが空でないとき、長方形を描いてそのゾーンを「墨消し済み」と呼ぶことはしません。型付きの RuntimeException を投げ、代わりにそのゾーンをページコンテンツ墨消しパイプラインへ通すよう告げます。

その拒絶こそが、このページの全要点をコードにしたものです。エンジンは、まったく手つかずのまま残した領域に対して「墨消し済み」という発見事項を返すより、できないことを止めて名付けるほうを選びます。除去として報告された無言の装飾的オーバーレイこそが、漏洩を生む正確な誤った保証です。フェイルクローズは、その漏洩を、出荷前に目にするエラーメッセージへと変えます。

「私はその上に黒いボックスを描いた、だから墨消しされている。」

これが罠であり、フォーマット全体の中で最も一般的なものです。塗りつぶされた長方形は、テキストの上に積まれた描画命令です。テキスト表示演算子はなおコンテンツストリームにあり、グリフはなお描かれ、選択やコピーがそれらを変えずに読み出します。あなたは絵を隠したのであって、文書を変えてはいません。

第 2 の、より微妙な罠は、「私はページ上のテキストを削除した、だから文書はきれいだ」です。まだです。同じコンテンツ、そしてあなたが一度も表示しなかったコンテンツが、メタデータと埋め込みファイルに残り得ます。墨消しが終わるのは、すべての — ページコンテンツ、メタデータ、添付 — が、除去しようとしたものから一掃されたときだけです。

NextPDF がここで行うことの正直な範囲を、エディション別に。

  • Core には文書の墨消しがまったくありません。 それは 監査ログ の PII のためのプライバシーサニタイザーを同梱します — 機微な値をあなた自身の診断記録の外に保つもの — それは配信される PDF を墨消しすることとはまったく別物です。Core を使っていて文書を墨消しする必要があるなら、あなたが欲しい機能は存在しません。ボックスを描いて、エンジンが何かを除去したと思い込まないでください。
  • エンタープライズの RedactionEngine はテキストコンテンツを破壊的に墨消しします。 それはコンテンツバッファを書き換えて機微なバイトを除去し、除去が証明可能になるよう、ハッシュ、監査レポート、そして wasModified フラグを報告します。
  • 座標ゾーンの墨消しはフェイルクローズします。 空でない ZoneRedaction リストを渡すと、エンジンはオーバーレイを装うのではなく投げます。それは欠けた機能ではなく意図的な安全性質です。真にクリアできない領域は、クリーンと呼ぶことを拒む領域です。
  • すべての残留物の面をクリアすることも、オペレーターの責任です。 可視テキストの除去は 1 ステップです。完全な作業は、Information ディクショナリ、XMP パケット、そして同じペイロードをページ外で運ぶ埋め込みファイルまたは関連ファイル(Spec: ISO 32000-2, §7.11Spec: ISO 32000-2, §14.13.5)も剥がします。
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.

  • How PDF encryption really works — なぜファイルの暗号化が、そこからコンテンツを除去することと同じではないのか、そしてそれぞれがどこであなたを守るのか。
  • Metadata and the XMP packet — ページレベルの墨消しが決して触れない残留物の面を、詳細に。
  • An API that refuses to guess — 墨消しエンジンが、果たせないゾーンに適用するのと同じフェイルクローズの姿勢。
  • 装飾的オーバーレイ(Cosmetic overlay) — 塗りつぶされた長方形のような、コンテンツを視覚的に隠すために重ねられた描画操作。その下のコンテンツを除去せず、コンテンツは選択可能でコピー可能なまま残る。
  • 破壊的墨消し(Destructive redaction) — 文書のバイトストリームからの、絵からではなくコンテンツの除去。いったん行われると、下に復元すべきものは何もない。
  • コンテンツストリーム(Content stream) — ページを描画する、順序付けられた描画演算子のリスト。グリフを描くテキスト表示演算子を含む。上のボックスは、その下のテキスト演算子を削除しない。
  • 残留物の面(Residue surface) — 文書が、ページが表示しないコンテンツを保持する場所。Information ディクショナリ、XMP メタデータパケット、そして埋め込みファイルまたは関連ファイル。完全な墨消しはそれらすべてをクリアする。
  • 埋め込みファイルストリーム(Embedded file stream) — PDF の内部に携えられるまるごとのファイル(ISO 32000-2 §7.11)。ページ上のマークは決して添付に触れない。
  • フェイルクローズ(Fail closed) — 操作が正直に行えないとき、もっともらしく見えるが誤った結果を生成するのではなく、型付きエラーで止まること。エンタープライズエンジンは、果たせない座標ゾーン墨消しに対してこれを行う。