Das Passwort, das es öffnet, und was damit getan werden darf

Verschließen Sie das Dokument mit einem Passwort und nennen Sie, was die Anzeigesoftware erlauben soll: Drucken, Kopieren, Ausfüllen eines Formulars.

In einem echten PDF ansehen

Ein Dokument, das sich frei lesen lässt und bittet, nicht kopiert zu werden

Eine Seite, die sich ohne Passwort öffnet und wie jede andere druckt, aber die Anzeigesoftware bittet, das Kopieren und Einfügen ihres Textes zu verbieten. Der Text ist in der Datei verschlüsselt: Ein Programm, das sie Byte für Byte liest, findet darin keinen Satz.

Das PDF öffnen Das vollständige Beispiel ansehen

Auch zu sehen in: Ein Dokument, das vor dem Öffnen nach einem Passwort fragt

Zusammenfassung

Ein Ordner kommt in eine Schublade, und die Schublade bekommt ein Schloss. Ein PDF funktioniert genauso, mit zwei Passwörtern statt einem. Das erste gibt ein, wer das Dokument öffnet: Solange es nicht eingegeben ist, zeigt die Anzeigesoftware gar nichts. Das zweite gehört dem, der das Dokument geschrieben hat, und gewährt dieser Person alles, worauf die anderen verzichten sollen. Beide wählen Sie selbst, und Sie können eines, das andere, beide oder keines verlangen. Was Sie nennen, ist erlaubt, und was Sie weglassen, bleibt ausgeschlossen. Das sind Wünsche, die die tatsächlich genutzte Anzeigesoftware beachtet; das Passwort vor der ersten Seite ist dasjenige, das die Tür wirklich verschlossen hält. Und da das Passwort mit Ihrer Anfrage reist, senden Sie es über eine sichere Verbindung — das Dokument wird damit geschrieben, und es wird vergessen, sobald die Datei auf dem Rückweg ist.

Technisch

Auf der obersten Ebene einer Anfrage geschrieben, unter "protection"

protection verschlüsselt das Dokument: Jede Zeichenkette und jeder Stream wird als Chiffretext unter AES mit einem 256-Bit-Schlüssel geschrieben. Der Block allein genügt — einer, der keines der beiden Passwörter nennt, verschlüsselt die Datei trotzdem, und sie öffnet sich ohne Eingabe, wie es die meisten geschützten Dateien der Welt tun. Den Verschlüsselungsschlüssel bestimmt die Anfrage: In protection.key angegeben, ergibt dieselbe zweimal geschriebene Anfrage dieselbe Datei. Fehlt er, wird er einmal pro Erzeugung aus dem Zufall der Maschine gewonnen und aus nichts abgeleitet, was die Anfrage enthält, sodass zwei Erzeugungen derselben geschützten Anfrage zwei verschiedene Dateien liefern. Das ist eine von zwei Stellen im Schema, an denen das gilt: Die andere ist ein Textabschnitt, der den Zeitpunkt der Erzeugung anfordert und die Uhr liest, während die Seite gezeichnet wird. Die Berechtigungen werden einzeln genannt, jeder Name gewährt eine Sache, und ein Name außerhalb der acht führt zu 400 mit der Liste der acht. Was die Berechtigungen vorenthalten, wird in der Datei angegeben, damit die Anzeigesoftware es beachtet, und die alltäglich genutzte Anzeigesoftware beachtet es auch; das user_password ist das, was eine Seite aus eigener Kraft zurückhält. Ein Passwort bleibt innerhalb der Erzeugung: Es gelangt weder ins Protokoll noch in einen Störungsbericht noch in die Antwort an den Kunden, und der Body der Anfrage wird verworfen, sobald er gelesen ist.

Anfrageschema

  • protection — Objekt, optional, standardmäßig nicht gesetzt. Ist es vorhanden, wird das Dokument mit AES-256 verschlüsselt; fehlt es, wird es im Klartext geschrieben.
  • protection.user_password — Zeichenkette, optional. Was eine Person eingibt, bevor die Anzeigesoftware auch nur eine Seite zeigt. Fehlt es, öffnet sich das Dokument ohne Eingabe.
  • protection.owner_password — Zeichenkette, optional. Was der Autor eingibt, um alles zu erhalten, was die Berechtigungen vorenthalten. Fehlt es, gibt die Datei an seiner Stelle das andere Passwort an.
  • protection.permissions — Array von Zeichenketten, optional, standardmäßig leer. Jeder Name gewährt eine Sache, und gewährt wird, was genannt ist. Acht Werte:
    • printing — das Dokument darf gedruckt werden.
    • printing_at_full_resolution — es wird in der Auflösung gedruckt, in der es gezeichnet wurde. Wird nur printing gewährt, wird es als grobes Bild gedruckt.
    • modifying — der Inhalt des Dokuments darf geändert werden. Kommentieren, Ausfüllen eines Formulars und Umordnen der Seiten haben jeweils eine eigene Berechtigung, siehe unten.
    • copying — Text und Bilder dürfen herauskopiert werden.
    • annotating — Formen dürfen darüber gezeichnet und Formularfelder ausgefüllt werden.
    • filling_forms — Formularfelder dürfen für sich ausgefüllt werden, wo immer annotating weggelassen ist.
    • extracting_for_accessibility — Text darf für einen Screenreader herausgelesen werden; jedes gesperrte Dokument gewährt dies, ob angegeben oder nicht.
    • assembling — Seiten dürfen eingefügt, gedreht oder entfernt werden.
  • Ein Name außerhalb der acht führt zu 400, mit der Liste der acht.
  • protection.key — Zeichenkette, optional. Die zweiunddreißig Bytes, aus denen der Verschlüsselungsschlüssel gebildet wird, in Base64, so wie die Bytes einer eingebetteten Schrift übertragen werden. Fehlt er, zieht der Server sie einmal pro Erzeugung zufällig. Ein Wert, der kein Base64 ist oder nach dem Dekodieren nicht zweiunddreißig Bytes umfasst, führt zu 400.
  • protection.only_the_attachments — boolescher Wert, optional, standardmäßig false. true beschränkt die Verschlüsselung auf die Anhänge des Dokuments: Die Seiten, die Zeichenketten und das, was das Dokument über sich selbst sagt, werden im Klartext geschrieben und öffnen sich ohne Eingabe, jeder Anhang wird als Chiffretext geschrieben, und das in der Anfrage angegebene Passwort gibt die Anhänge frei. Eine Anfrage, die dies für ein Dokument ohne Anhang verlangt oder beide Passwörter angibt, führt zu 400.
  • protection.for_older_readers — boolescher Wert, optional, standardmäßig false. true verschlüsselt das Dokument so, wie ältere Anzeigesoftware es öffnet: AES mit einem 128-Bit-Schlüssel, die Passwörter im Zeichensatz PDFDocEncoding geschrieben, das Dokument mindestens als PDF 1.6 deklariert. Ein Passwort, das dieser Zeichensatz nicht schreiben kann, führt zu 400.
  • protection.metadata_in_the_clear — boolescher Wert, optional, standardmäßig false. true lässt das Metadatenpaket des Dokuments lesbar, während alles andere verschlüsselt ist: den Titel, den Autor und den Rest dessen, was das Dokument als XML über sich selbst sagt, damit ein Suchindex oder ein Archivkatalog es ohne Passwort lesen kann. Die Zeichenketten des Informations-Dictionarys bleiben mit dem Rest verschlüsselt.
  • protection.authenticated — boolescher Wert, optional, standardmäßig false. Die Verschlüsselung, die der Anzeigesoftware meldet, dass ein Byte geändert wurde: AES im Galois/Counter Mode, PDF 2.0.

