THotPDF.ValidatePDFMACChain メソッド
最古の cross-reference セクションからアクティブなリビジョンまで、すべての PDF MAC リビジョンを検証し、リビジョン固有の整合性診断を返します
宣言
function ValidatePDFMACChain(const FileName: TFileName; const Password: AnsiString; out ValidationInfo: THPDFPDFMACChainValidationInfo): boolean; overload;
function ValidatePDFMACChain(const FileName: TFileName; const Password: AnsiString; const Options: THPDFPDFMACOptions; out ValidationInfo: THPDFPDFMACChainValidationInfo): boolean; overload;
検証モデル
- リビジョンインデックスは 0 始まりで、元のリビジョンからアクティブなリビジョンへと順序付けられます
AuthCodeを含む最初のリビジョンが連鎖のアンカーとなり、それ以降のすべてのリビジョンは有効な PDF MAC を含まなければなりません- 各 MAC は、そのリビジョンの対応する
startxrefと%%EOF境界で終わる正確なバイト接頭辞に対して検証されます - バリデーターは、より新しいアクティブリビジョンの MAC が有効でも、置き換えられた履歴 MAC を拒否します
KDFSaltはアンカー以降安定していなければならず、digest 強度は検証済み MAC リビジョン間で低下してはなりません- 認証された
/Pと/Permsの値はリビジョンごとに確認され、PDF MAC 要求の permission ビットも対象です
結果レコード
THPDFPDFMACChainValidationInfo は、RevisionCount、FirstMACRevisionIndex、ValidatedRevisionCount、FailureRevisionIndex、FailureXRefOffset、permission カバー、salt の安定性、digest の単調性、リビジョンごとの THPDFPDFMACRevisionValidation レコードを報告します
THPDFPDFMACChainFailure は、リビジョン境界のエラー、欠落 MAC、無効または置き換えられた MAC、変更された KDFSalt、digest のダウングレード、認証済み permission のダウングレードを区別します
実装はリビジョン連鎖を 1 回列挙し、累積の cross-reference 状態を 1 つ更新します。テンポラリの PDF コピーと反復的なオブジェクトインデックスを避けながら、保護された各リビジョンの独立した暗号学的検証は保たれます
Delphi の例
var
ChainInfo: THPDFPDFMACChainValidationInfo;
begin
if not PDF.ValidatePDFMACChain('authenticated.pdf', 'user-password',
ChainInfo) then
raise Exception.CreateFmt('Revision %d at xref %d failed: %s',
[ChainInfo.FailureRevisionIndex, ChainInfo.FailureXRefOffset,
ChainInfo.Message]);
end;
プリフライト
CreatePreflightReport は同じ結果を PDFMACRevisionChain として公開するため、自動化されたワークフローはアクティブリビジョンの有効性と完全なリビジョン連鎖の有効性を区別できます
アクティブなリビジョンだけを確認すればよい場合は ValidatePDFMAC を、digest ポリシーのセマンティクスについては PDF MAC Algorithm Agility and Policy Profiles を参照してください