PAdES Signature-Policy Validation
HotPDF は、PAdES E-EPES 署名で使われる明示的な CMS の signature-policy-identifier 署名属性を作成し、検証します
Generate an explicit policy
THPDFCMSSignOptions に SignaturePolicyOID とポリシードキュメントのダイジェストを設定し、必要に応じて構造化クォリファイアを選択します
Options := HPDFCMSDefaultOptions(palExtended_E_EPES);
Options.SignaturePolicyOID := '1.2.3.4.5.1';
Options.SignaturePolicyHash := HPDFCMSDigestBytes(PolicyDocument, cmsdaSHA256);
Options.SignaturePolicyURI := 'https://policies.example/approval-v1';
SetLength(Options.SignaturePolicyQualifiers, 1);
Options.SignaturePolicyQualifiers[0].Kind := cmsqUserNotice;
Options.SignaturePolicyQualifiers[0].ExplicitText := 'Approval policy applies';
CMS := HPDFCMSBuildSignedDataEx(KeyMaterial, DocumentDigest, Options);
SignaturePolicyHashAlgOID は空の場合に SHA-256 へ既定で設定され、SignaturePolicyURI は 1 つの SPuri クォリファイア用の互換性ショートカットのままとなり、SignaturePolicyQualifiers と組み合わせることができます
構造化クォリファイアモデルは、SPuri、オプションの通知参照と明示テキストを備えた SPUserNotice、および OID または URI で識別される SPDocSpecification をサポートします
SignaturePolicyHashIsUnknown は、署名者がポリシーハッシュを知らない場合にのみ設定してください。その場合、HotPDF は選択されたダイジェスト長で ETSI の全ゼロ表現を出力します
Parse and report
HPDFParseCMSSignature は、識別子・ハッシュアルゴリズム・ハッシュバイト・不明ハッシュフラグ・クォリファイア・検証ステータスを含め、THPDFSignatureInfo.SignaturePolicy を通じて属性を公開します
既知のクォリファイア値は型付きフィールドにデコードされますが、認識できないクォリファイアはアプリケーションレベルの処理用に OID と生の DER 値を保持します
HPDFSignatureValidationReportToJSON は、マシン可読な検証ステータスとともに同じポリシーとクォリファイアデータをシリアライズします
Pin a required policy
VerifyOptions := THPDFCMSVerifyOptions.Default;
VerifyOptions.RequireSignaturePolicy := True;
VerifyOptions.ExpectedSignaturePolicyOID := '1.2.3.4.5.1';
VerifyOptions.ExpectedSignaturePolicyHash := ExpectedPolicyHash;
VerifyOptions.SignaturePolicyDocument := PolicyDocument;
VerifyOptions.VerifySignaturePolicyDocumentHash := True;
VerifyOptions.RejectUnknownSignaturePolicyHash := True;
Status := HPDFVerifyCMSSignatureEx(Source, ByteRange, CMS,
VerifyOptions, SignatureInfo);
期待される OID とハッシュフィールドは対応する値のみを制約し、ポリシードキュメント検証は VerifySignaturePolicyDocumentHash が true のとき、意図的に空のドキュメントでもハッシュ化します
ポリシーが見つからない、一致しない、未対応、または不明なため拒否された場合は、svSignaturePolicyMismatch と vfcSignaturePolicyMismatch を返し、詳細な THPDFSignaturePolicyValidationStatus が付きます
ポリシーチェックは署名プロバイダ・証明書パス・エビデンスの処理よりも前に実行され、プライマリの SignerInfo レコードにのみ適用されるため、親ドキュメントのポリシーが代理署名(counter-signature)を制約することはありません
Strictness and bounds
パーサは、重複ポリシー属性、複数の値、暗黙ポリシーの NULL、形式の壊れた既知クォリファイア、非 ASCII の IA5String 値、無効な Unicode、誤った既知ダイジェスト長、設定された実装制限を超えるコレクションサイズを拒否します
PAdES E-EPES は明示的なポリシー属性をちょうど 1 回要求し、その属性が存在する場合は PDF 署名辞書の /Reason エントリを禁止します。CMS レイヤは PDF 辞書を検査できないため、その最終制約は PDF 生成ワークフローが強制しなければなりません
CMS の複数のプライマリ署名者、CMS ダイジェストアルゴリズムの整合性、CMS 署名検証レポート を参照してください