Επαλήθευση πολιτικής υπογραφής PAdES

Το HotPDF δημιουργεί και επαληθεύει το ρητό signed attribute CMS signature-policy-identifier που χρησιμοποιούν οι υπογραφές PAdES E-EPES

Δημιουργία ρητής πολιτικής

Ορίστε το SignaturePolicyOID και το digest του εγγράφου πολιτικής στο THPDFCMSSignOptions και έπειτα επιλέξτε προαιρετικά δομημένα qualifiers

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 παραμένει μια συμβατική συντόμευση για ένα μοναδικό qualifier SPuri και μπορεί να συνδυαστεί με το SignaturePolicyQualifiers

Το δομημένο μοντέλο qualifiers υποστηρίζει το SPuri, το SPUserNotice με προαιρετική αναφορά ανακοίνωσης και ρητό κείμενο, καθώς και το SPDocSpecification που ταυτοποιείται μέσω OID ή URI

Ορίστε το SignaturePolicyHashIsUnknown μόνο όταν ο υπογράφων δεν γνωρίζει το hash της πολιτικής· σε αυτή την περίπτωση το HotPDF εκπέμπει την αναπαράσταση όλων των μηδενικών της ETSI στο επιλεγμένο μήκος digest

Ανάλυση και αναφορά

Η HPDFParseCMSSignature εκθέτει το attribute μέσω του THPDFSignatureInfo.SignaturePolicy, συμπεριλαμβανομένου του αναγνωριστικού, του αλγορίθμου hash, των bytes του hash, της σημαίας άγνωστου hash, των qualifiers και της κατάστασης επαλήθευσης

Γνωστές τιμές qualifiers αποκωδικοποιούνται σε τυποποιημένα πεδία, ενώ ένα μη αναγνωρισμένο qualifier διατηρεί το OID και το ωμό DER της τιμής του για χειρισμό σε επίπεδο εφαρμογής

Η HPDFSignatureValidationReportToJSON σειριοποιεί τα ίδια δεδομένα πολιτικής και qualifiers με μια αναγνώσιμη από μηχανή κατάσταση επαλήθευσης

Δέσμευση σε απαιτούμενη πολιτική

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 και hash περιορίζουν μόνο την αντίστοιχη τιμή, και η επαλήθευση εγγράφου πολιτικής υπολογίζει hash ακόμα και για σκόπιμα κενό έγγραφο όταν το VerifySignaturePolicyDocumentHash είναι αληθές

Απούσες, μη συμβαδίζουσες, μη υποστηριζόμενες ή απορριφθείσες άγνωστες πολιτικές επιστρέφουν svSignaturePolicyMismatch και vfcSignaturePolicyMismatch με ένα ακριβές THPDFSignaturePolicyValidationStatus

Οι έλεγχοι πολιτικής εκτελούνται πριν από την εργασία του παρόχου υπογραφής, του μονοπατιού πιστοποιητικών ή των αποδεικτικών στοιχείων και εφαρμόζονται μόνο σε πρωτεύουσες εγγραφές SignerInfo, ώστε η πολιτική ενός γονικού εγγράφου να μη δεσμεύει τις αντιυπογραφές

Αυστηρότητα και όρια

Ο parser απορρίπτει διπλότυπα attributes πολιτικής, πολλαπλές τιμές, NULL σιωπηρής πολιτικής, εσφαλμένα δομημένα γνωστά qualifiers, μη ASCII τιμές IA5String, μη έγκυρο Unicode, λανθασμένα γνωστά μήκη digest και μεγέθη συλλογών άνω των ρυθμισμένων ορίων υλοποίησης

Το PAdES E-EPES απαιτεί το ρητό attribute πολιτικής ακριβώς μία φορά και απαγορεύει την καταχώρηση /Reason του PDF Signature Dictionary όταν το attribute αυτό παρίσταται· το επίπεδο CMS δεν μπορεί να επιθεωρήσει το PDF dictionary, οπότε η ροή εργασίας που παράγει το PDF πρέπει να επιβάλει αυτόν τον τελευταίο περιορισμό

Δείτε Πολλαπλοί πρωτεύοντες υπογράφοντες CMS, Συνέπεια αλγορίθμου digest CMS και Αναφορές επαλήθευσης CMS