Skip to content

pdf-trust — 受入監査 ​

受け取った PDF(契約書・請求書・診療文書・行政文書など)が「本物か・信用してよいか・改ざんされていないか」を監査し、推奨判定付きの Trust Report を返す Skill です。

原則 ​

  1. 内容の真偽は判定しません — 判定するのは真正性(原本性・完全性)のみです
  2. 検証結果は技術的事実として返し、最終判断は利用者に委ねます
  3. 判定の根拠(どのツールの何の結果か)を必ず明示します
  4. 判定はコードが返し、LLM は説明文だけを書く — 4 値判定は pdf-verify の evaluate_policy が返します。Skill の仕事は firedRules の解説・推奨アクション・法令根拠の引用であり、判定の上書きではありません

4 値判定 ​

判定意味
trust_and_useそのまま利用可
use_with_caution留意事項付きで利用可
human_review_required人間の確認が必要
reject受け入れ不可

前提 MCP ​

MCP必須/任意役割
pdf-verify(v0.7.0+、v0.29.0+ 推奨)必須evaluate_policy・署名検証・改ざん検知・PAdES・PDF/A(v0.11.0+ は PDF/A-4 も。pdfa-4 / pdfa-4e / pdfa-4f。pdfa-4b は存在しない)
pdf-reader任意署名フィールド構造・タグ・メタデータの観測
pdf-spec任意逸脱時の ISO 32000 根拠引用
houki-egov / houki-nta / tax-law / labor-law任意プロファイルが指定する法令根拠

v0.7.0 が下限なのは、そこで初めて evaluate_policy が入るからです。出力の形は v0.21.0 以降が前提で、この版で verify_signatures / detect_pades_level の JSON 最上位が配列から辞書({ scope, signatures: [...] } / { scope, levels: [...] })に変わりました。一覧だけを読んでいると、その一覧が不完全であることに気づけません。Skill が推奨するのは v0.29.0+ です。v0.27.0 で、証明書の有効期間と失効を、検証できたタイムスタンプの時刻で判定するようになりました(ISO 32000-2 §12.8.3.4.5・§12.8.3.4.6)。失効した署名者証明書は、タイムスタンプが失効より前を示すときだけ revoked_after_validation_time(use_with_caution)になり、それ以外は indeterminate になります(それ以前の版は invalid を返していました)。v0.28.0 から、revocation_freshness(既定 24 時間)より古い失効情報を good の根拠にしません。v0.29.0 から JSON を 25,000 文字で切らなくなりました。それ以前の版は isError: false のまま JSON.parse できない本文を返すことがありました。代わりに、一覧が件数上限を超えると xxxTruncated: { returned, total } が付きます。pdf-trust は v0.8.1 から 0.27.0 / 0.28.0 の変更を、v0.8.2 から 0.29.0 の項目を読みます。

監査の流れ(Phase) ​

Phaseやること
0目的の確認とプロファイルの選定
1evaluate_policy で全ファイルを一括判定(4 値)
2該当したルール(firedRules)の解釈・深掘り
2.5署名後の変更の特定 — 「何バイト増えた」を「何が・どのページのどこに書かれたか」まで下ろす
3プロファイル別チェック(PDF/A・PDF/UA・長期保存など)
4法令根拠の取得(プロファイル指定時)
5Trust Report の生成

本文やユースケースで「Phase 2.5」のように参照するのは、この表の番号です。

プロファイル ​

プロファイル想定文書特徴
contract契約書・NDA・発注書署名必須。未署名は human_review_required
financial請求書・決算書・申告書長期保存チェック込み
legal訴訟資料・法務文書署名後変更の全履歴を要求
medical診療情報提供書・検査報告書最も保守的。caution を review に格上げ
government行政文書・公共告知長期保存チェック込み。未署名を許容
general上記以外追加チェックなし

実測例 — 4 値判定(2026-08-11・すべて実在検体) ​

検体プロファイル判定該当ルール
自作 CA 署名 + CRL を DSS に同梱 + trust_anchors 指定generaltrust_and_useなし(valid + trusted + revocation good)
インターネット官報 2026-08-10 号本紙(内閣府署名 + AMANO タイムスタンプ)governmentuse_with_cautionTRUST-NOT-EVALUATED / REVOCATION-UNKNOWN
同上の自作検体で CRL なしgeneraluse_with_cautionREVOCATION-UNKNOWN
未署名の請求書 PDFcontracthuman_review_requiredUNSIGNED-REQUIRED(署名の画像は電子署名ではない)
署名対象範囲を 1 バイト改変した検体generalrejectPOL-REJECT-INVALID(digest 不一致)

1 行目と 3 行目の差分は CRL の有無だけです(trust_anchors はどちらも指定済み)。アンカーを渡すだけでは最良判定に届かず、失効確認が good になって初めて trust_and_use に到達します。CRL が署名者をカバーしたことで PAdES の構造観測も B-T → B-LTA に上がります(この検体には文書タイムスタンプが最初から入っているため、CRL で B-LT の 条件が満たされると同時に B-LTA の構造が揃います)— 4 値判定と LTV の関係が 1 対の検体で見えます。

Trust Report 抜粋(官報の個票より) ​

evaluate_policy の判定に加え、Phase 2.5(verify_integrity + locate_objects)が 「署名後の +9938 バイト」の正体を特定します:

オブジェクト変更役割ページ / 矩形
64addedform field widgetp.1 / 0,0,0,0(不可視)
65added/DocTimeStamp 署名辞書ページ非参照
54modifiedAcroForm 辞書—

→ 署名後の変更は AMANO タイムスタンプの付与そのものです(増分更新は ISO 32000-2 §7.5.6 で合法)。 「N バイト足された」で止めず「何が足されたか」まで降ろすのが Phase 2.5 の仕事です。 このほか官報個票では、PDF/UA を veraPDF が NOT COMPLIANT と判定(タグなし実コンテンツ 236 件ほか 10 規則)、PDF/A 参考測定は veraPDF が暗号化文書に結果を返さず「未実施」と記録しました — 測れなかった項目は passed ではなく未実施と明記します。

インストール ​

sh
/plugin marketplace add shuji-bonji/claude-plugins
/plugin install pdf-verify-mcp@shuji-bonji   # 必須基盤
/plugin install pdf-trust@shuji-bonji
# 任意: pdf-reader-mcp(位置特定)・pdf-spec-mcp(条文引用)・houki 系(法令根拠)

リポジトリ: shuji-bonji/pdf-trust-skill(SKILL.md 本体・プロファイル定義)

ツールが足りないときの動き(縮退動作) ​

  • pdf-verify 未接続 → 監査は成立しません。接続を案内して停止します
  • 旧 verify(v0.7.0 未満・evaluate_policy なし)→ 手動判定表にフォールバックし、レポートに「手動判定」と明記します
  • 任意 MCP の欠落 → 該当項目を「未実施(ツール未接続)」と明記します。項目を書かずに省くと「チェック済みで問題なし」と誤読されます
  • 測れなかった検査(例: 暗号化 PDF の PDF/A を veraPDF が採点できない)→ 未実施として記録します。判定不能は無罪ではありません

MIT Licensed