PDFiumPas piše ISO/TS 32003 enkripciju kroz SaveAsEncrypted: postavite Revision na erR7 i svaka niska i tok se štite AES-256 u GCM režimu, autentifikovanom šifrom koju je PDF 2.0 dobio 2023. godine. Postavite i EnableIntegrityProtection i dokument takođe nosi samostalan PDF MAC token, koji ValidatePdfMac proverava na strani čitanja
To su dve različite zaštite koje ljudi redovno mešaju. GCM autentifikuje svaku šifrovanu vrednost. MAC autentifikuje dokument kao celinu. Želite obe, iz različitih razloga
Šta GCM dodaje što CBC nikada nije pružao?
Autentifikaciju šifrata. AES-256 u CBC režimu, šema AESV3 u ISO 32000-2, čuva sadržaj poverljivim, ali ne kaže ništa o tome da li je stigao neizmenjen. CBC je podložan izmenama (malleable) na specifične, dobro proučene načine: napadač koji može da izmeni bitove u šifratu proizvodi predvidljive promene u čistom tekstu sledećeg bloka, a ništa u formatu to ne primećuje
GCM zatvara tu prazninu. Svaka šifrovana vrednost nosi oznaku autentifikacije od 16 bajtova, u potpunosti serijalizovanu kako to zahteva ISO/TS 32003, a dešifrovanje ne uspeva umesto da vrati izmenjen čist tekst kada se oznaka ne poklapa. U PDF terminima, izmenjena niska ili tok u AESV4 dokumentu je oštra greška u trenutku upotrebe, a ne čudna vrednost koja se širi kroz vašu aplikaciju. Rečnik Encrypt ovo obeležava sa /CFM /AESV4 i V 6 / R 7, zajedno sa unosom proširenja koji deklariše /ExtensionLevel 32003 i /ExtensionRevision (:2023)
Tri revizije, tri ekosistema
TPdfEncryptionRevision nudi erR5, erR6 i erR7, a izbor je pre svega odluka o kompatibilnosti, a tek onda kriptografska odluka. R5 je originalna AES-256 šema objavljena kao proširenje za PDF 1.7, sa jednim SHA-256 hešom lozinke, i otvara se u suštini u svemu iz poslednjih petnaest godina. R6 je ojačano izvođenje ključa standardizovano u ISO 32000-2, koje koristi iterativnu konstrukciju SHA-256/384/512 algoritma 2.B, i to je ono što očekuje trenutni PDF 2.0 ili PDF/A-4 radni tok. R7 je ISO/TS 32003, koji koristi isto izvođenje 2.B sa AES-GCM kao šifrom
Podrška čitača ide tačno tim redosledom, a podrška za R7 je i dalje slaba van trenutnih glavnih pregledača. Ovo je isti kompromis koji vlada svakom PDF 2.0 funkcijom: najnovija opcija je najbolji inženjering i najuži auditorijum. Odlučite prema tome ko treba da otvori fajl, a ako je taj odgovor „sistem za evidenciju koji niko nije ažurirao od 2019.”, odgovor je R5, bez obzira na to šta bezbednosna 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; // samostalan 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 povrh autentifikovane šifre?
Zato što GCM oznake štite vrednosti, ne raspored vrednosti. Svaka niska i tok u AESV4 dokumentu su pojedinačno autentifikovani, a ipak su tabela unakrsnih referenci, numeracija objekata i trailer struktura, a ne šifrovan sadržaj. Napadač ne može da falsifikuje tok, ali ga ništa u samoj šifri ne sprečava da preuredi na koje objekte dokument pokazuje, ili da spoji objekte iz ranije revizije istog fajla
Samostalan PDF MAC token adresira taj sloj. PDFiumPas ga izvodi iz ključa enkripcije fajla pomoću posvećenog 32-bajtnog /KDFSalt zabeleženog u rečniku Encrypt, tako da posedovanje lozinke omogućava čitaču da potvrdi token. Rezultat je jedinstven odgovor na jedno pitanje: da li je ovaj dokument, kao celina, isti 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); // nema tokena u ovom fajlu
pmvsInvalid: Quarantine(Mac.MessageText); // izmenjen ili skraćen
pmvsUnsupported: RouteForManualReview(Mac.MessageText);
end;
finally
Pdf.Free;
end;
end;
Četiri statusne vrednosti zahtevaju četiri različita odgovora, a njihovo svođenje na boolean gubi razliku koja je bitna. pmvsNotPresent znači da fajl jednostavno nema token, što opisuje gotovo svaki šifrovan PDF napisan pre 2024. godine i nije dokaz ni o čemu. pmvsInvalid znači da je token prisutan, ali se ne verifikuje, što je pravi nalaz i trebalo bi da zaustavi obradu. pmvsUnsupported znači da token postoji u obliku koji ovaj build ne implementira, što je praznina u kompatibilnosti, a ne napad. Tretiranje „nije prisutan” kao „nevažeći” karantiniralo bi vam čitav postojeći katalog već prvog dana
Šta enkripcija i dalje ne radi
Zastavice dozvola ostaju ono što su oduvek bile: zahtev prema usaglašenom softveru, a ne kontrola. Bitovi /P iz Tabele 22 ISO 32000-1, koji zabranjuju štampanje ili izvlačenje, poštuju dobronamerni pregledači, a ignoriše sve ostalo, a svako ko drži korisničku lozinku već drži dešifrovan sadržaj. Enkripcija je granica; dozvole opisuju nameru unutar te granice
Dva operativna detalja vredi isplanirati unapred. Prvo, enkripcija i kasnija izmena međusobno deluju: dodavanje inkrementalnog ažuriranja na šifrovan dokument ima sopstvena pravila, pokrivena u inkrementalnim ažuriranjima na šifrovanim PDF-ovima, a MAC token je tvrdnja na nivou dokumenta koju će nepažljivo dodavanje poništiti. Drugo, GCM konstrukcija koristi deterministički brojač IV-a, a PDFiumPas izaziva izuzetak umesto da ponovo koristi vrednost brojača ako bi taj prostor ikada bio iscrpljen, jer je ponovna upotreba nonce-a u GCM-u katastrofalna na način koji bi tiho preklapanje sakrilo
Izbor između tri revizije u praksi
Zapišite ko otvara fajl, a zatim birajte. Za internu distribuciju gde je svaki čitač trenutni pregledač pod vašom kontrolom, R7 sa zaštitom integriteta je najsnažnija dostupna opcija i nema razloga da je ne koristite. Za dokumente koji napuštaju organizaciju, R6 je odbranjiva podrazumevana vrednost: standardizovan je u ISO 32000-2, a ne u tehničkoj specifikaciji povrh njega, a podrška je široka. Za arhive i zastarele potrošače, R5 je jedini izbor koji se pouzdano otvara, a razlog za to trebalo bi da zabeležite na istom mestu gde beležite i ostatak svoje politike čuvanja
Šta god da izaberete, proverite izlaz umesto da verujete da je poziv uspeo. Ponovo otvorite šifrovan fajl, proverite ValidatePdfMac, i potvrdite da je deklarisana verzija ona koju očekujete, koristeći provere usaglašenosti verzije u tačnoj usaglašenosti PDF verzije. Šira kontrolna lista prijema za nepouzdane dokumente nalazi se u reviziji bezbednosnih rizika PDF-a
PDFiumPas je Delphi i Lazarus komponenta oko PDFium mehanizma sa PDF 2.0 slojem enkripcije implementiranim izvorno u Pascal-u, tako da AES-256, GCM i MAC token ne zahtevaju spoljni kripto DLL. API za enkripciju dokumentovan je na stranici PDFium Delphi komponente