CMS ダイジェストアルゴリズムの整合性
HotPDF は、署名付きドキュメント範囲の読み取り、コンテンツのハッシュ化、証明書パスの構築、または署名プロバイダの呼び出しを行う前に、整合性のない CMS アルゴリズム識別子を診断します
整合性チェック
現在の SignerInfo.digestAlgorithm は、それを囲む SignedData.digestAlgorithms セットに存在していなければなりません。一方、無関係な追加のアルゴリズムは、相互運用可能なマルチ署名者コンテナのために許可されたままです
ダイジェスト固有の RSA PKCS#1 v1.5 および ECDSA 署名 OID と、RSA-PSS パラメータ内の明示的なハッシュは、SignerInfo.digestAlgorithm と同じダイジェストを選択しなければなりません
RFC 6211 の CMSAlgorithmProtection 署名属性が存在する場合、それは 1 つの値で 1 回だけ出現しなければならず、その保護されたダイジェストと署名 AlgorithmIdentifier の値は実際の SignerInfo フィールドと一致しなければなりません
パラメータなしのアルゴリズム識別子では、欠落した DER NULL パラメータと DER NULL は同等として比較されます。その他のパラメータは正確に比較されるため、パラメータ化された署名メカニズムが黙って正規化されることはありません
機械可読な結果
HPDFParseCMSSignature は正常に解析されたメタデータを保持しますが、整合性チェックが失敗すると THPDFSignatureInfo.Status を svDigestAlgorithmMismatch に設定します
検証は svDigestAlgorithmMismatch を返し、検証レポートは vfcDigestAlgorithmMismatch を使用し、JSON は digestAlgorithmMismatch を出力しますが、この状態を不正な CMS、非対応のアルゴリズム、またはコンテンツダイジェストの不一致に折り畳むことはありません
THPDFSignatureInfo.DigestAlgorithmOID は署名者のダイジェスト OID を記録し、THPDFSignatureInfo.DigestConsistencyIssue は次の原因のいずれかを選択します
dciSignerDigestNotDeclared— 既知の署名者ダイジェストが外側のダイジェストセットにありませんdciSignatureDigestMismatch— 固定またはパラメータ化された署名メカニズムが別のダイジェストを選択しますdciAlgorithmProtectionDigestMismatch— 保護されたダイジェスト識別子が署名者のダイジェスト識別子と異なりますdciAlgorithmProtectionSignatureMismatch— 保護された署名識別子が署名者の署名識別子と異なります
JSON の署名者オブジェクトは、digestAlgorithmOID と digestConsistencyIssue として同じ情報を signerDigestNotDeclared、signatureDigestMismatch、algorithmProtectionDigestMismatch、または algorithmProtectionSignatureMismatch という値で公開します
タイムスタンプと優先順位
RFC 3161 ドキュメントタイムスタンプと署名なしの署名タイムスタンプトークンは同じチェックを使用し、その THPDFTimestampInfo.DigestConsistencyIssue 値は整合性のないネストされた CMS コンテナを特定します
構造エラーは依然として不正な CMS として失敗し、未知の署名者ダイジェストは非対応のままになり、最初の決定的な整合性問題はコンテナ、アルゴリズム保護、署名メカニズムの順に保持されます
プロバイダと読み込み済みドキュメントの検証契約については、最新の署名プロバイダとTHotPDF.VerifyLoadedSignatureWithOptionsを参照してください