Przejdź do głównej zawartości
getnextpdf.com

Jak naprawdę działa szyfrowanie PDF — i jego granice

Spec: ISO 32000-2, §7.6

Szyfrowanie PDF miesza słowa i obrazy wewnątrz dokumentu, tak by mógł je odczytać tylko ktoś z właściwym hasłem. To prawdziwa kryptografia i jest dobra w jedynym zadaniu, które ma. Jest też powszechnie źle rozumiana, ponieważ ta sama funkcja niesie drugi mechanizm — flagi uprawnień — który wygląda jak blokada, a nią nie jest.

Ta strona rozdziela te dwie rzeczy. Wyjaśnia, co naprawdę chroni AES-256, do czego naprawdę służą dwa hasła i gdzie leży uczciwa granica.

Ludzie sięgają po szyfrowanie, gdy dokument jest wrażliwy: umowa, pasek wypłaty, list lekarski. Oczekiwanie jest rozsądne — zachowaj to w tajemnicy i powstrzymaj ludzi przed drukowaniem lub kopiowaniem. PDF spełnia pierwszą połowę tego życzenia przekonująco, a drugą tylko na zasadzie zaufania.

Pomylenie tych dwóch rzeczy to miejsce, gdzie spada koszt. Zespół oznacza plik „bez kopiowania”, ufa, że platforma to egzekwuje, i wysyła. Miesiące później ktoś kopiuje tekst w trzydzieści sekund w innym czytniku, a założenie, które nigdy się nie trzymało, po cichu zamienia się w wyciek. Szyfrowanie nigdy nie zostało złamane. Po prostu poproszono je o zrobienie czegoś, czego nie robi.

  • Szyfrowanie chroni poufność. Z AES-256 zawartość ciągów znaków i strumieni PDF to prawdziwy szyfrogram. Bez klucza jest nieczytelna.
  • Hasło użytkownika otwiera dokument. Podaj je, a możesz zobaczyć treść. Bez niego nie ma czego czytać.
  • Hasło właściciela rządzi uprawnieniami. To klucz „pełnych praw”. Flagi uprawnień, których strzeże — drukowanie, kopiowanie, modyfikowanie — są zapisane wewnątrz zaszyfrowanego dokumentu.
  • Flagi uprawnień zależą od współpracy czytnika. To prośba do dobrze zachowującego się czytnika, a nie egzekwowanie. Czytnik, który je ignoruje, może i tak drukować, kopiować lub edytować.
  • Struktura pozostaje widoczna. Szyfrowanie ukrywa treść, a nie szkielet dokumentu — liczba stron i układ obiektów nie są tajemnicą.

Szyfrowanie PDF jest zdefiniowane przez Spec: ISO 32000-2, §7.6. Model jest precyzyjny: procedura obsługi zabezpieczeń wyprowadza klucz szyfrowania pliku z hasła, ciągi znaków i strumienie dokumentu są szyfrowane tym kluczem, a słownik szyfrowania — wskazywany z trailera pliku — zapisuje, którego szyfru użyto, jak długi jest klucz i które uprawnienia autor zadeklarował.

Nowoczesnym, zalecanym szyfrem jest AES z kluczem 256-bitowym. Gdy szyfrujesz PDF w ten sposób, czytelny ładunek — tekst, który wyciągnąłbyś, bajty obrazu, dane czcionki — jest przekształcany w szyfrogram. Zewnętrzny kształt dokumentu pozostaje czytelny z założenia: czytnik musi znaleźć słownik szyfrowania i poznać długość klucza, zanim poprosi Cię o hasło. Dlatego szyfrowanie najlepiej rozumieć jako poufność treści, a nie nieprzejrzystość całego pliku.

Dwa hasła leżą w różnych warstwach, a to rozróżnienie jest częścią najbardziej wartą zrozumienia.

  1. A password is suppliedEither the user password (open) or the owner password (full rights).
  2. The security handler derives the keyISO 32000-2 §7.6.4 turns the password into the file encryption key.
  3. Content is decryptedAES-256 turns the encrypted strings and streams back into readable bytes.
  4. Permissions are consultedThe owner key grants all rights; the user key is bound by the declared permission flags — if the reader chooses to honour them.
Jak hasło staje się czytelną treścią: hasło użytkownika (lub hasło właściciela) przechodzi przez procedurę wyprowadzania klucza standardowej procedury obsługi zabezpieczeń, aby odzyskać klucz szyfrowania pliku, który następnie odszyfrowuje ciągi znaków i strumienie dokumentu. Hasło właściciela dodatkowo odblokowuje pełen zestaw uprawnień; hasło użytkownika jest związane tym, jakie flagi uprawnień zadeklarował autor.

Hasło użytkownika to hasło otwierające. Odpowiada na jedno pytanie: czy w ogóle możesz zobaczyć treść? Bez hasła użytkownika nie ma czytelnego dokumentu — ta część jest egzekwowana kryptograficznie, ponieważ bez wyprowadzonego klucza nie ma czego odszyfrować.

Hasło właściciela to hasło uprawnień. Plik może otworzyć ktokolwiek (bez hasła użytkownika), a mimo to deklarować hasło właściciela, które bramkuje działania „pełnych praw” — drukowanie w wysokiej rozdzielczości, kopiowanie tekstu, modyfikowanie pliku. Co istotne, bity uprawnień chronione hasłem właściciela są chronione pod kątem integralności przez standardową procedurę obsługi zabezpieczeń: manipulowanie nimi jest wykrywane i odrzucane przez zgodny czytnik, ponieważ procedura wiąże zadeklarowane uprawnienia z kluczami szyfrowania. Bity nie są dosłownie nieczytelnymi ani nieedytowalnymi bajtami — atakujący może je zmienić — ale zmieniona kopia nie przejdzie weryfikacji, więc zgodny czytnik traktuje ją jako uszkodzoną. Są tamper-evident. Po prostu nie są samoegzekwujące.

