Алгоритмическая гибкость PDF MAC и профили политики
HotPDF умеет создавать и проверять значения PDF MAC по ISO/TS 32004 — автономные и присоединённые к подписи — с шестью алгоритмами дайджеста документа и политикой с принципом fail-closed
Поддерживаемые дайджесты документа
THPDFPDFMACDigestAlgorithm предоставляет pmdaSHA256, pmdaSHA384, pmdaSHA512, pmdaSHA3_256, pmdaSHA3_384 и pmdaSHA3_512
Выбранный дайджест защищает полный ByteRange PDF, инкапсулированную информацию целостности, алгоритм дайджеста CMS и атрибут CMSAlgorithmProtection
Аутентификация HMAC-SHA-256, выведение ключей HKDF-SHA-256 и key wrap AES-256 жёстко заданы форматом PDF MAC и не меняются выбором дайджеста документа
Встроенные профили
Требования встроенных профилей фиксированы и не могут быть ослаблены изменением полей record; если приложению нужны другой алгоритм генерации, allowlist или требование шифрования, используйте pmppCustom
| Фабрика | Генерация | Валидация | Шифрование |
|---|---|---|---|
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 | Выбирает вызывающий код | Allowlist вызывающего кода | Выбирает вызывающий код |
Пример на 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;
Решения при валидации
Валидация распознаёт закодированный дайджест до потокового чтения защищённых диапазонов, отклоняет алгоритмы вне AllowedDigestAlgorithms и применяет RequireAESGCM после аутентифицированного восстановления файлового ключа
THPDFPDFMACValidationInfo сообщает DigestAlgorithm, PolicyProfile, PolicyAccepted и UsedAESGCM; pmsPolicyRejected отделён от повреждённого входа или не совпавшего тега аутентификации
Для /AttachedToSig выбранный дайджест также защищает исходное значение подписи CMS через PdfMacIntegrityInfo.signatureDigest, а ValidatePDFMAC проверяет активный прямой AuthCode, непрямой SigObjRef, привязку поля подписи и полную подписанную ревизию
ValidatePDFMACChain применяет выбранную политику к каждой защищённой инкрементальной ревизии, отклоняет понижение силы дайджеста, требует стабильного KDFSalt после первого MAC и сообщает точную ревизию и смещение xref, где произошёл отказ
Атомарный workflow подписания PFX описан в SignPDFWithPFXAndAttachedPDFMAC