PDFiumPas skriver ISO/TS 32003-kryptering gjennom SaveAsEncrypted: sett Revision til erR7, og hver streng og strøm beskyttes med AES-256 i GCM-modus, den autentiserte chifferen PDF 2.0 fikk i 2023. Sett også EnableIntegrityProtection, og dokumentet bærer også et frittstående PDF MAC-token, som ValidatePdfMac sjekker på lesesiden
Dette er to forskjellige beskyttelser folk rutinemessig blander sammen. GCM autentiserer hver krypterte verdi. MAC-en autentiserer dokumentet som helhet. Du vil ha begge, av ulike grunner
Hva gir GCM som CBC aldri leverte?
Autentisering av chifferteksten. AES-256 i CBC-modus, AESV3-skjemaet i ISO 32000-2, holder innholdet konfidensielt og sier ingenting om hvorvidt det ankom uendret. CBC er formbar på spesifikke, velstuderte måter: en angriper som kan vende bit i chifferteksten, produserer forutsigbare endringer i klarteksten til den påfølgende blokken, og ingenting i formatet legger merke til det
GCM lukker det hullet. Hver krypterte verdi bærer en 16-byte autentiseringstagg, fullstendig serialisert slik ISO/TS 32003 krever, og dekryptering feiler fremfor å returnere endret klartekst når taggen ikke stemmer. I PDF-termer er en tuklet streng eller strøm i et AESV4-dokument en hard feil på bruksstedet, ikke en merkelig verdi som forplanter seg inn i applikasjonen din. Encrypt-ordboken markerer dette med /CFM /AESV4 og V 6 / R 7, sammen med en utvidelsesoppføring som erklærer /ExtensionLevel 32003 og /ExtensionRevision (:2023)
Tre revisjoner, tre økosystemer
TPdfEncryptionRevision tilbyr erR5, erR6 og erR7, og valget er mer en kompatibilitetsbeslutning enn en kryptografisk en. R5 er det opprinnelige AES-256-skjemaet publisert som en PDF 1.7-utvidelse, med en enkelt SHA-256-passordhash, og det åpnes i så godt som alt fra de siste femten årene. R6 er den herdede nøkkelutledningen standardisert i ISO 32000-2, som bruker den itererende SHA-256/384/512-konstruksjonen fra algoritme 2.B, og det er det en gjeldende PDF 2.0- eller PDF/A-4-arbeidsflyt forventer. R7 er ISO/TS 32003, som bruker den samme 2.B-utledningen med AES-GCM som chifferen
Leserstøtte følger nøyaktig den rekkefølgen, og R7-støtte er fortsatt tynn utenfor dagens mest brukte visere. Dette er samme avveining som styrer enhver PDF 2.0-funksjon: det nyeste alternativet er den beste ingeniørkunsten og det smaleste publikummet. Bestem ut fra hvem som skal åpne filen, og hvis svaret er «et arkivsystem ingen har oppdatert siden 2019», er svaret R5 uansett hva sikkerhetspolicyen foretrekker
uses
PDFium, FPdfEncrypt;
var
Pdf: TPdf;
Opts: TPdfEncryptOptions;
begin
Pdf := TPdf.Create(nil);
try
Pdf.FileName := 'quarterly-report.pdf';
Pdf.LoadDocument;
Opts := TPdfEncryptOptions.Default;
Opts.UserPassword := 'open-secret';
Opts.OwnerPassword := 'admin-secret';
Opts.EncryptMetadata := True;
Opts.Revision := erR7; // ISO/TS 32003 AESV4-GCM
Opts.EnableIntegrityProtection := True; // frittstående PDF MAC-token
if not Pdf.SaveAsEncrypted('quarterly-report.enc.pdf', Opts) then
raise Exception.Create('Encrypted save failed');
finally
Pdf.Free;
end;
end;
Hvorfor en dokument-MAC på toppen av en autentisert chiffer?
Fordi GCM-tagger beskytter verdiene, ikke arrangementet av verdiene. Hver streng og strøm i et AESV4-dokument er individuelt autentisert, men kryssreferansetabellen, objektnummereringen og avslutningen er struktur, ikke kryptert innhold. En angriper kan ikke forfalske en strøm, men ingenting i chifferen alene hindrer dem i å omorganisere hvilke objekter dokumentet peker på, eller splice inn objekter fra en tidligere revisjon av samme fil
Det frittstående PDF MAC-tokenet adresserer det laget. PDFiumPas utleder det fra filkrypteringsnøkkelen med en dedikert 32-byte /KDFSalt registrert i Encrypt-ordboken, slik at det er besittelse av passordet som lar en leser bekrefte tokenet. Resultatet er ett enkelt svar på ett enkelt spørsmål: er dette dokumentet, som helhet, dokumentet som ble skrevet
var
Pdf: TPdf;
Mac: TPdfMacValidationResult;
begin
Pdf := TPdf.Create(nil);
try
Pdf.Password := 'open-secret';
Pdf.FileName := 'quarterly-report.enc.pdf';
Pdf.LoadDocument;
Mac := Pdf.ValidatePdfMac('open-secret');
case Mac.Status of
pmvsValid: ProcessDocument(Pdf);
pmvsNotPresent: ProcessWithWarning(Pdf); // no token in this file
pmvsInvalid: Quarantine(Mac.MessageText); // tampered or truncated
pmvsUnsupported: RouteForManualReview(Mac.MessageText);
end;
finally
Pdf.Free;
end;
end;
De fire statusverdiene trenger fire forskjellige responser, og å slå dem sammen til en boolsk verdi mister skillet som betyr noe. pmvsNotPresent betyr at filen rett og slett ikke har noe token, noe som beskriver nesten hver eneste krypterte PDF skrevet før 2024, og er ikke bevis på noe som helst. pmvsInvalid betyr at et token er til stede og ikke verifiserer, som er et reelt funn og bør stoppe prosesseringen. pmvsUnsupported betyr at tokenet finnes i en form dette bygget ikke implementerer, som er et kompatibilitetsgap, ikke et angrep. Å behandle «ikke til stede» som «ugyldig» ville satt hele det gamle arkivet ditt i karantene på dag én
Hva kryptering fortsatt ikke gjør
Tillatelsesflagg forblir det de alltid har vært: en forespørsel til konform programvare, ikke en kontroll. /P-bitene fra ISO 32000-1 tabell 22 som forbyr utskrift eller uttrekking, respekteres av veloppdragne visere og ignoreres av alt annet, og alle som har brukerpassordet, har allerede det dekrypterte innholdet. Kryptering er grensen; tillatelser beskriver intensjonen innenfor den
To driftsdetaljer er verdt å planlegge for. Først, kryptering og senere endring samvirker: å legge til en inkrementell oppdatering på et kryptert dokument har sine egne regler, dekket i inkrementelle oppdateringer på krypterte PDF-er, og et MAC-token er en påstand på dokumentnivå som en uforsiktig tillegging vil ugyldiggjøre. Deretter, GCM-konstruksjonen bruker en deterministisk IV-teller, og PDFiumPas kaster et unntak fremfor å gjenbruke en tellerverdi hvis det rommet noen gang ble uttømt, fordi gjenbruk av nonce i GCM er katastrofalt på en måte en stille rundgang ville skjult
Å velge mellom de tre revisjonene i praksis
Skriv ned hvem som skal åpne filen, og velg deretter. For intern distribusjon der hver leser er en gjeldende viser under din kontroll, er R7 med integritetsbeskyttelse det sterkeste tilgjengelige alternativet, og det er ingen grunn til å ikke bruke det. For dokumenter som forlater organisasjonen, er R6 det forsvarlige standardvalget: det er standardisert i ISO 32000-2 fremfor i en teknisk spesifikasjon på toppen av den, og støtten er bred. For arkiver og gamle konsumenter er R5 det eneste valget som pålitelig åpnes, og du bør notere hvorfor på samme sted du noterer resten av oppbevaringspolicyen din
Uansett hva du velger, verifiser utdataen fremfor å stole på at kallet lyktes. Åpne den krypterte filen på nytt, sjekk ValidatePdfMac, og bekreft at den erklærte versjonen er det du forventer, ved å bruke versjonskonformitetssjekkene i eksakt PDF-versjonskonformitet. En bredere mottakssjekkliste for utiltrodde dokumenter finnes i revisjon av PDF-sikkerhetsrisikoer
PDFiumPas er en komponent for Delphi og Lazarus bygget rundt PDFium-motoren, med PDF 2.0-krypteringsstakken implementert nativt i Pascal, slik at AES-256, GCM og MAC-tokenet ikke trenger noen ekstern krypto-DLL. Krypterings-API-et er dokumentert på PDFium sin side for Delphi-komponent