🏷️Varianten, Sicherheit und Versionen
Neben dem Kernformat gibt es ISO-Teilmengen für bestimmte Zwecke – sie verbieten Funktionen oder verlangen zusätzliche Angaben. Dazu kommen Verschlüsselung, Signaturen und Formulare, die alle mit denselben Objekten gebaut sind.
📅Versionsgeschichte 1.0 (1993) bis 2.0 (2017/2020)
- erste PDF-Version ohne Adobe als Herausgeber
- AES-256 (Revision 6); RC4 und ältere Verfahren veraltet
- XFA und Info-Dictionary veraltet, UTF-8-Strings, Associated Files
🧾ISO-Teilmengen und PDF 2.0
Langzeitarchivierung: die Datei muss in Jahrzehnten noch gleich aussehen.
- alle Schriften eingebettet
- keine Verschlüsselung, kein JavaScript
- keine externen Inhalte, Farben über OutputIntent/ICC eindeutig
- XMP-Metadaten mit PDF/A-Kennung
- PDF/A-3 erlaubt eingebettete Dateien beliebigen Typs (z. B. XML-Rechnung bei ZUGFeRD/Factur-X)
Druckvorstufe: verlässlicher Austausch mit der Druckerei.
- OutputIntent (Druckbedingung) Pflicht
- TrimBox bzw. ArtBox je Seite
- Schriften eingebettet, keine Verschlüsselung
- X-1a: nur CMYK/Sonderfarben, keine Transparenz; X-4: Transparenz und ICC-Farbe erlaubt
Universal Accessibility: nutzbar mit Screenreader und anderen Hilfsmitteln.
- Tagged PDF: vollständiger Strukturbaum (/StructTreeRoot), /MarkInfo << /Marked true >>
- Alternativtexte für Bilder, logische Lesereihenfolge
- Dokumentsprache /Lang, Titel mit /DisplayDocTitle true
- Artefakte (Kopfzeilen, Deko) als solche gekennzeichnet
Die erste unter ISO entwickelte Vollversion – keine Teilmenge, sondern der neue Basisstandard.
- AES-256 (Security-Handler-Revision 6); RC4 und AES-128 veraltet
- XFA-Formulare und das Info-Dictionary veraltet (Metadaten per XMP)
- Text-Strings auch in UTF-8 (mit BOM EF BB BF)
- Associated Files, seitenweise OutputIntents, Black-Point-Compensation
Konformität wird in den XMP-Metadaten erklärt (z. B. pdfaid:part="2", pdfaid:conformance="B") und mit Prüfprogrammen wie dem freien veraPDF getestet. Weitere Teilmengen: PDF/E (Technik, ISO 24517) und PDF/VT (variabler Datendruck, ISO 16612-2).
🔐Verschlüsselung
/P. Das Owner-Passwort gewährt alle Rechte. Ohne User-Passwort öffnet sich die Datei für jeden – dann schützt nur noch die Rechte-Bitte.qpdf --encrypt --user-password=beispiel-user --owner-password=beispiel-owner --bits=256<< /Filter /Standard /V 5 /R 6 /Length 256 /CF << /StdCF << /AuthEvent /DocOpen /CFM /AESV3 /Length 32 >> >> /StmF /StdCF /StrF /StdCF /O <…> /U <…> /OE <…> /UE <…> /Perms <…> /P -4 >>
Hashes gekürzt. Das Encrypt-Dictionary hängt am Trailer (/Encrypt); dann ist /ID Pflicht.
| Revision | Verfahren | seit | Status |
|---|---|---|---|
| R 2 | RC4, 40 Bit | PDF 1.1 | unsicher |
| R 3 | RC4, 40–128 Bit | PDF 1.4 | unsicher |
| R 4 | RC4 oder AES-128 über Crypt-Filter (/CFM /AESV2) | PDF 1.5 / 1.6 | veraltet |
| R 5 | AES-256 (Adobe Extension Level 3) | Acrobat 9, 2008 | nie ISO – veraltet |
| R 6 | AES-256 (/CFM /AESV3) | PDF 2.0 (bzw. Extension Level 8) | empfohlen |
Bis Revision 4 wird für jedes Objekt ein eigener Schlüssel aus Dateischlüssel + Objekt- und Generationsnummer (MD5) abgeleitet; ab Revision 5 gilt ein einziger 256-Bit-Dateischlüssel.
🎛️ Berechtigungen /P zusammenklicken
Bit 32 links, Bit 1 rechts. Grau: fest vorgegeben (Bits 1–2 = 0, alle anderen = 1). /P ist eine vorzeichenbehaftete 32-Bit-Zahl – deshalb negativ.
qpdf --decrypt.✍️Digitale Signaturen und /ByteRange
Eine Signatur kann nicht „in“ den Bytes stehen, die sie schützt. Deshalb wird im Signatur-Dictionary ein Platzhalter /Contents <000…> reserviert. Der Hash wird über alle Bytes außer diesem Platzhalter gebildet – beschrieben durch /ByteRange [start1 länge1 start2 länge2]. Danach wird die CMS-/PKCS#7-Signatur hexkodiert in den Platzhalter geschrieben.
% Signaturfeld (Formularfeld + Widget) 7 0 obj << /FT /Sig /T (Unterschrift1) /V 8 0 R /Type /Annot /Subtype /Widget /Rect [0 0 0 0] /P 3 0 R >> endobj % Signatur-Dictionary 8 0 obj << /Type /Sig /Filter /Adobe.PPKLite /SubFilter /ETSI.CAdES.detached /ByteRange [0 840 17226 1003] /Contents <3082…0000> % 8192 Bytes reserviert, Rest mit 00 aufgefüllt /M (D:20260928120000+02'00') >> endobj
Synthetisches Beispiel. /SubFilter /ETSI.CAdES.detached = PAdES (europäische eIDAS-Signaturen), /adbe.pkcs7.detached = klassisch.
✅ Die ByteRange deckt die ganze Datei ab – bis auf den Platzhalter, in dem die Signatur selbst steht.
Werte synthetisch berechnet: a = Offset von „<“, b = a + 2·Bytes + 2, c = Dateilänge − b.
📝Formulare (AcroForm)
% im Katalog
/AcroForm << /Fields [10 0 R] /DA (/Helv 0 Tf 0 g)
/DR << /Font << /Helv 11 0 R >> >> >>
% Textfeld = Feld-Dictionary + Widget-Annotation in einem Objekt
10 0 obj
<< /FT /Tx /T (name) /V (Erika Mustermann) /MaxLen 40
/Type /Annot /Subtype /Widget /Rect [72 700 300 720]
/P 3 0 R /AP << /N 12 0 R >> >> % Aussehen als Form-XObject
endobj/Tx Text · /Btn Schaltflächen, Kontrollkästchen, Optionsfelder · /Ch Listen und Kombinationsfelder · /Sig Signaturfeld./V ist der Wert, /AP das gezeichnete Aussehen (ein kleiner Content-Stream). Mit /NeedAppearances true bittet ein Erzeuger den Betrachter, die Darstellung selbst neu zu berechnen.