PAdES 서명 정책 검증
HotPDF는 PAdES E-EPES 서명이 쓰는 명시적 CMS signature-policy-identifier 서명 속성을 생성하고 검증합니다
명시적 정책 생성
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는 하나의 SPuri 한정자를 위한 호환성 지름길로 남아 SignaturePolicyQualifiers와 조합할 수 있습니다
구조화된 한정자 모델은 SPuri, 선택적 notice reference와 명시적 텍스트를 가진 SPUserNotice, OID 또는 URI로 식별되는 SPDocSpecification을 지원합니다
서명자가 정책 해시를 모를 때만 SignaturePolicyHashIsUnknown을 설정하세요. 그러면 HotPDF가 선택된 다이제스트 길이의 ETSI 올제로 표현을 내보냅니다
파싱 및 보고
HPDFParseCMSSignature는 식별자, 해시 알고리즘, 해시 바이트, unknown-hash 플래그, 한정자, 검증 상태를 포함해 이 속성을 THPDFSignatureInfo.SignaturePolicy로 노출합니다
알려진 한정자 값은 타입 있는 필드로 디코딩되고, 인식하지 못한 한정자는 응용 프로그램 수준 처리를 위해 OID와 원시 값 DER을 유지합니다
HPDFSignatureValidationReportToJSON은 같은 정책과 한정자 데이터를 기계 판독 가능한 검증 상태와 함께 직렬화합니다
필수 정책 고정
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일 때 의도적으로 빈 문서조차 해싱합니다
없거나, 일치하지 않거나, 지원되지 않거나, 거부된 알 수 없는 정책은 정확한 THPDFSignaturePolicyValidationStatus와 함께 svSignaturePolicyMismatch와 vfcSignaturePolicyMismatch를 반환합니다
정책 검사는 서명 공급자, 인증서 경로, 증거 작업보다 먼저 실행되며 기본 SignerInfo 레코드에만 적용되므로, 부모 문서 정책이 대응 서명을 제약하지 않습니다
엄격성과 한계
파서는 중복 정책 속성, 여러 값, implied-policy NULL, malformed 알려진 한정자, 비 ASCII IA5String 값, 잘못된 Unicode, 알려진 다이제스트 길이 불일치, 설정된 구현 한계를 넘는 컬렉션 크기를 거부합니다
PAdES E-EPES는 명시적 정책 속성이 정확히 한 번 있을 것을 요구하고 이 속성이 있을 때 PDF Signature 사전의 /Reason 항목을 금지합니다. CMS 계층은 PDF 사전을 들여다볼 수 없으므로 이 마지막 제약은 PDF를 만드는 워크플로가 강제해야 합니다
CMS 다중 기본 서명자, CMS 다이제스트 알고리즘 일관성, CMS 검증 보고서를 참고하세요