Ga naar inhoud

Problemen oplossen: versleuteling en machtigingsvlaggen

Gebruik deze items om ontsleutelingsfouten op te lossen die de engine meldt via NextPDF\Exception\EncryptionException en NextPDF\Security\Exception\DecryptionFailedException, en om de grenzen van Portable Document Format (PDF)-machtigingsvlaggen te begrijpen.

Begin met die beperking, omdat daarmee het meest voorkomende misverstand wordt voorkomen: PDF-machtigingsvlaggen in de versleutelingsdictionary leggen de intentie van de auteur vast. Ze vormen geen toegangscontrolemechanisme dat door deze library wordt afgedwongen. Een reader die de vlaggen negeert, kan de inhoud nog steeds afdrukken, kopiëren of wijzigen. Beschouw de vlaggen als een verzoek aan een meewerkende reader, niet als afdwinging.

  • Symptoom. EncryptionException met een bericht in de vorm Encryption operation "<op>" failed using algorithm "<algorithm>".
  • Waarschijnlijke oorzaak. De cipher-bewerking kon niet worden uitgevoerd, meestal omdat de OpenSSL-extensie ontbreekt of verkeerd is geconfigureerd, het sleutelmateriaal ongeldig is, of de initialisatievector (IV) een ongeldige grootte heeft aan de ciphergrens.
  • Bewijs / diagnose. getContext() retourneert algorithm en operation. De waarde van operation is een van encrypt, decrypt of key_derivation, zodat je kunt vaststellen welke fase is mislukt.
  • Oplossing.
    1. Controleer of de OpenSSL PHP-extensie is geïnstalleerd en geladen.
    2. Gebruik het veld operation om de fase te vinden die mislukt.
    3. Verifieer bij key_derivation de wachtwoord- of sleutelinvoer.
    4. Voer de aanroep opnieuw uit.
  • Gerelateerd. Exception-referentie.

Item: ontsleuteling mislukt door een structurele oorzaak

Sectie met titel “Item: ontsleuteling mislukt door een structurele oorzaak”
  • Symptoom. DecryptionFailedException met een bericht in de vorm Decryption failed for "<algorithm>": <reason>.
  • Waarschijnlijke oorzaak. De ciphertext kon niet worden verwerkt om een reden die niet op manipulatie wijst, zoals afgekapte ciphertext, een ontbrekende IV, of de verkeerde sleutel die aan de application programming interface (API)-grens is doorgegeven. De integriteitscontrole is niet uitgevoerd omdat er onvoldoende materiaal was om die te evalueren.
  • Bewijs / diagnose. getContext() retourneert algorithm en reason. De brondocumentatie onderscheidt DecryptionFailedException van TamperedDataException: deze exception duidt op een configuratie- of transportfout, niet op manipulatie. Behandel dit op zichzelf niet als een beveiligingsincident.
  • Oplossing.
    1. Lees reason om het structurele defect te identificeren, bijvoorbeeld ciphertext shorter than IV+tag.
    2. Verifieer dat de ciphertext zonder afkapping is getransporteerd.
    3. Bevestig dat de sleutel die aan de grens is doorgegeven, de sleutel is die is gebruikt om het document te versleutelen.
    4. Voer de aanroep opnieuw uit.
  • Gerelateerd. Handtekening- en tijdstempelfouten.

Item: er wordt een ‘tampered data’-exception gegooid

