ความยืดหยุ่นของอัลกอริทึม PDF MAC และโปรไฟล์นโยบาย
HotPDF สร้างและตรวจค่า PDF MAC แบบ ISO/TS 32004 ทั้งแบบ standalone และแนบกับ signature ได้ ด้วย algorithm digest เอกสารหกตัว และการบังคับนโยบายแบบ fail-closed
สารสกัดเอกสารที่รองรับ
THPDFPDFMACDigestAlgorithm ให้ pmdaSHA256, pmdaSHA384, pmdaSHA512, pmdaSHA3_256, pmdaSHA3_384 กับ pmdaSHA3_512
digest ที่เลือกปกป้อง ByteRange ของ PDF เต็มชุด, integrity information ที่ห่อไว้, algorithm digest ของ CMS และ attribute CMSAlgorithmProtection
authentication แบบ HMAC-SHA-256, การ derive key แบบ HKDF-SHA-256 และ key wrap แบบ AES-256 ถูก fix ไว้ตามรูปแบบ PDF MAC และไม่ถูกเปลี่ยนโดยการเลือก digest ของเอกสาร
โปรไฟล์ในตัว
ข้อกำหนดของ profile ในตัวถูก fix ไว้ อ่อนลงไม่ได้ด้วยการแก้ field ของ record ถ้าแอปต้องการ algorithm การสร้าง, allowlist หรือข้อกำหนดการเข้ารหัสแบบอื่น ให้ใช้ pmppCustom
| Factory | การสร้าง | การตรวจ | การเข้ารหัส |
|---|---|---|---|
Compatibility | SHA-256 | ไดเจสต์ที่รองรับทั้งหก | AES-256 หรือ AES-256-GCM |
Modern | SHA-384 | SHA-384, SHA-512, SHA3-384 หรือ SHA3-512 | AES-256 หรือ AES-256-GCM |
HighAssurance | SHA3-512 | SHA3-512 เท่านั้น | ต้องใช้ AES-256-GCM |
Custom | ผู้เรียกเลือก | บัญชีขาวของผู้เรียก | ผู้เรียกเลือก |
ตัวอย่าง Delphi
uses HPDFDoc, HPDFPDFMAC;
var
Options: THPDFPDFMACOptions;
Info: THPDFPDFMACValidationInfo;
begin
Options := THPDFPDFMACOptions.HighAssurance;
if not PDF.AddStandalonePDFMAC('encrypted.pdf', 'authenticated.pdf',
'user-password', Options) then
raise Exception.Create('PDF MAC creation failed');
if not PDF.ValidatePDFMAC('authenticated.pdf', 'user-password',
Options, Info) then
raise Exception.Create(Info.Message);
end;
การตัดสินใจในการตรวจสอบ
การตรวจจะหา digest ที่เข้ารหัสไว้ก่อน stream ช่วงที่ถูกปกป้อง, ปฏิเสธ algorithm ที่อยู่นอก AllowedDigestAlgorithms และบังคับ RequireAESGCM หลังกู้ file key แบบ authenticated แล้ว
THPDFPDFMACValidationInfo รายงาน DigestAlgorithm, PolicyProfile, PolicyAccepted กับ UsedAESGCM pmsPolicyRejected แยกต่างจากอินพุตผิดรูปหรือ authentication tag ที่ล้ม
สำหรับ /AttachedToSig digest ที่เลือกยังปกป้องค่า signature CMS ดิบผ่าน PdfMacIntegrityInfo.signatureDigest ขณะที่ ValidatePDFMAC ตรวจ AuthCode แบบ direct ที่ใช้งานอยู่, SigObjRef แบบ indirect, การผูก signature field และ revision ที่ถูกลงนามทั้งชุด
ValidatePDFMACChain apply นโยบายที่เลือกกับ revision แบบ incremental ที่ถูกปกป้องทุกตัว, ปฏิเสธการลดความแข็งแกร่งของ digest, บังคับ KDFSalt ที่เสถียรหลัง MAC ตัวแรก และรายงาน revision ที่ล้มพร้อม xref offset แบบเป๊ะ
ดู SignPDFWithPFXAndAttachedPDFMAC สำหรับ workflow ลงนาม PFX แบบ atomic