Validarea politicii de semnătură PAdES

HotPDF creează și validează atributul semnat CMS explicit signature-policy-identifier, folosit de semnăturile PAdES E-EPES

Generarea unei politici explicite

Setați SignaturePolicyOID și digestul documentului de politică pe THPDFCMSSignOptions, apoi alegeți calificatori structurați opționali

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 are implicit SHA-256 când rămâne gol, în timp ce SignaturePolicyURI este o scurtătură de compatibilitate pentru un singur calificator SPuri și poate fi combinat cu SignaturePolicyQualifiers

Modelul de calificatori structurați suportă SPuri, SPUserNotice cu o referință de notificare opțională și text explicit, și SPDocSpecification identificat printr-un OID sau URI

Setați SignaturePolicyHashIsUnknown doar când semnatarul nu cunoaște hash-ul politicii; HotPDF emite atunci reprezentarea ETSI de zerouri la lungimea de digest selectată

Parsare și raportare

HPDFParseCMSSignature expune atributul prin THPDFSignatureInfo.SignaturePolicy, inclusiv identificatorul, algoritmul de hash, octeții de hash, indicatorul de hash necunoscut, calificatorii și statusul de validare

Valorile cunoscute de calificatori sunt decodate în câmpuri tipizate, în timp ce un calificator nerecunoscut își păstrează OID-ul și valoarea DER brută, pentru tratare la nivel de aplicație

HPDFSignatureValidationReportToJSON serializa aceleași date de politică și de calificatori, cu un status de validare interpretabil de mașină

Fixarea unei politici obligatorii

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);

Câmpurile de OID și de hash așteptat constrâng doar valoarea corespunzătoare, iar verificarea documentului de politică face hash chiar și unui document intenționat gol când VerifySignaturePolicyDocumentHash este true

Politicile lipsă, nepotrivite, nesuportate sau necunoscute-respinse returnează svSignaturePolicyMismatch și vfcSignaturePolicyMismatch cu un THPDFSignaturePolicyValidationStatus precis

Verificările de politică rulează înainte de lucrul cu furnizorul de semnătură, lanțul de certificate sau dovezile și se aplică doar înregistrărilor primare SignerInfo, astfel încât politica documentului părinte nu constrânge contra-semnăturile

Rigoare și limite

Parser-ul respinge atribute de politică duplicate, valori multiple, NULL de politică implicită, calificatori cunoscuți malformați, valori IA5String non-ASCII, Unicode invalid, lungimi greșite de digeste cunoscute și dimensiuni de colecții peste limitele configurate ale implementării

PAdES E-EPES cere atributul de politică explicită exact o dată și interzice intrarea /Reason din PDF Signature Dictionary când atributul este prezent; stratul CMS nu poate inspecta dicționarul PDF, astfel încât fluxul de lucru care produce PDF-ul trebuie să impună acea constrângere finală

Consultați CMS cu semnături primare multiple, coerența algoritmului de digest CMS și Rapoarte de validare a semnăturilor CMS