Sectie met titel “Item: er wordt een ‘tampered data’-exception gegooid”
  • Symptoom. Je ontvangt NextPDF\Security\Exception\TamperedDataException in plaats van DecryptionFailedException.
  • Waarschijnlijke oorzaak. De integriteitscontrole is uitgevoerd en mislukt. Dit verschilt van een structurele ontsleutelingsfout: er was voldoende materiaal aanwezig om de integriteit te evalueren, maar de integriteit bleek niet intact.
  • Bewijs / diagnose. De broncode onderscheidt de twee klassen: DecryptionFailedException is structureel en geen beveiligingsincident; TamperedDataException geeft aan dat de geverifieerde inhoud de validatie niet heeft doorstaan.
  • Oplossing.
    1. Beschouw de invoer als niet-vertrouwd; gebruik de ontsleutelde inhoud niet.
    2. Haal het document opnieuw op uit een vertrouwde bron.
    3. Als de fout aanhoudt bij een bekende, betrouwbare bron, leg dan getContext() vast voor een incidentrapport.
  • Gerelateerd. Handtekening- en tijdstempelfouten.

Item: machtigingsvlaggen verhinderen geen vervolgactie

Sectie met titel “Item: machtigingsvlaggen verhinderen geen vervolgactie”
  • Symptoom. Er is een document geproduceerd met machtigingsvlaggen ingesteld — bijvoorbeeld kopiëren of afdrukken niet toegestaan — maar een reader kopieert of drukt de inhoud toch af.
  • Waarschijnlijke oorzaak. Dit is de verwachte beperking, geen defect. De machtigingsinteger die aan de core-versleutelingsdictionarybuilder wordt doorgegeven, wordt door deze library niet afgedwongen. De vlaggen zijn adviserende metadata; een reader die ze niet respecteert, wordt niet geblokkeerd door NextPDF.
  • Bewijs / diagnose. src/Security/Encryption/EncryptionDictionaryBuilder.php declareert buildDict(int $permissions, string $fileId), en documenteert de parameter als ignored; retained for forward compatibility. De methode begint met unset($permissions, $fileId). De machtigingsvlaggen die door src/Inspect/PdfPermissions.php worden weergegeven, zijn alleen-lezen inspectievelden, geen afdwingingslaag.
  • Oplossing.
    1. Vertrouw niet op machtigingsvlaggen om afdrukken, kopiëren of wijziging te verhinderen. Ze kunnen niet worden afgedwongen door een producerbibliotheek.
    2. Als je de toegang moet beperken, beheer dan de distributie van het bestand zelf, of pas een toegangscontrolesysteem buiten de PDF toe.
    3. Gebruik PdfPermissions alleen om de vlaggen te rapporteren die een bestaand document declareert, niet om te beweren dat die acties worden geblokkeerd.
  • Gerelateerd. Handtekening- en tijdstempelfouten.
  • Symptoom. NextPDF\Security\Exception\IncompatiblePdfAModeException wanneer een build PDF/A inschakelt en om versleuteling vraagt.
  • Waarschijnlijke oorzaak. Het PDF/A-profiel verbiedt de Encrypt-sleutel in de trailer. De engine weigert de combinatie ongeacht de volgorde van de aanroepen.
  • Bewijs / diagnose. Zie het PDF/A- en PDF/UA-item voor de aangehaalde clausule, getContext()-velden, en failure-path-test.
  • Oplossing.
    1. Bepaal of het document archiefconformiteit of versleuteling nodig heeft.
    2. Verwijder de aanroep voor de eigenschap die je niet nodig hebt.
    3. Voer de pipeline opnieuw uit.
  • Gerelateerd. PDF/A- en PDF/UA-validatie.
  • DecryptionFailedException en TamperedDataException betekenen verschillende dingen: structurele fout versus mislukte integriteit. Vertak op basis van de klasse, niet op het bericht.
  • De core-versleutelingsdictionarybuilder negeert de machtigingsinteger; elke build die afhankelijk is van machtigingsafdwinging vanuit het core-pakket, berust op een misverstand.
  • PdfPermissions wordt alleen gevuld voor versleutelde documenten bij volledige inspectiediepte en weerspiegelt de gedeclareerde vlaggen. Een gevuld veld betekent niet dat de actie wordt verhinderd.

Verklarende woordenlijst: machtigingsvlaggen · geverifieerde ontsleuteling