PDFiumPas zapisuje ISO/TS 32003 enkripciju kroz SaveAsEncrypted: postavite Revision na erR7 i svaki niz i tok bit će zaštićeni AES-256 algoritmom u GCM načinu rada, autenticiranoj šifri koju je PDF 2.0 dobio 2023. godine. Postavite i EnableIntegrityProtection pa dokument nosi i samostalan PDF MAC token, koji ValidatePdfMac provjerava na strani čitanja
To su dvije različite zaštite koje se rutinski poistovjećuju. GCM autenticira svaku šifriranu vrijednost. MAC autenticira dokument kao cjelinu. Želite obje, iz različitih razloga
Što GCM dodaje, a CBC nikad nije pružao?
Autentikaciju šifriranog teksta. AES-256 u CBC načinu rada, shema AESV3 iz ISO 32000-2, čuva sadržaj povjerljivim, ali ne govori ništa o tome je li stigao nepromijenjen. CBC dopušta manipulaciju na specifične, dobro proučene načine: napadač koji može promijeniti bitove u šifriranom tekstu proizvodi predvidljive promjene u čistom tekstu sljedećeg bloka, a ništa u formatu to ne primjećuje
GCM to zatvara. Svaka šifrirana vrijednost nosi 16-bajtnu autentikacijsku oznaku, u potpunosti serijaliziranu kako to zahtijeva ISO/TS 32003, a dešifriranje ne uspijeva umjesto da vrati izmijenjen čisti tekst kada se oznaka ne podudara. U PDF terminima, izmijenjen niz ili tok u AESV4 dokumentu je tvrda pogreška u trenutku korištenja, a ne čudna vrijednost koja se proširi u vašu aplikaciju. Rječnik Encrypt to označava s /CFM /AESV4 i V 6 / R 7, uz stavku proširenja koja deklarira /ExtensionLevel 32003 i /ExtensionRevision (:2023)
Tri revizije, tri ekosustava
TPdfEncryptionRevision nudi erR5, erR6 i erR7, a izbor je više odluka o kompatibilnosti nego kriptografska odluka. R5 je izvorna AES-256 shema objavljena kao proširenje za PDF 1.7, s jednim SHA-256 sažetkom lozinke, i otvara se u praktički svemu iz posljednjih petnaest godina. R6 je ojačano izvođenje ključa standardizirano u ISO 32000-2, koje koristi iterirajuću SHA-256/384/512 konstrukciju algoritma 2.B, i to je ono što očekuje suvremeni tijek rada s PDF 2.0 ili PDF/A-4. R7 je ISO/TS 32003, koji koristi istu 2.B derivaciju, ali s AES-GCM kao šifrom
Podrška preglednika ide točno tim redoslijedom, a podrška za R7 još je uvijek slaba izvan trenutnih glavnih preglednika. Riječ je o istom kompromisu koji vrijedi za svaku značajku PDF-a 2.0: najnovija je opcija najbolje inženjerstvo, ali i najuža publika. Odlučite prema tome tko mora otvoriti datoteku, a ako je odgovor „sustav za evidenciju koji nitko nije ažurirao od 2019.”, odgovor je R5, bez obzira na to što sigurnosna politika preferira
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; // samostalni PDF MAC token
if not Pdf.SaveAsEncrypted('quarterly-report.enc.pdf', Opts) then
raise Exception.Create('Encrypted save failed');
finally
Pdf.Free;
end;
end;
Zašto MAC dokumenta uz autenticiranu šifru?
Zato što GCM oznake štite vrijednosti, a ne raspored tih vrijednosti. Svaki niz i tok u AESV4 dokumentu autenticiran je pojedinačno, no tablica unakrsnih referenci, numeriranje objekata i trailer su struktura, a ne šifrirani sadržaj. Napadač ne može krivotvoriti tok, ali ga sama šifra ništa ne sprječava da preslaže na koje objekte dokument pokazuje, ili da umetne objekte iz ranije revizije iste datoteke
Samostalni PDF MAC token bavi se upravo tim slojem. PDFiumPas ga izvodi iz ključa enkripcije datoteke pomoću posebne 32-bajtne vrijednosti /KDFSalt zapisane u rječniku Encrypt, tako da posjedovanje lozinke omogućuje čitaču da potvrdi token. Rezultat je jedan odgovor na jedno pitanje: je li ovaj dokument, kao cjelina, dokument koji je napisan
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); // u ovoj datoteci nema tokena
pmvsInvalid: Quarantine(Mac.MessageText); // izmijenjeno ili skraćeno
pmvsUnsupported: RouteForManualReview(Mac.MessageText);
end;
finally
Pdf.Free;
end;
end;
Četiri statusne vrijednosti zahtijevaju četiri različita odgovora, a svođenje na boolean gubi razliku koja je bitna. pmvsNotPresent znači da datoteka jednostavno nema token, što opisuje gotovo svaki šifrirani PDF napisan prije 2024. i nije dokaz ničega. pmvsInvalid znači da je token prisutan, ali se ne provjerava uspješno, što je istinski nalaz i trebao bi zaustaviti obradu. pmvsUnsupported znači da token postoji u obliku koji ova verzija ne implementira, što je jaz u kompatibilnosti, a ne napad. Tretiranje „nije prisutno” kao „nevažeće” stavilo bi cijeli vaš postojeći arhiv u karantenu već prvog dana
Što enkripcija i dalje ne radi
Zastavice dopuštenja ostaju ono što su oduvijek bile: zahtjev upućen usklađenom softveru, a ne kontrola. Bitove /P iz tablice 22 standarda ISO 32000-1 koji zabranjuju ispis ili izdvajanje poštuju pristojni preglednici, a sve ostalo ih ignorira, a svatko tko posjeduje korisničku lozinku već posjeduje dešifrirani sadržaj. Enkripcija je granica; dopuštenja unutar nje opisuju namjeru
Dvije operativne pojedinosti vrijedi unaprijed planirati. Prvo, enkripcija i kasnija izmjena međusobno djeluju: dodavanje inkrementalnog ažuriranja šifriranom dokumentu ima vlastita pravila, obrađena u članku inkrementalna ažuriranja na šifriranim PDF-ovima, a MAC token je izjava na razini dokumenta koju će nepažljivo dodavanje poništiti. Drugo, GCM konstrukcija koristi deterministički brojač IV vrijednosti, a PDFiumPas radije izaziva iznimku nego što ponovno koristi vrijednost brojača ako bi taj prostor ikada bio iscrpljen, jer je ponovna upotreba nonce vrijednosti u GCM-u katastrofalna na način koji bi tihi prijelaz preko granice sakrio
Odabir između tri revizije u praksi
Zapišite tko otvara datoteku, a zatim birajte. Za internu distribuciju gdje je svaki čitač trenutni preglednik pod vašom kontrolom, R7 s zaštitom integriteta najjača je dostupna opcija i nema razloga da je ne koristite. Za dokumente koji napuštaju organizaciju, R6 je opravdana zadana vrijednost: standardiziran je u ISO 32000-2, a ne u tehničkoj specifikaciji koja nadograđuje taj standard, a podrška je široka. Za arhive i naslijeđene potrošače, R5 je jedini izbor koji se pouzdano otvara, i trebali biste zabilježiti zašto na istom mjestu gdje bilježite ostatak svoje politike čuvanja
Što god odabrali, provjerite izlaz umjesto da vjerujete da je poziv uspio. Ponovno otvorite šifriranu datoteku, provjerite ValidatePdfMac i potvrdite da je deklarirana verzija ona koju očekujete, koristeći provjere sukladnosti verzije opisane u članku točna sukladnost verzije PDF-a. Širi popis za provjeru nepouzdanih dokumenata nalazi se u članku revizija sigurnosnih rizika PDF-a
PDFiumPas je Delphi i Lazarus komponenta izgrađena oko PDFium engine-a, sa slojem enkripcije za PDF 2.0 implementiranim izvorno u Pascalu, tako da AES-256, GCM i MAC token ne trebaju vanjski kriptografski DLL. API za enkripciju dokumentiran je na stranici PDFium Delphi komponente