Ustawienia szyfrowania prosto się wyraża. Liczy się uczciwe odczytanie wyniku: to konfiguruje intencję, a część dotycząca uprawnień tej intencji ma charakter doradczy.

<?php
declare(strict_types=1);
use NextPDF\Core\Document;
use NextPDF\Security\Encryption\EncryptionMode;
use NextPDF\Security\Encryption\Permission;
$document = Document::createStandalone();
$document->setTitle('Confidential Offer');
$document->addPage();
// Confidentiality is real: AES-256 means the content is unreadable
// without the user password. This half is cryptographically enforced.
$document->encrypt(
userPassword: 'open-sesame',
ownerPassword: 'full-rights-key',
mode: EncryptionMode::Aes256,
// Permissions are a declared request to a cooperating reader,
// recorded inside the encrypted document — not a hard lock.
permissions: Permission::Print->value | Permission::CopyContent->value,
);
$document->save('offer.pdf');

Hasło użytkownika i hasło właściciela to różne klucze o różnych zadaniach. Argument permissions mówi, na co dobrze zachowujący się czytnik powinien pozwolić. To uczciwe metadane, chronione pod kątem integralności przez procedurę obsługi zabezpieczeń, tak by manipulacja była wykrywalna — i to jest pułap tego, co biblioteka wytwarzająca może obiecać.

Pułapką jest odczytywanie „uprawnień” jako „egzekwowania”. To intuicyjne: flaga mówi drukowanie niedozwolone, więc z pewnością drukowanie jest zablokowane. Ale nic w PDF nie może sięgnąć i wyłączyć przycisku drukowania czytnika. Liczba całkowita uprawnień jest zapisana po to, by współpracujący czytnik jej posłuchał. Czytnik, który decyduje się nie współpracować — a kilka tego nie robi — może swobodnie drukować, kopiować i edytować.

NextPDF jest w tym celowy. Rdzeniowa ścieżka szyfrowania traktuje flagi uprawnień jako zadeklarowaną intencję i nigdy nie udaje, że je egzekwuje. Jeśli potrzebujesz, by działania były naprawdę uniemożliwione, ta kontrola musi mieszkać poza plikiem — w tym, komu wręczasz dokument, lub w systemie kontroli dostępu wokół niego.

Bądź precyzyjny co do tego, co gwarantuje każda połowa. Szyfrowanie (warstwa hasła użytkownika) to prawdziwa kontrola poufności: silna, jeśli hasło jest silne, i tak dobra, jak tylko sekret, który wybierzesz. Uprawnienia (warstwa hasła właściciela) to tamper-evident metadane, a nie kontrola dostępu.

Czego możesz oczekiwaćCo szyfrowanie faktycznie dostarcza
Nikt nie może odczytać treści bez hasłaPrawda. Z AES-256 i silnym hasłem użytkownika ciągi znaków i strumienie są nieczytelne bez klucza. Naprawdę egzekwowane.
Nikt nie może przepisać „bez kopiowania” na „kopiowanie dozwolone”Tamper-evident, a nie niemożliwe. Flagi uprawnień są chronione pod kątem integralności przez standardową procedurę obsługi zabezpieczeń: osoba z zewnątrz może zmienić bajty, ale zmieniona kopia nie przejdzie weryfikacji, więc zgodny czytnik wykrywa i odrzuca zmianę.
Czytnik zostanie powstrzymany przed kopiowaniem lub drukowaniemNiegwarantowane przez żaden producent PDF. Niewspółpracujący czytnik może zignorować flagi. To właściwość formatu, a nie ograniczenie NextPDF.

Dwie dalsze granice warto wyrazić wprost. Po pierwsze, szyfrowanie chroni treść, a nie strukturę dokumentu: układ obiektów i liczba stron pozostają widoczne, co jest normalne i konieczne, by czytnik zlokalizował słownik szyfrowania. Po drugie, zaszyfrowany PDF nie może jednocześnie deklarować archiwalnej zgodności PDF/A — ten profil zakazuje wpisu Encrypt, więc wybierasz jedno albo drugie. Strona rozwiązywania problemów z szyfrowaniem i uprawnieniami omawia szczegółowo konkretne wyjątki i odmowę PDF/A.

  • AES-256 — Advanced Encryption Standard z kluczem 256-bitowym, zalecany nowoczesny szyfr do szyfrowania treści PDF.
  • Hasło użytkownika (hasło otwierające) — sekret wymagany do otwarcia i odczytania zaszyfrowanego dokumentu. Bez niego treść nie może zostać odszyfrowana.
  • Hasło właściciela (hasło uprawnień) — sekret „pełnych praw”, który rządzi flagami uprawnień. Dokument może mieć je bez wymagania hasła użytkownika do otwarcia.
  • Flagi uprawnień — zadeklarowana intencja drukowania/kopiowania/modyfikowania przechowywana w słowniku szyfrowania. Chronione pod kątem integralności, tak by manipulacja była wykrywalna, ale honorowane tylko przez współpracujący czytnik.
  • Procedura obsługi zabezpieczeń — komponent, który wyprowadza klucz szyfrowania pliku z hasła, zdefiniowany przez standardową procedurę obsługi zabezpieczeń w ISO 32000-2.
  • Zależny od współpracy czytnika — kontrola, która zależy od tego, czy oprogramowanie konsumujące zdecyduje się jej posłuchać, a nie jest egzekwowana przez sam plik.