Ga naar inhoud
getnextpdf.com

Hoe PDF-versleuteling echt werkt — en haar grenzen

Spec: ISO 32000-2, §7.6

PDF-versleuteling versleutelt de woorden en afbeeldingen in een document zodat alleen iemand met het juiste wachtwoord ze kan lezen. Het is echte cryptografie, en het is goed in het ene werk dat het heeft. Het wordt ook breed verkeerd begrepen, omdat diezelfde functie een tweede mechanisme draagt — permissievlaggen — dat eruitziet als een slot en er geen is.

Deze pagina scheidt de twee. Hij legt uit wat AES-256 daadwerkelijk beschermt, waar de twee wachtwoorden echt voor zijn, en waar de eerlijke grens ligt.

Mensen grijpen naar versleuteling wanneer een document gevoelig is: een contract, een loonstrook, een medische brief. De verwachting is redelijk — houd dit privé, en weerhoud mensen ervan het te printen of te kopiëren. PDF levert de eerste helft van die wens overtuigend en de tweede helft alleen op basis van vertrouwen.

De twee verwarren is waar de kosten landen. Een team markeert een bestand “geen kopiëren”, vertrouwt erop dat het platform het afdwingt, en verstuurt. Maanden later kopieert iemand de tekst in dertig seconden met een andere lezer, en de aanname die nooit standhield verandert stilletjes in een lek. De versleuteling werd nooit gebroken. Er werd simpelweg gevraagd iets te doen wat het niet doet.

  • Versleuteling beschermt vertrouwelijkheid. Met AES-256 is de string- en stream- inhoud van een PDF echte ciphertext. Zonder de sleutel is het onleesbaar.
  • Het user password opent het document. Lever het aan en je kunt de inhoud zien. Zonder is er niets te lezen.
  • Het owner password regelt permissies. Het is de “volledige rechten”-sleutel. De permissievlaggen die het bewaakt — printen, kopiëren, wijzigen — worden vastgelegd binnen het versleutelde document.
  • Permissievlaggen zijn reader-cooperative. Ze zijn een verzoek aan een net opererende lezer, geen afdwinging. Een lezer die ze negeert kan toch printen, kopiëren of bewerken.
  • De structuur blijft zichtbaar. Versleuteling verbergt inhoud, niet het skelet van het document — paginaaantal en objectindeling zijn niet het geheim.

PDF-versleuteling wordt gedefinieerd door Spec: ISO 32000-2, §7.6. Het model is precies: een security handler leidt een file encryption key af uit een wachtwoord, de strings en streams van het document worden versleuteld met die sleutel, en een encryption dictionary — gerefereerd vanuit de file trailer — legt vast welke cipher is gebruikt, hoe lang de sleutel is, en welke permissies de auteur heeft opgegeven.

De moderne, aanbevolen cipher is AES met een 256-bits sleutel. Wanneer je een PDF op deze manier versleutelt, wordt de leesbare payload — de tekst die je zou extraheren, de afbeeldings- bytes, de fontdata — getransformeerd in ciphertext. De buitenvorm van het document blijft door ontwerp leesbaar: een lezer moet de encryption dictionary vinden en de sleutellengte leren voordat hij je om een wachtwoord kan vragen. Daarom kun je versleuteling het best begrijpen als inhoudsvertrouwelijkheid, niet hele-bestands- opaciteit.

De twee wachtwoorden zitten op verschillende lagen, en het onderscheid is het deel dat het meest de moeite waard is om goed te krijgen.

  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.
Hoe een wachtwoord leesbare inhoud wordt: het user password (of het owner password) wordt door de key-derivation-routine van de standard security handler gehaald om de file encryption key te herstellen, die vervolgens de strings en streams van het document ontsleutelt. Het owner password ontgrendelt daarnaast de volledige set permissies; het user password is gebonden aan welke permissievlaggen de auteur ook heeft opgegeven.

Het user password is het open-wachtwoord. Het beantwoordt één vraag: mag je de inhoud überhaupt zien? Geen user password, geen leesbaar document — dat deel is cryptografisch afgedwongen, want zonder de afgeleide sleutel is er niets te ontsleutelen.

Het owner password is het permissie-wachtwoord. Een bestand kan worden geopend door iedereen (geen user password) en toch een owner password opgeven dat de “volledige rechten”-acties bewaakt — printen op hoge resolutie, tekst kopiëren, het bestand wijzigen. Cruciaal is dat de permissiebits die het owner password beschermt integriteitsbeschermd zijn door de standard security handler: ermee knoeien wordt gedetecteerd en afgewezen door een conforme lezer, omdat de handler de opgegeven permissies bindt aan de encryptiesleutels. De bits zijn niet letterlijk onleesbare of onbewerkbare bytes — een aanvaller kan ze wijzigen — maar een gewijzigde kopie zal niet valideren, dus een conforme lezer behandelt die als corrupt. Ze zijn tamper-evident. Ze zijn simpelweg niet zelf-afdwingend.

