宣言された文字色と、実際に描画された文字周辺の背景色を比較します。白背景の白文字や、装飾色に紛れた文字が対象です。
Detection guide
PDFに隠された文字を、描画情報から見つける
PDFには、人間が通常の画面では気づきにくい一方、テキスト抽出では取得できる文字を埋め込めます。PDFenderは、講義資料などに仕込まれた生成AI向けの隠し指示、いわゆる間接プロンプトインジェクションを確認するための静的解析ツールです。
検出する隠し方
文字列の内容だけで決めつけず、PDF上での見え方に異常があるかを中心に調べます。
ページ内の標準的な文字サイズや文字の変換行列と比較し、人間には読みづらい大きさや横幅に縮められた文字を探します。
非表示の文字描画モード、空のクリッピング領域、初期状態で非表示のレイヤーなど、抽出はできても画面には現れない文字を確認します。
文字より後に描画された図形や画像との重なりを調べ、必要に応じて遮蔽物を除いて再描画した場合の画素差も確認します。
Unicode Tagsの連続、高密度なゼロ幅文字列、不自然な文字方向制御を検査します。Tagsと一般的なゼロ幅ビット列は復号し、確認できる形で表示します。
DocumentInfoとXMP metadata内の不可視Unicodeや指示表現を確認します。AIが読み込むか不明なため、ページ上の検出とは分けて表示します。
判定の流れ
- PDF.jsでページを描画しながら、文字・図形・画像の描画命令と描画順序を取得します。
- 文字の色、透明度、サイズ、変形、位置、クリッピング、レイヤー状態、後続オブジェクトとの重なりに加え、生の抽出文字に含まれる不可視Unicodeを検査します。
- 見え方または文字コードの異常を根拠として確信度を計算します。難読化解除後の指示表現は、異常がある場合に限って確信度を補強します。
開発時の検証結果
検出機構ごとに作成した検証用PDFを現行版で確認した結果です。通常のPDF閲覧では認識できない一方、テキスト抽出では取得される文字を対象にしています。これは既知の手口に対する回帰確認であり、未知のPDFに対する性能保証や第三者評価ではありません。
| PDF内の手口 | 通常表示 | テキスト抽出 | PDFender |
|---|---|---|---|
| 文字描画モード Tr 3 | 完全に非表示 | 取得される | 検出 |
| ゼロ面積のクリッピング領域 | 完全に非表示 | 取得される | 検出 |
| 初期状態OFFのOptional Content Group | 非表示レイヤー | 取得される | 検出 |
| 白一色のPattern塗り | 白背景では判読不能 | 取得される | 検出 |
| 淡い装飾帯と同色の文字 | 装飾に紛れて判読困難 | 取得される | 検出 |
| 後続の図形による被覆 | 図形の背後で判読不能 | 取得される | 検出 |
| Unicode Tagsによる不可視文字列 | 命令文は表示されない | 特殊コードポイントとして取得 | 復号して検出 |
| 文字間のゼロ幅文字・ゼロ幅ビット列 | 通常文字または空白に見える | ゼロ幅文字を含む | 除去・復号して検出 |
| 不自然なBidi override | 表示順が変化する | 論理順序と制御文字を含む | 検出 |
検出結果の考え方
検出結果は、確認すべき箇所を絞り込むための機械的な手掛かりです。隠し文字が必ずプロンプトインジェクションであるとは限りません。
よくある質問
PDFの隠し文字とは何ですか?
PDFのテキスト抽出では取得できる一方、白文字、極小表示、非表示レイヤー、クリッピング、図形による被覆などによって、人間が通常の閲覧画面では認識しにくい文字です。
PDFenderはPDFをサーバーへアップロードしますか?
いいえ。PDFの読み込み、描画、文字情報の解析、検出結果の生成はブラウザ内で完結し、PDF本文、抽出文字、検出結果が端末の外へ送信されることはありません。
AIへの指示に似た文章だけで検出しますか?
通常のページ本文では、指示表現だけを根拠にはしません。文字の非表示、低コントラスト、被覆、Unicode Tagsの連続、高密度なゼロ幅文字などの異常がある場合に限り、指示に似た表現を確信度の補強に使用します。metadata内の指示表現は低確信度の文書情報として分離します。
Unicode Tagsやゼロ幅文字とは何ですか?
画面に表示されない、または表示幅を持たない特殊なUnicode文字です。PDFenderは異常な連続や密度を検査し、既知の符号化方式で読める場合は復号します。正当な用途もあるため、1文字あるだけでは検出しません。
OCRを使用していますか?
使用していません。PDFenderは、PDF内部にテキストとして存在する一方、人間には見えにくく配置された文字を、文字情報と描画命令から検査します。画像化・アウトライン化された文字は人間にも見える可能性が高く、通常のテキスト抽出には含まれないため、今回対象とする隠しプロンプトインジェクションとしては機能しにくく、検査対象外としています。
「検出なし」なら、そのPDFは安全ですか?
安全性を保証するものではありません。PDFenderは確認箇所を絞るための静的解析ツールであり、未知の描画方法や複雑なPDF構造による見逃し、正常な文字の誤検知が発生する可能性があります。
日本語のPDFにも対応していますか?
はい。日本語CIDフォントの表示に必要なPDF.jsのCMapと標準フォントを同梱し、日本語PDFの描画と検出箇所のプレビューに対応しています。ただし、PDFの作成方法によって文字を取得できない場合があります。
ブラウザ内でPDFを検査
インストールやPDFのアップロードは必要ありません。
PDFenderを開く