3 ポイント 投稿者 GN⁺ 2025-12-24 | 1件のコメント | WhatsAppで共有
  • PDFドキュメントの不適切なマスキング処理を自動で見つけ出すPythonライブラリで、テキストが単に黒い四角形で覆われているだけのケースを識別
  • Free Law Projectが数百万件のPDFを収集する過程で発見した反復的な問題を解決するために開発
  • コマンドラインまたはPythonコードから実行でき、結果をJSONまたはPythonオブジェクトの形で返す
  • 内部的にPyMuPDFを使ってPDFの四角形、テキスト、色情報を分析し、マスキングが実際にテキストを隠しているかを判定
  • 法的文書や公開資料における個人情報漏えい防止のための自動検証ツールとして活用価値が高い

概要

  • x-rayは、PDFファイル内の**不適切なマスキング(redaction)**を検出するPythonライブラリ
    • ユーザーがPDFパスを入力すると、マスキングが適切に行われていない領域を見つけ出す
    • 結果はページごとに座標(bbox)と該当領域のテキスト(text)を含むJSON形式で出力

開発背景

  • Free Law Projectは数百万件のPDFを収集する過程で、マスキングが適切に行われていない文書を多数発見
    • 一部のユーザーは、テキストを削除せずに黒い四角形やハイライトで覆う方式を使用
    • この場合、四角形の下のテキストを選択すると元の文面がそのまま露出する
  • この問題の頻度を把握するためにx-rayツールを制作

使い方

  • インストール
    • pip install x-rayまたはuv add x-rayコマンドでインストール可能
  • コマンドライン実行
    • xray path/to/file.pdfの形で実行するとJSON結果を出力
    • URL入力時はリモートPDFをダウンロードした後に検査を実行
    • 複数のURLを一度に検査するにはxargs -n 1 xray < urls.txtを使用
  • Pythonコード内で使用
    • xray.inspect("file.pdf")を呼び出すとPythonオブジェクトとして結果を返す
    • 入力値が文字列ならローカルファイル、https://で始まる場合はURL、bytesならメモリ内PDFとして処理
    • bytes型でファイルパスを渡しても動作しない

動作原理

  • 内部的にPyMuPDFを用いてPDFを分析
    1. PDF内の**四角形(rectangle)**を探索
    2. 同じ位置の**文字(letter)**を探索
    3. 四角形を画像としてレンダリング
    4. 四角形が単一色で塗りつぶされていれば不適切なマスキングと判定
  • PDF構造が複雑なため完全な検出は難しいが、継続的に改善中
  • プロジェクトは寄付と支援によって維持

貢献と配布

  • GitHubのissues一覧を通じて未対応ケースや改善要望を確認可能
  • 初回の貢献前には**貢献者ライセンス契約(CLA)**への署名が必要
  • 配布はGitHub Actionsによって自動化されており、手動配布時はpoetry publish --buildコマンドを使用

ライセンス

  • BSDライセンスで公開されており、他のプロジェクトに自由に統合可能
  • Pull Requestおよび機能提案を歓迎し、GitHubのWebインターフェースから直接修正可能

