Salta ai contenuti
getnextpdf.com

Come funziona davvero la cifratura dei PDF — e i suoi limiti

Spec: ISO 32000-2, §7.6

La cifratura dei PDF mescola le parole e le immagini dentro un documento, così che solo chi ha la password corretta possa leggerle. È crittografia genuina, ed è brava nell’unico compito che ha. È anche ampiamente fraintesa, perché la stessa funzionalità porta con sé un secondo meccanismo — i flag di permesso — che sembra un lucchetto e non lo è.

Questa pagina separa i due. Spiega cosa protegge davvero AES-256, a cosa servono realmente le due password, e dove si colloca il confine onesto.

Le persone ricorrono alla cifratura quando un documento è sensibile: un contratto, una busta paga, una lettera medica. L’aspettativa è ragionevole — tieni questo privato, e impedisci alle persone di stamparlo o copiarlo. Il PDF mantiene la prima metà di quel desiderio in modo convincente e la seconda metà solo sulla parola.

Confondere i due è dove si paga il prezzo. Un team marca un file «niente copia», confida che la piattaforma lo imponga, e lo spedisce. Mesi dopo qualcuno copia il testo in trenta secondi con un lettore diverso, e l’assunto che non ha mai retto si trasforma silenziosamente in una fuga di dati. La cifratura non è mai stata violata. Le è stato semplicemente chiesto di fare qualcosa che non fa.

  • La cifratura protegge la riservatezza. Con AES-256, il contenuto di stringhe e stream di un PDF è vero testo cifrato. Senza la chiave, è illeggibile.
  • La password utente apre il documento. Fornendola, puoi vedere il contenuto. Senza di essa, non c’è nulla da leggere.
  • La password proprietario governa i permessi. È la chiave dei «pieni diritti». I flag di permesso che custodisce — stampa, copia, modifica — sono registrati dentro il documento cifrato.
  • I flag di permesso sono cooperativi rispetto al lettore. Sono una richiesta a un lettore beneducato, non un’imposizione. Un lettore che li ignora può stampare, copiare o modificare comunque.
  • La struttura resta visibile. La cifratura nasconde il contenuto, non lo scheletro del documento — il conteggio delle pagine e il layout degli oggetti non sono il segreto.

La cifratura dei PDF è definita da Spec: ISO 32000-2, §7.6. Il modello è preciso: un security handler deriva una chiave di cifratura del file da una password, le stringhe e gli stream del documento sono cifrati con quella chiave, e un encryption dictionary — referenziato dal trailer del file — registra quale cifrario è stato usato, quanto è lunga la chiave e quali permessi l’autore ha dichiarato.

Il cifrario moderno e raccomandato è AES con una chiave a 256 bit. Quando cifri un PDF in questo modo, il payload leggibile — il testo che estrarresti, i byte dell’immagine, i dati del font — è trasformato in testo cifrato. La forma esterna del documento resta leggibile per progettazione: un lettore deve trovare l’encryption dictionary e conoscere la lunghezza della chiave prima di poterti chiedere una password. È per questo che la cifratura si comprende meglio come riservatezza del contenuto, non come opacità dell’intero file.

Le due password stanno a livelli diversi, e la distinzione è la parte che vale di più capire bene.

  1. Viene fornita una passwordO la password utente (apertura) o la password proprietario (pieni diritti).
  2. Il security handler deriva la chiaveISO 32000-2 §7.6.4 trasforma la password nella chiave di cifratura del file.
  3. Il contenuto viene decifratoAES-256 riporta le stringhe e gli stream cifrati a byte leggibili.
  4. I permessi vengono consultatiLa chiave proprietario concede tutti i diritti; la chiave utente è vincolata dai flag di permesso dichiarati — se il lettore sceglie di rispettarli.
Come una password diventa contenuto leggibile: la password utente (o la password proprietario) viene fatta passare attraverso la routine di derivazione della chiave del security handler standard per recuperare la chiave di cifratura del file, che poi decifra le stringhe e gli stream del documento. La password proprietario sblocca inoltre l'insieme completo dei permessi; la password utente è vincolata da qualunque flag di permesso l'autore abbia dichiarato.

La password utente è la password di apertura. Risponde a una sola domanda: ti è permesso vedere affatto il contenuto? Niente password utente, niente documento leggibile — quella parte è imposta crittograficamente, perché senza la chiave derivata non c’è nulla da decifrare.

