PDF 署名チェッカー

PDF の署名フィールドを検査し、署名マーカーを数え、ByteRange 整合性ウィンドウを分析します。

PDF の署名フィールドを検査し、署名マーカーを数え、ByteRange 整合性ウィンドウを分析します。 PDF の署名フィールドを検査し、署名マーカーを数え、ByteRange 整合性ウィンドウを分析します。

背景

PDF 署名の仕組み

PDF のデジタル署名は、ページに描かれた印ではありません(視覚的な署名表示が 存在することもあります)。これは暗号オブジェクトで、署名辞書の /Contents 値に DER エンコードされた PKCS#7 SignedData 構造が入っています。この構造には署名者 の証明書、ダイジェストアルゴリズム、PDF バイトの正確なスライスに対して計算 された署名が含まれます。署名辞書の /ByteRange 配列は、署名がファイルのどの バイト範囲をカバーするかを正確に記述します:通常 [0, a, b, c] は「バイト 0..a-1 と b..b+c-1」を意味します。範囲内のすべてが署名され、範囲外(署名値 自体を含む)は署名されません。この設計により、PDF は最終的な長さを事前に 知らなくても署名できます。

改ざん検出で ByteRange が重要な理由

署名を検証するには、チェッカーが署名範囲のバイトをハッシュし、PKCS#7 構造に 埋め込まれたダイジェストと比較します。署名後に誰かが PDF を編集すると、対象 バイトが変わり、再計算ハッシュが乖離し、検証が失敗します--これが改ざんの シグナルです。したがって /ByteRange は整合性ウィンドウを定義します:署名は カバーするバイトしか保護できません。範囲が文書全体をカバーしない署名は、 残りのファイルを検出されない改変にさらします。このチェッカーは、範囲が 存在するか、バイト 0 から始まりヘッド+テールをカバーするか(あらゆる署名 ツールが生成する形)を報告します。

このツールが検査するもの

同梱の pdf-lib ライブラリ(Apache-2.0)で PDF を解析し、以下を報告します: ページ数、AcroForm で見つかった署名フィールド数、生バイトストリームの /FT /Sig マーカー数、/ByteRange 配列の有無、その範囲が標準形 [0, head, tailStart, tailLen] かどうか。マーカーがゼロの PDF には署名がまったく ありません。マーカーはあるが範囲を解析できない PDF は異常で、注意深く 見る価値があります。完全な暗号検証(ハッシュ再計算と証明書チェーン検証) には署名者の完全なチェーンとトラストストアが必要です。このページは、署名が 存在するか、整合性ウィンドウが無傷かを明らかにする構造分析に焦点を当てます。

結果の解釈

署名マーカーが複数ある場合は、複数署名か、インクリメンタル更新で再署名された 文書を意味することが多いです。暗号化された PDF は署名辞書をパーサーから隠す ことがあり、構造を報告するため ignoreEncryption モードを使用しています。 覚えておいてください:このツールは構造を検査し、身元は検査しません。署名者が 自称する人物かどうかは分かりません--それには信頼ルートに対する証明書の検証が 必要です。受け取った文書の一次トリアージとして使い、重要なものはプラットフォーム の完全な署名検証でフォローアップしてください。分析は完全にブラウザ内で行われ、 PDF がアップロードされることはありません。

Apache-2.0 の pdf-lib ライブラリ(public/assets に同梱)を使用。分析はローカルで行われ、PDF がアップロードされることはありません。

よくある質問

このツールは署名を暗号的に検証しますか?
構造分析を行います:署名フィールドの検出、/FT /Sig マーカーの計数、ByteRange 整合性ウィンドウの形状チェック。完全なハッシュ再計算と証明書チェーン検証には署名者のチェーンとトラストストアが必要で、ブラウザページはオフラインで提供できません。
ByteRange が空の報告はどういう意味ですか?
/ByteRange 配列が見つからず署名マーカーが存在する場合、PDF が通常でない署名レイアウトを使用しているか、破損している可能性があります。マーカーも ByteRange もない PDF は単に署名がありません。
インクリメンタル更新とは何か、なぜ重要か?
多くの PDF ツールはファイルを書き直すのではなく末尾に変更を追加します。各追加はオブジェクトを追加・置換でき、再署名は新しいマーカーとして現れます。そのため署名済み PDF に複数の署名マーカーが見えることがあります。
暗号化された PDF でも検査できますか?
はい、限定的に。チェッカーは ignoreEncryption で読み込むため署名辞書は表示されたままです。/FT /Sig の生バイトスキャンは平文ストリームを探すため、暗号化に関係なく機能します。
PDF はどこかにアップロードされますか?
いいえ。PDF は FileReader で読み取られ、同梱の pdf-lib ライブラリで完全にブラウザ内で解析されます。サンプル PDF もローカル生成です。何も端末の外に出ません。
PKCS#7 / CAdES / PAdES とは?
PKCS#7 は署名データを保持するコンテナ形式で、現在は CMS として標準化されています。PAdES は欧州電子署名規則が使うその形式の PDF プロファイルで、長期的な検証属性を追加し、署名を長年にわたり検証可能にします。