1件のコメント

 
GN⁺ 2025-12-24
Hacker Newsのコメント
  • Free Law Projectで働きながら何年もかかる複雑なプロジェクトを数多く手がけてきたが、今回の X-rayプロジェクト が最も話題になった事例だった
    CourtListenerの数百万件の文書を分析するためにX-rayを作り、人々にこの問題を知らせるのが目的だった
    S3のバッチジョブで数百万件の文書を数分で分析できたが、結果を整理して報告するという 本当に難しい部分 はまだ残っている

    • Argelius LabsのPDFセキュリティ研究によると、黒いボックスで隠された部分の長さだけでも単語の長さを推定できる glyph spacing攻撃 が可能だという
      X-rayがこうしたフォントメトリクスの漏えいも利用しているのか気になる
    • フォントの kerning とピクセル単位での再現が可能なら、単語をかなり正確に推測できそうだ
      たとえばoioioiとoooiiiは、フォントによって幅が異なる
  • 今日公開されたファイルのうち10%ほどしか見ていないが、たとえば EFTA00037069.pdf には /Prev ポインタがあり、以前のバージョンがPDF内部に含まれている
    これは些細な修正だが、ほかのファイルにもある可能性が高い
    qpdf --show-object=trailer コマンドで直接確認できる
    こういう ずさんな編集 はミスというより意図的だった可能性もあると思う

    • 自分で確認したところ、そのファイルの修正履歴は各ページに番号が追加された程度だった
      元の文書はすでに完全に flattenedされた文書 だった
    • こうした作業を任された人たちが基本的なガイドラインすら知らないのも驚きではない
    • 実際には誰でも呼んできて redaction作業 をさせているので、経験不足が原因である可能性が高い
  • 考えれば考えるほど、フォントの kerning情報 はredactionの大きな弱点になり得る
    黒いボックスの周囲にあるテキストの位置だけでも、隠された単語の長さや形を推定できる
    レンダリングアルゴリズムがわかっていれば、brute-forceで実際のテキストを推測することもできそうだ
    この問題を研究した人がいるのか気になる

    • 自動で kerningをランダム調整するフォント があるとよさそうだ
      同じ単語でも文書ごとに間隔が変わる方式だ
    • 最近では、LLMの暗号化されたチャットセッションから パケットサイズとタイミング分析 によって情報を抽出した事例もあった
      一種の サイドチャネル攻撃 で、この問題に似ている
    • redactionの長さと予測可能性次第だ
      短くて文脈上 “yes” や “no” 程度に限られるなら簡単に推測できるが、名前や長い文ははるかに難しい
  • PDFはいまだに デジタル文書として基本的な欠陥 が多すぎるのに、それでも広く使われ続けているのが残念だ

  • 単純な質問だが、こうした文書公開で redactionの目的 が正確には何なのか気になる
    なぜ匿名性を維持しなければならないのかも理解できなかった
    (編集後)無実の人々も含まれ得ると考えると納得できる

    • 法的には、被害者の身元、進行中の捜査、児童性的虐待資料、国家安全保障に関する情報だけが隠蔽の対象になり得る
      評判毀損や政治的理由で隠すことは禁止 されている
      だが実際のredactionがこの基準を守っていないのではないかという懸念が大きい
    • WikiLeaksは、個人の 身体的危害 につながり得る情報だけを隠す立場だった
      たとえばGPS座標の公開で爆撃の危険が生じるような場合だ
    • 被害者たちは、加害者を守るためのredactionであれば望まないと述べている
      責任追及 のほうが重要だという
    • 被害者、目撃者、情報提供者の身元を保護するためだ
    • 長期にわたる捜査ファイルには 虚偽通報や誤報 が多いため、無実の人のプライバシー保護が必要になる
      だが今回の事件はあまりにも重要で、公開は避けられない
  • redacted PDFを公開する際は、黒い長方形を描いて 画像としてラスタライズ するのが基本手順のように思える 🤷

    • 自分は anti-screenshot 関連のビジネスを運営しているが、こうしたredactionの失敗は本当によくある
      単に黒いボックスをかぶせただけではデータは消えない
      コンプライアンスの現場では、こうした 誤解 を頻繁に目にする
    • ただ、場合によっては文書が 検索可能であることを求められる ため、画像変換ができないこともある
  • Adobe Proを正しく使えば、PDFの内容を 恒久的に削除(redact) できる
    今回の件は、単にPDFエディタをきちんと扱えなかった アマチュアのミス
    何千人もの弁護士や法務担当者が何十年も使ってきた手順を無視した結果だ
    昔は紙に黒い線を引き、印刷物を最終版として使う方式だったので、その時代の感覚で作業したのかもしれない

    • PDFを紙のように考えて、単に 黒いボックス を重ねれば終わりだと思ったのかもしれない
      テキスト選択ができなくなるので、隠せたと勘違いした可能性がある
      あるいは、わざとこう処理しておいて ミスのふり をしようとした意図だった可能性もある
    • 米国連邦政府の弁護士や捜査官は redactionの訓練 を徹底して受ける
      そのため今回は単純ミスではなく、悪意ある形式的順守(malicious compliance) だと見る向きが多い
  • 驚くことに、ブラウザのPDFビューアでもredacted情報が見えてしまう
    Brave(Linux)で この文書 を開き、90番段落の最初の行をコピーすると、隠されたテキストがそのまま貼り付けられる

    • この種の 不適切なredaction は、X-rayが検出できる代表例だ
  • ediscovery(電子証拠開示) という概念が一般大衆にまで広がっているのを見ると興味深い

  • 技術業界の人たちは、非技術分野の人々がどれほど 技術に疎い かを知ると驚くだろう
    昔のようにIT担当者が会社の 全知全能の神 扱いされていた時代を思い出す