La password proprietario è la password dei permessi. Un file può essere aperto da chiunque (nessuna password utente) e tuttavia dichiarare una password proprietario che custodisce le azioni dei «pieni diritti» — stampare ad alta risoluzione, copiare testo, modificare il file. Fondamentale: i bit di permesso che la password proprietario protegge sono protetti nell’integrità dal security handler standard: la manomissione viene rilevata e respinta da un lettore conforme, perché l’handler lega i permessi dichiarati alle chiavi di cifratura. I bit non sono letteralmente byte illeggibili o non modificabili — un attaccante può cambiarli — ma una copia alterata non si convaliderà, perciò un lettore conforme la tratta come corrotta. Sono a prova di manomissione. Semplicemente non sono autoimposti.

Le impostazioni di cifratura sono semplici da esprimere. Ciò che conta è leggere il risultato onestamente: questo configura un intento, e la parte del permesso di quell’intento è consultiva.

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

La password utente e quella proprietario sono chiavi diverse con compiti diversi. L’argomento permissions dichiara ciò che un lettore beneducato dovrebbe consentire. È metadato onesto, protetto nell’integrità dal security handler così che la manomissione sia rilevabile — e questo è il massimo che una libreria produttrice può promettere.

La trappola è leggere «permessi» come «imposizione». È intuitivo: il flag dice stampa non consentita, quindi di certo la stampa è bloccata. Ma nulla nel PDF può allungarsi e disabilitare il pulsante di stampa di un lettore. L’intero di permesso è registrato perché un lettore cooperante lo rispetti. Un lettore che sceglie di non cooperare — e diversi non lo fanno — è libero di stampare, copiare e modificare.

NextPDF è deliberato su questo punto. Il percorso di cifratura del core tratta i flag di permesso come intento dichiarato e non finge mai di imporli. Se serve che delle azioni siano genuinamente impedite, quel controllo deve vivere fuori dal file — in a chi consegni il documento, o in un sistema di controllo degli accessi attorno a esso.

Sii preciso su cosa garantisce ciascuna metà. La cifratura (il livello della password utente) è un vero controllo di riservatezza: forte se la password è forte, e valida solo quanto il segreto che scegli. I permessi (il livello della password proprietario) sono metadati a prova di manomissione, non controllo degli accessi.

Cosa potresti aspettartiCosa offre davvero la cifratura
Nessuno può leggere il contenuto senza la passwordVero. Con AES-256 e una password utente forte, le stringhe e gli stream sono illeggibili senza la chiave. Genuinamente imposto.
Nessuno può riscrivere «niente copia» in «copia consentita»A prova di manomissione, non impossibile. I flag di permesso sono protetti nell’integrità dal security handler standard: un estraneo può modificare i byte, ma la copia alterata non si convaliderà, perciò un lettore conforme rileva e respinge la modifica.
Al lettore sarà impedito di copiare o stampareNon garantito da alcun produttore di PDF. Un lettore non cooperante può ignorare i flag. Questa è una proprietà del formato, non un limite di NextPDF.

Due ulteriori confini vale la pena enunciarli chiaramente. Primo, la cifratura protegge il contenuto, non la struttura del documento: il layout degli oggetti e il conteggio delle pagine restano visibili, il che è normale e necessario perché un lettore individui l’encryption dictionary. Secondo, un PDF cifrato non può anche rivendicare la conformità archivistica PDF/A — quel profilo vieta la voce Encrypt, quindi scegli l’uno o l’altra. La pagina di troubleshooting su cifratura e permessi copre in dettaglio le eccezioni specifiche e il rifiuto di PDF/A.

  • AES-256 — l’Advanced Encryption Standard con una chiave a 256 bit, il cifrario moderno raccomandato per la cifratura del contenuto dei PDF.
  • Password utente (password di apertura) — il segreto richiesto per aprire e leggere un documento cifrato. Senza di esso, il contenuto non può essere decifrato.
  • Password proprietario (password dei permessi) — il segreto dei «pieni diritti» che governa i flag di permesso. Un documento può averla senza richiedere una password utente per l’apertura.
  • Flag di permesso — l’intento dichiarato di stampa/copia/modifica memorizzato nell’encryption dictionary. Protetto nell’integrità così che la manomissione sia rilevabile, ma rispettato solo da un lettore cooperante.
  • Security handler — il componente che deriva la chiave di cifratura del file da una password, definito dal security handler standard in ISO 32000-2.
  • Cooperativo rispetto al lettore — un controllo che dipende dal fatto che il software consumatore scelga di obbedirgli, anziché essere imposto dal file stesso.