mirror of
https://github.com/alam00000/bentopdf.git
synced 2026-11-08 08:52:28 +01:00
100 lines
7.1 KiB
Markdown
100 lines
7.1 KiB
Markdown
---
|
|
title: PDF署名を検証する
|
|
description: PDFファイルの電子署名を検証します。証明書の有効性、署名者の身元、文書の完全性、信頼チェーンの状態を確認できます。
|
|
---
|
|
|
|
# PDF署名を検証する
|
|
|
|
署名済みPDFをアップロードすると、このツールがすべての電子署名を抽出し、署名者を特定し、証明書の有効性を確認し、署名後に文書が変更されたかどうかを報告します。信頼する証明書を指定して、署名チェーンを検証することもできます。
|
|
|
|
## 使い方
|
|
|
|
1. 署名済みPDFファイルをアップロードします。検証は自動的に始まります。
|
|
2. ツールが概要(見つかった署名の数と、そのうち有効なものの数)を表示します。
|
|
3. 各署名について、署名者名、発行者、日付、状態を示す詳細カードが表示されます。
|
|
4. 必要に応じて、**信頼する証明書**(.pem、.crt、.cer、.der)をアップロードすると、特定のトラストアンカーに対して署名を検証できます。再検証は自動的に実行されます。
|
|
|
|
## チェック内容
|
|
|
|
### 署名の解析
|
|
|
|
ツールはPDFからPKCS#7署名オブジェクトを抽出してASN.1構造をデコードし、署名者のX.509証明書と、署名に埋め込まれた証明書チェーンを取り出します。
|
|
|
|
### 証明書の有効性
|
|
|
|
- **有効期限**: 証明書は現在、有効期間内ですか。
|
|
- **自己署名の検出**: 証明書は自身の発行者ですか。
|
|
- **信頼チェーン**: 信頼する証明書が指定された場合、署名者の証明書はそこまでチェーンがつながっていますか。
|
|
|
|
### 暗号による検証
|
|
|
|
- ツールは署名の`/ByteRange`が対象とするバイト列を再構築し、署名者が宣言したアルゴリズムでハッシュ化して、署名内の`messageDigest`属性と結果を比較します。
|
|
- 次に、署名済み属性をDERのSETとして再シリアライズし、署名者証明書の公開鍵に対して署名を検証します。
|
|
- **署名は、これらすべてに合格した場合にのみ有効と報告されます。** 署名後にPDFのバイト列が変更された場合、または埋め込まれた署名が署名者の鍵と一致しない場合、ステータスには具体的な理由とともに「無効: 暗号化検証に失敗しました」と表示されます。
|
|
|
|
#### 対応する署名アルゴリズム
|
|
|
|
| アルゴリズム | 検証方法 |
|
|
| ----------------------- | ------------------------------------------------------------------------------- |
|
|
| RSA (PKCS#1 v1.5) | node-forge `publicKey.verify`、Web Cryptoへのフォールバックあり |
|
|
| RSA-PSS (RSASSA-PSS) | Web Crypto `verify({name: 'RSA-PSS', saltLength})` |
|
|
| ECDSA P-256/P-384/P-521 | DERからIEEE P1363形式への署名変換後、Web Crypto `verify({name: 'ECDSA', hash})` |
|
|
|
|
署名がこの一覧にないアルゴリズム(たとえばEd25519、SM2、特殊なダイジェストOIDを使ったRSAなど)を使用している場合、カードには黄色で<strong>「未検証: 未対応の署名アルゴリズム」</strong>と、具体的なOIDまたは理由が表示されます。これは意図的な3段階の区別です。
|
|
|
|
- **有効**: 署名者の公開鍵に対して、署名が暗号的に検証されました。
|
|
- **無効**: 検証が実行され、否定的な結果になりました(バイト列の変更、鍵の不一致)。
|
|
- **未検証**: このアルゴリズムについては検証を実行できませんでした。証明書のメタデータは表示されますが、署名は「不明」として扱い、Adobe Acrobatまたは`openssl cms -verify`で検証してください。
|
|
|
|
### 安全でないダイジェストアルゴリズム
|
|
|
|
- **MD5またはSHA-1**を使用した署名は無効として拒否され、「安全でないダイジェスト」ステータスが付きます。どちらのアルゴリズムにも衝突攻撃が公開されているため、SHA-1やMD5のハッシュに対する署名では完全性は保証されません。
|
|
- SHA-224、SHA-256、SHA-384、SHA-512はすべて受け入れられます。
|
|
|
|
### 文書のカバー範囲
|
|
|
|
- **完全カバー**: 署名がPDFファイル全体をカバーしており、署名後にバイトが追加・変更されていないことを意味します。
|
|
- **部分カバー**: 署名がファイルの一部のみをカバーしています。署名後に変更が加えられた可能性を示しますが、悪意があるとは限りません(増分保存でも部分カバーになります)。
|
|
|
|
## 署名の詳細
|
|
|
|
各署名カードには次の情報が表示されます。
|
|
|
|
- **署名者**: 署名者の証明書に含まれる共通名、組織、メールアドレス
|
|
- **発行者**: 署名者の証明書を発行した認証局
|
|
- **署名日時**: 署名に埋め込まれたタイムスタンプ
|
|
- **有効開始日 / 有効期限**: 証明書の有効期間
|
|
- **理由**: 文書に署名した理由(指定されている場合)
|
|
- **場所**: 署名した場所(指定されている場合)
|
|
- **カバー状況**: 完全または部分
|
|
- **信頼バッジ**: 信頼済み、または信頼チェーンにないことを示します(カスタム証明書を指定した場合のみ)
|
|
|
|
### 技術的な詳細
|
|
|
|
技術的な詳細セクションを展開すると、次の情報が表示されます。
|
|
|
|
- 署名者の証明書のシリアル番号
|
|
- ダイジェストアルゴリズム(SHA-256、SHA-512など)
|
|
- 署名アルゴリズム(RSA with SHA-256、ECDSA with SHA-256など)
|
|
- 無効な署名のエラーメッセージ
|
|
|
|
## 活用例
|
|
|
|
- 副署する前に、電子署名された契約書を検証する
|
|
- 署名済み文書を監査し、改ざんされていないことを確認する
|
|
- 文書に署名した後に証明書の有効期限が切れていないかを確認する
|
|
- 組織のルート証明書に対して署名を検証する
|
|
- 政府文書や法的文書の署名の詳細を確認する
|
|
|
|
## ヒント
|
|
|
|
- 自己署名証明書だからといって署名が無効というわけではありません。信頼できる第三者を通じて署名者の身元を確認できない、という意味です。社内文書ではよくあることです。
|
|
- 部分カバーは、必ずしも改ざんを示すものではありません。多くのPDFワークフローでは、増分更新(2つ目の署名など)が追加され、部分カバーになります。
|
|
- 信頼チェーンの検証を行うには、組織のルート証明書または中間証明書を信頼する証明書としてアップロードしてください。
|
|
|
|
## 関連ツール
|
|
|
|
- [PDFへの電子署名](./digital-sign-pdf): 自分の証明書でPDFに署名します
|
|
- [PDFの平坦化](./flatten-pdf): 署名前にPDFをフラット化し、署名後の変更を防ぎます
|
|
- [メタデータの削除](./remove-metadata): 署名を適用する前にPDFをクリーンアップします
|