Zwei Erzeugungen einer geschützten Anfrage, die keinen Schlüssel angibt, sind zwei verschiedene Dateien, da der Verschlüsselungsschlüssel jedes Mal von der Maschine gelesen wird. Ein Dokument, das bei zwei Erzeugungen Byte für Byte gleich zurückkommen soll, gibt seinen eigenen protection.key an oder wird unverschlüsselt geschrieben und verlangt keinen Textlauf mit dem Zeitpunkt der Erzeugung — das sind die beiden Stellen im Schema, an denen eine Anfrage zwei Dateien ergibt.

Archivierung: archive und protection werden einzeln verlangt, und eine Anfrage, die beide angibt, führt zu 400. Eine Archivierungsnorm verspricht, dass sich die Datei auch dann noch lesen lässt, wenn niemand mehr da ist, dem das Passwort gesagt wurde, und jeder Teil von PDF/A hält eine Datei daran fest.

Barrierefreiheit: Jedes gesperrte Dokument gewährt extracting_for_accessibility, ob die Anfrage es nennt oder nicht, damit ein Screenreader immer etwas zu lesen hat.

Ein Passwort wird unverändert in der Anfrage übertragen; ein Kunde sendet es also über TLS und hält es aus allem heraus, was Anfragen aufzeichnet.

Eine vollständige Anfrage, die ein PDF erzeugt

{
  "protection": {
    "user_password": "the-reader-types-this",
    "owner_password": "the-author-keeps-this",
    "permissions": [
      "printing",
      "printing_at_full_resolution",
      "extracting_for_accessibility"
    ]
  },
  "metadata": { "title": "Salary statement, March 2026" },
  "standard_fonts": [{ "name": "sans", "face": "helvetica" }],
  "items": [
    {
      "type": "text",
      "rect": { "llx": 60, "lly": 740, "urx": 535, "ury": 768 },
      "content": ["Salary statement, March 2026"],
      "font": "sans",
      "font_size": 18
    }
  ]
}

Die Zeile, die es sendet, in drei Sprachen

Das Dokument als Ganzes

Die Nummern, die die Anzeigesoftware zeigt Hundert Briefe in einer einzigen Datei Was das Dokument über sich sagt Was das Dokument über sich sagt, einmal gesagt Text, den niemand kopieren kann Notizen, die ein Programm in der Datei für sich hinterlässt Die Notizen, die ein Programm auf einer Seite hinterlässt Die Daten, die ein Programm an einen Farbabschnitt hängt Eine Datei, die noch in Jahrzehnten lesbar ist Die Drucknorm, die das Dokument beansprucht Die beanspruchte Norm für variablen Datendruck Eine Rechnung, die Mensch und Maschine gleichermaßen lesen Die Adresse, gegen die relative Links gelesen werden Die PDF-Version, die die Datei angibt Die PDF-Erweiterungen, die die Datei zu nutzen angibt Was ein Bild über sich sagt, und wie es gelesen wird Die Anhänge, die das Dokument neben seinen Seiten trägt Dateien, die das Dokument nennt, ohne sie zu enthalten Die Anhänge als Portfolio gezeigt Welche Anhänge eine Seite beansprucht Welche Anhänge eine Schrift beansprucht Der Ausweis, den eine einzelne Schrift trägt Welche Anhänge die Karte des Dokuments beansprucht Eine anderswo geschriebene Dokumentkarte Die Bereiche einer Seite, in denen ein Leser misst Der Ausweis, den eine einzelne Seite trägt Die Barrierefreiheitsnorm, die das Dokument beansprucht Die Normen, an denen das fertige Dokument gemessen wird

Wohin als Nächstes

Jeder JSON-Schlüssel einer Anfrage, auf einer Seite Die übrigen einundvierzig Einstellungen einer Anfrage

Die Preise ansehen Die Beispiele ansehen