Versleutelingsinstellingen zijn eenvoudig uit te drukken. Wat ertoe doet, is het resultaat eerlijk lezen: dit configureert intentie, en het permissiedeel van die intentie is adviserend.

<?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');

Het user- en owner password zijn verschillende sleutels met verschillende taken. Het permissions-argument stelt wat een net opererende lezer zou moeten toestaan. Het is eerlijke metadata, integriteitsbeschermd door de security handler zodat knoeien detecteerbaar is — en dat is het plafond van wat een producerende bibliotheek kan beloven.

De valkuil is “permissies” lezen als “afdwinging”. Het is intuïtief: de flag zegt printen niet toegestaan, dus printen is vast geblokkeerd. Maar niets in de PDF kan reiken en de printknop van een lezer uitschakelen. De permissie-integer wordt vastgelegd zodat een coöperatieve lezer hem honoreert. Een lezer die ervoor kiest niet mee te werken — en verschillende doen dat niet — is vrij om te printen, te kopiëren en te bewerken.

NextPDF is hier doelbewust over. Het core-versleutelingspad behandelt de permissievlaggen als opgegeven intentie en doet nooit alsof het ze afdwingt. Als je wilt dat acties echt worden voorkomen, moet die controle buiten het bestand leven — in aan wie je het document geeft, of in een toegangscontrolesysteem eromheen.

Wees precies over wat elke helft garandeert. Versleuteling (de user-password- laag) is een echte vertrouwelijkheidscontrole: sterk als het wachtwoord sterk is, en slechts zo goed als het geheim dat je kiest. Permissies (de owner-password-laag) zijn tamper-evident metadata, geen toegangscontrole.

Wat je zou kunnen verwachtenWat versleuteling daadwerkelijk levert
Niemand kan de inhoud lezen zonder het wachtwoordWaar. Met AES-256 en een sterk user password zijn de strings en streams onleesbaar zonder de sleutel. Echt afgedwongen.
Niemand kan “geen kopiëren” herschrijven naar “kopiëren toegestaan”Tamper-evident, niet onmogelijk. De permissievlaggen zijn integriteitsbeschermd door de standard security handler: een buitenstaander kan de bytes bewerken, maar de gewijzigde kopie zal niet valideren, dus een conforme lezer detecteert en wijst de wijziging af.
De lezer wordt belet te kopiëren of te printenNiet gegarandeerd door enige PDF-producent. Een niet-coöperatieve lezer kan de vlaggen negeren. Dit is een eigenschap van het formaat, geen NextPDF-beperking.

Twee verdere grenzen zijn het waard om ronduit te stellen. Ten eerste beschermt versleuteling inhoud, niet de structuur van het document: objectindeling en paginaaantal blijven zichtbaar, wat normaal en noodzakelijk is opdat een lezer de encryption dictionary kan lokaliseren. Ten tweede kan een versleutelde PDF niet ook archiverende PDF/A- conformiteit claimen — dat profiel verbiedt de Encrypt-vermelding, dus je kiest het een of het ander. De troubleshooting-pagina over versleuteling en permissies behandelt de specifieke uitzonderingen en de PDF/A-weigering in detail.

  • AES-256 — de Advanced Encryption Standard met een 256-bits sleutel, de aanbevolen moderne cipher voor PDF-inhoudsversleuteling.
  • User password (open password) — het geheim dat vereist is om een versleuteld document te openen en te lezen. Zonder kan de inhoud niet worden ontsleuteld.
  • Owner password (permissions password) — het “volledige rechten”-geheim dat de permissievlaggen regelt. Een document kan er een hebben zonder een user password te vereisen om te openen.
  • Permissievlaggen — de opgegeven print/kopieer/wijzig-intentie opgeslagen in de encryption dictionary. Integriteitsbeschermd zodat knoeien detecteerbaar is, maar alleen gehonoreerd door een coöperatieve lezer.
  • Security handler — de component die de file encryption key afleidt uit een wachtwoord, gedefinieerd door de standard security handler in ISO 32000-2.
  • Reader-cooperative — een controle die afhangt van of de consumerende software ervoor kiest hem te gehoorzamen, in plaats van te worden afgedwongen door het bestand zelf.