Rozwiązywanie problemów z szyfrowaniem i flagami uprawnień
Zakres i granice
Dział zatytułowany „Zakres i granice”Skorzystaj z tych wpisów, aby usuwać błędy odszyfrowywania zgłaszane przez silnik za pomocą NextPDF\Exception\EncryptionException oraz NextPDF\Security\Exception\DecryptionFailedException, a także aby zrozumieć ograniczenia flag uprawnień formatu Portable Document Format (PDF).
Zacznij od ograniczeń, ponieważ pomaga to uniknąć najczęstszego błędnego przekonania: flagi uprawnień PDF w słowniku szyfrowania zapisują intencję autora. Nie są mechanizmem kontroli dostępu egzekwowanym przez tę bibliotekę. Czytnik, który ignoruje te flagi, nadal może drukować, kopiować lub modyfikować zawartość. Traktuj je jako prośbę kierowaną do współpracującego czytnika, a nie jako wymuszenie.
Wpis: operacja szyfrowania kończy się niepowodzeniem
Dział zatytułowany „Wpis: operacja szyfrowania kończy się niepowodzeniem”- Objaw.
EncryptionExceptionz komunikatem w postaciEncryption operation "<op>" failed using algorithm "<algorithm>". - Prawdopodobna przyczyna. Operacji szyfru nie udało się wykonać, zwykle dlatego, że brakuje rozszerzenia OpenSSL albo jest ono błędnie skonfigurowane, materiał klucza jest nieprawidłowy lub na granicy szyfru przekazano nieprawidłowy rozmiar wektora inicjującego (IV).
- Dowody / diagnoza.
getContext()zwracaalgorithmorazoperation. Wartośćoperationtoencrypt,decryptalbokey_derivation, co pozwala ustalić, który etap zawiódł. - Rozwiązanie.
- Sprawdź, czy rozszerzenie PHP OpenSSL jest zainstalowane i załadowane.
- Użyj pola
operation, aby zidentyfikować etap, który zawiódł. - W przypadku
key_derivationzweryfikuj dane wejściowe hasła lub klucza. - Ponów wywołanie.
- Powiązane. Dokumentacja wyjątków.
Wpis: odszyfrowywanie kończy się niepowodzeniem z przyczyny strukturalnej
Dział zatytułowany „Wpis: odszyfrowywanie kończy się niepowodzeniem z przyczyny strukturalnej”- Objaw.
DecryptionFailedExceptionz komunikatem w postaciDecryption failed for "<algorithm>": <reason>. - Prawdopodobna przyczyna. Szyfrogramu nie udało się przetworzyć z przyczyny niezwiązanej z manipulacją, takiej jak obcięty szyfrogram, brakujący IV albo nieprawidłowy klucz przekazany na granicy interfejsu programowania aplikacji (API). Kontrola integralności nie została wykonana, ponieważ nie było wystarczająco dużo materiału do oceny.
- Dowody / diagnoza.
getContext()zwracaalgorithmorazreason. Dokumentacja źródłowa odróżniaDecryptionFailedExceptionodTamperedDataException: ten wyjątek oznacza błąd konfiguracji lub transportu, a nie manipulację. Sam w sobie nie powinien być traktowany jako incydent bezpieczeństwa. - Rozwiązanie.
- Odczytaj
reason, aby zidentyfikować defekt strukturalny, na przykładciphertext shorter than IV+tag. - Sprawdź, czy szyfrogram został przesłany bez obcięcia.
- Potwierdź, że klucz przekazany na granicy jest tym samym, którego użyto do zaszyfrowania dokumentu.
- Ponów wywołanie.
- Odczytaj
- Powiązane. Błędy podpisu i znacznika czasu.
Wpis: zgłaszany jest wyjątek „tampered data”
Dział zatytułowany „Wpis: zgłaszany jest wyjątek „tampered data””- Objaw. Otrzymujesz
NextPDF\Security\Exception\TamperedDataExceptionzamiastDecryptionFailedException. - Prawdopodobna przyczyna. Kontrola integralności została wykonana i zakończyła się niepowodzeniem. Różni się to od strukturalnego błędu odszyfrowywania: dostępna była wystarczająca ilość materiału do oceny integralności, ale integralność nie została zachowana.
- Dowody / diagnoza. Źródło odróżnia te dwie klasy:
DecryptionFailedExceptionjest błędem strukturalnym, a nie incydentem bezpieczeństwa;TamperedDataExceptionwskazuje, że uwierzytelniona zawartość nie przeszła weryfikacji. - Rozwiązanie.
- Traktuj dane wejściowe jako niezaufane; nie korzystaj z odszyfrowanej zawartości.
- Pobierz dokument ponownie z zaufanego źródła.
- Jeśli niepowodzenie utrzymuje się dla źródła o znanej poprawności, przechwyć
getContext()do raportu o incydencie.
- Powiązane. Błędy podpisu i znacznika czasu.
Wpis: flagi uprawnień nie zatrzymują działania po stronie odbiorcy
Dział zatytułowany „Wpis: flagi uprawnień nie zatrzymują działania po stronie odbiorcy”- Objaw. Dokument utworzono z ustawionymi flagami uprawnień — na przykład z zablokowanym kopiowaniem lub drukowaniem — ale czytnik nadal kopiuje lub drukuje zawartość.
- Prawdopodobna przyczyna. To oczekiwane ograniczenie, a nie defekt. Liczba całkowita uprawnień przekazana do narzędzia budującego słownik szyfrowania w pakiecie Core nie jest używana przez tę bibliotekę jako mechanizm wymuszania. Flagi są metadanymi o charakterze doradczym; czytnik, który ich nie respektuje, nie jest blokowany przez NextPDF.
- Dowody / diagnoza.
src/Security/Encryption/EncryptionDictionaryBuilder.phpdeklarujebuildDict(int $permissions, string $fileId)i dokumentuje ten parametr jakoignored; retained for forward compatibility. Metoda zaczyna się odunset($permissions, $fileId). Flagi uprawnień udostępniane przezsrc/Inspect/PdfPermissions.phpsą polami inspekcyjnymi tylko do odczytu, a nie warstwą wymuszającą. - Rozwiązanie.
- Nie polegaj na flagach uprawnień, aby powstrzymać drukowanie, kopiowanie lub modyfikację. Biblioteka generująca dokumenty nie może ich wymusić.
- Tam, gdzie konieczne jest ograniczenie dostępu, kontroluj dystrybucję samego pliku lub zastosuj system kontroli dostępu poza dokumentem PDF.
- Używaj
PdfPermissionswyłącznie do raportowania flag deklarowanych przez istniejący dokument, a nie do stwierdzania, że te działania są blokowane.
- Powiązane. Błędy podpisu i znacznika czasu.
Wpis: szyfrowanie jest odrzucane w trybie PDF/A
Dział zatytułowany „Wpis: szyfrowanie jest odrzucane w trybie PDF/A”- Objaw.
NextPDF\Security\Exception\IncompatiblePdfAModeException, gdy kompilacja włącza tryb PDF/A i wymaga szyfrowania. - Prawdopodobna przyczyna. Profil PDF/A zabrania użycia klucza
Encryptw zwiastunie. Silnik odrzuca takie połączenie niezależnie od kolejności wywołań. - Dowody / diagnoza. Zobacz wpis dotyczący PDF/A i PDF/UA, aby poznać przywołaną klauzulę, pola
getContext()oraz test ścieżki błędu. - Rozwiązanie.
- Zdecyduj, czy dokument wymaga zgodności archiwizacyjnej, czy szyfrowania.
- Usuń wywołanie dla właściwości, której nie potrzebujesz.
- Ponów wykonanie potoku.
- Powiązane. Walidacja PDF/A i PDF/UA.
Przypadki brzegowe i pułapki
Dział zatytułowany „Przypadki brzegowe i pułapki”DecryptionFailedExceptionorazTamperedDataExceptionoznaczają różne rzeczy: błąd strukturalny w przeciwieństwie do nieudanej kontroli integralności. Rozgałęziaj logikę według klasy, a nie według komunikatu.- Narzędzie budujące słownik szyfrowania w pakiecie Core ignoruje liczbę całkowitą uprawnień; każda kompilacja, która polega na wymuszaniu uprawnień przez pakiet Core, opiera się na błędnym przekonaniu.
PdfPermissionsjest wypełniane wyłącznie dla zaszyfrowanych dokumentów przy pełnej głębokości inspekcji i odzwierciedla zadeklarowane flagi. Wypełnione pole nie oznacza, że dana operacja jest blokowana.
Zobacz też
Dział zatytułowany „Zobacz też”Słownik pojęć: flagi uprawnień · uwierzytelnione odszyfrowywanie