Dépannage : chiffrement et indicateurs de permissions
Périmètre et limite
Section intitulée « Périmètre et limite »Ces entrées couvrent les échecs de déchiffrement signalés par le moteur via NextPDF\Exception\EncryptionException et NextPDF\Security\Exception\DecryptionFailedException, ainsi que la limite propre aux indicateurs de permissions PDF.
D’abord, un rappel de limite s’impose, car il évite le malentendu le plus courant : les indicateurs de permissions de la table de chiffrement expriment l’intention d’un auteur. Ce n’est pas un mécanisme de contrôle d’accès appliqué par cette bibliothèque. Un lecteur qui ignore ces indicateurs peut tout de même imprimer, copier ou modifier le contenu. Considère ces indicateurs comme une demande adressée à un lecteur coopératif, pas comme un dispositif contraignant.
Entrée : une opération de chiffrement échoue
Section intitulée « Entrée : une opération de chiffrement échoue »- Symptôme.
EncryptionExceptionavec un message de la formeEncryption operation "<op>" failed using algorithm "<algorithm>". - Cause probable. L’opération de chiffrement n’a pas pu s’exécuter : typiquement, une extension OpenSSL absente ou mal configurée, un matériel de clé invalide, ou une taille d’IV invalide à la frontière du chiffrement.
- Preuves / diagnostic.
getContext()renvoiealgorithmetoperation. La valeuroperationvautencrypt,decryptoukey_derivation, ce qui t’indique l’étape qui a échoué. - Résolution.
- Vérifie que l’extension PHP OpenSSL est installée et chargée.
- Lis le champ
operationpour localiser l’étape qui échoue. - Pour
key_derivation, vérifie le mot de passe ou les entrées de clé. - Relance l’appel.
- Connexe. Référence des exceptions.
Entrée : le déchiffrement échoue pour une raison structurelle
Section intitulée « Entrée : le déchiffrement échoue pour une raison structurelle »- Symptôme.
DecryptionFailedExceptionavec un message de la formeDecryption failed for "<algorithm>": <reason>. - Cause probable. Le texte chiffré n’a pas pu être traité pour une raison qui ne relève pas d’une altération : par exemple, un texte chiffré tronqué, un IV manquant, ou la mauvaise clé fournie à la frontière de l’API. Le contrôle d’intégrité ne s’est pas exécuté faute de données suffisantes à évaluer.
- Preuves / diagnostic.
getContext()renvoiealgorithmetreason.DecryptionFailedExceptionest documentée dans le code source comme distincte deTamperedDataException: cette exception signale une erreur de configuration ou de transport, pas une altération. Ne la traite pas, à elle seule, comme un incident de sécurité. - Résolution.
- Lis
reasonpour identifier le défaut structurel, par exempleciphertext shorter than IV+tag. - Vérifie que le texte chiffré a été transporté sans troncature.
- Confirme que la clé fournie à la frontière est bien celle avec laquelle le document a été chiffré.
- Relance l’appel.
- Lis
- Connexe. Échecs de signature et d’horodatage.
Entrée : une exception « données altérées » est levée
Section intitulée « Entrée : une exception « données altérées » est levée »- Symptôme.
NextPDF\Security\Exception\TamperedDataExceptionplutôt queDecryptionFailedException. - Cause probable. Le contrôle d’intégrité s’est exécuté et a échoué. C’est distinct d’un échec de déchiffrement structurel : il y avait suffisamment de données pour évaluer l’intégrité, et la vérification a échoué.
- Preuves / diagnostic. Le code source distingue les deux classes :
DecryptionFailedExceptionest structurelle et n’est pas un incident de sécurité ;TamperedDataExceptionindique que le contenu authentifié n’a pas été validé. - Résolution.
- Traite l’entrée comme non fiable ; ne consomme pas le contenu déchiffré.
- Récupère à nouveau le document depuis une source de confiance.
- Si l’échec persiste avec une source connue comme saine, capture
getContext()pour un rapport d’incident.
- Connexe. Échecs de signature et d’horodatage.
Entrée : les indicateurs de permissions ne bloquent pas une action en aval
Section intitulée « Entrée : les indicateurs de permissions ne bloquent pas une action en aval »- Symptôme. Un document a été produit avec des indicateurs de permissions définis, par exemple copie ou impression interdite, mais un lecteur copie ou imprime quand même le contenu.
- Cause probable. C’est la limite attendue, pas un défaut. L’entier de permissions passé au constructeur de la table de chiffrement du core n’est pas utilisé par cette bibliothèque comme mécanisme d’application. Ces indicateurs sont des métadonnées indicatives ; un lecteur qui ne les respecte pas n’est pas bloqué par NextPDF.
- Preuves / diagnostic.
src/Security/Encryption/EncryptionDictionaryBuilder.phpdéclarebuildDict(int $permissions, string $fileId)avec le paramètre documenté commeignored; retained for forward compatibility. La méthode commence parunset($permissions, $fileId). Les indicateurs de permissions exposés parsrc/Inspect/PdfPermissions.phpsont des champs d’inspection en lecture seule, pas une couche d’application des permissions. - Résolution.
- Ne te repose pas sur les indicateurs de permissions pour empêcher l’impression, la copie ou la modification. Ils ne peuvent pas être appliqués par une bibliothèque de production.
- Lorsque l’accès doit être restreint, contrôle la distribution du fichier lui-même ou applique un système de contrôle d’accès en dehors du PDF.
- Utilise
PdfPermissionsuniquement pour signaler les indicateurs déclarés par un document existant, pas pour affirmer que ces actions sont empêchées.
- Connexe. Échecs de signature et d’horodatage.
Entrée : le chiffrement est refusé sous PDF/A
Section intitulée « Entrée : le chiffrement est refusé sous PDF/A »- Symptôme.
NextPDF\Security\Exception\IncompatiblePdfAModeExceptionlorsqu’une build active à la fois PDF/A et demande le chiffrement. - Cause probable. Le profil PDF/A interdit la clé
Encryptdans le trailer. Le moteur refuse cette combinaison quel que soit l’ordre des appels. - Preuves / diagnostic. Consulte l’entrée PDF/A et PDF/UA pour la clause citée, les champs de
getContext()et le test du chemin d’échec. - Résolution.
- Décide si le document a besoin de la conformité d’archivage ou du chiffrement.
- Supprime l’appel correspondant à la propriété dont tu n’as pas besoin.
- Relance le pipeline.
- Connexe. Validation PDF/A et PDF/UA.
Cas limites et pièges
Section intitulée « Cas limites et pièges »DecryptionFailedExceptionetTamperedDataExceptionne signifient pas la même chose : échec structurel d’un côté, échec d’intégrité de l’autre. Branche sur la classe, pas sur le message.- Le constructeur de la table de chiffrement du core ignore l’entier de permissions ; une build qui dépend de l’application des permissions par le package core repose sur une hypothèse erronée.
PdfPermissionsn’est renseigné que pour les documents chiffrés à la profondeur d’inspection complète et reflète les indicateurs déclarés. Un champ renseigné ne signifie pas que l’action est empêchée.
Voir aussi
Section intitulée « Voir aussi »- Référence des exceptions
- Échecs de signature et d’horodatage
- Validation PDF/A et PDF/UA
- Index de la base de connaissances
Glossaire : indicateurs de permissions · déchiffrement authentifié