CMS 다이제스트 알고리즘 일관성
HotPDF는 서명된 문서 범위를 읽거나, 콘텐츠를 해싱하거나, 인증서 경로를 구성하거나, 서명 공급자를 호출하기 전에 일관성 없는 CMS 알고리즘 식별자를 진단합니다
일관성 검사
현재 SignerInfo.digestAlgorithm은 감싸고 있는 SignedData.digestAlgorithms 집합에 반드시 있어야 하며, 무관한 추가 알고리즘은 상호 운용 가능한 멀티 서명자 컨테이너를 위해 계속 허용됩니다
다이제스트별 RSA PKCS#1 v1.5 및 ECDSA 서명 OID와 RSA-PSS 파라미터 안의 명시적 해시는 SignerInfo.digestAlgorithm과 같은 다이제스트를 골라야 합니다
RFC 6211 CMSAlgorithmProtection 서명 속성이 있으면 하나의 값을 가진 채 정확히 한 번 나타나야 하고, 보호된 다이제스트 및 서명 AlgorithmIdentifier 값은 실제 SignerInfo 필드와 일치해야 합니다
파라미터 없는 알고리즘 식별자에서는 파라미터가 없는 경우와 DER NULL 파라미터가 동등하게 비교되고, 나머지 파라미터는 정확히 비교되어 파라미터화된 서명 메커니즘이 조용히 정규화될 수 없습니다
기계 판독 가능 결과
HPDFParseCMSSignature는 성공적으로 파싱된 메타데이터를 유지하되 일관성 검사가 실패하면 THPDFSignatureInfo.Status를 svDigestAlgorithmMismatch로 설정합니다
검증은 svDigestAlgorithmMismatch를 반환하고, 검증 보고서는 vfcDigestAlgorithmMismatch를 쓰며, JSON은 digestAlgorithmMismatch를 내보냅니다. 이 조건을 malformed CMS, 미지원 알고리즘, 콘텐츠 다이제스트 불일치로 뭉개지 않습니다
THPDFSignatureInfo.DigestAlgorithmOID는 서명자 다이제스트 OID를 기록하고 THPDFSignatureInfo.DigestConsistencyIssue는 다음 원인 중 하나를 고릅니다
dciSignerDigestNotDeclared— 알려진 서명자 다이제스트가 바깥 다이제스트 집합에 없습니다dciSignatureDigestMismatch— 고정 또는 파라미터화된 서명 메커니즘이 다른 다이제스트를 골랐습니다dciAlgorithmProtectionDigestMismatch— 보호된 다이제스트 식별자가 서명자 다이제스트 식별자와 다릅니다dciAlgorithmProtectionSignatureMismatch— 보호된 서명 식별자가 서명자 서명 식별자와 다릅니다
JSON 서명자 객체는 같은 정보를 digestAlgorithmOID와 digestConsistencyIssue로 노출하며 값은 signerDigestNotDeclared, signatureDigestMismatch, algorithmProtectionDigestMismatch, algorithmProtectionSignatureMismatch 중 하나입니다
타임스탬프 및 우선순위
RFC 3161 문서 타임스탬프와 미서명 signature-timestamp 토큰도 같은 검사를 거치며, THPDFTimestampInfo.DigestConsistencyIssue 값이 일관성 없는 중첩 CMS 컨테이너를 식별합니다
구조 오류는 여전히 malformed CMS로 실패하고, 알 수 없는 서명자 다이제스트는 계속 미지원으로 남으며, 첫 번째 결정적 일관성 문제가 컨테이너, 알고리즘 보호, 서명 메커니즘 순서로 보존됩니다
공급자 및 로드된 문서 검증 계약은 모던 시그니처 공급자와 THotPDF.VerifyLoadedSignatureWithOptions를 참고하세요