Xác thực chính sách chữ ký PAdES

HotPDF tạo và xác thực thuộc tính đã ký signature-policy-identifier của CMS mà chữ ký PAdES E-EPES sử dụng

Tạo chính sách tường minh

Đặt SignaturePolicyOID cùng digest của tài liệu chính sách trong THPDFCMSSignOptions, rồi chọn các qualifier có cấu trúc tùy chọn

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 mặc định là SHA-256 khi để trống, còn SignaturePolicyURI vẫn là đường tắt tương thích cho một qualifier SPuri và có thể kết hợp với SignaturePolicyQualifiers

Mô hình qualifier có cấu trúc hỗ trợ SPuri, SPUserNotice kèm notice reference và explicit text tùy chọn, cùng SPDocSpecification được nhận dạng bằng OID hoặc URI

Chỉ đặt SignaturePolicyHashIsUnknown khi người ký không biết hash của chính sách; khi đó HotPDF phát biểu diễn all-zero của ETSI theo độ dài digest đã chọn

Phân tích và báo cáo

HPDFParseCMSSignature phơi bày thuộc tính này qua THPDFSignatureInfo.SignaturePolicy, bao gồm định danh, thuật toán hash, byte hash, cờ hash không xác định, các qualifier và trạng thái xác thực

Giá trị qualifier đã biết được giải mã thành các trường có kiểu, còn qualifier không nhận dạng được giữ nguyên OID và giá trị DER thô để tầng ứng dụng tự xử lý

HPDFSignatureValidationReportToJSON tuần tự hóa đúng dữ liệu chính sách và qualifier đó kèm trạng thái xác thực ở dạng máy đọc được

Khóa chặt chính sách bắt buộc

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ác trường OID và hash mong đợi chỉ ràng buộc giá trị tương ứng, và việc kiểm tra tài liệu chính sách sẽ hash cả một tài liệu rỗng có chủ ý khi VerifySignaturePolicyDocumentHash bật

Chính sách bị thiếu, không khớp, không được hỗ trợ, hoặc hash không xác định bị từ chối sẽ trả về svSignaturePolicyMismatch và vfcSignaturePolicyMismatch kèm THPDFSignaturePolicyValidationStatus chính xác

Việc kiểm tra chính sách chạy trước công việc của signature-provider, đường dẫn chứng thư và bằng chứng, và chỉ áp dụng cho bản ghi SignerInfo chính, nên chính sách của tài liệu cha không ràng buộc chữ ký lồng

Độ nghiêm ngặt và giới hạn

Trình phân tích từ chối thuộc tính chính sách trùng lặp, nhiều giá trị, NULL của implied-policy, qualifier đã biết sai định dạng, giá trị IA5String ngoài ASCII, Unicode không hợp lệ, độ dài digest đã biết không đúng, và kích thước collection vượt giới hạn cài đặt đã cấu hình

PAdES E-EPES yêu cầu thuộc tính chính sách tường minh xuất hiện đúng một lần và cấm mục /Reason trong PDF Signature Dictionary khi thuộc tính đó có mặt; tầng CMS không đọc được từ điển PDF, nên quy trình tạo PDF phải tự thực thi ràng buộc cuối cùng này

Xem Nhiều người ký chính trong CMS, Tính nhất quán thuật toán digest trong CMS, và Báo cáo xác thực CMS