Zero-Knowledge · PDF-Sharing

Zero-Knowledge-PDF-Sharing, richtig erklärt.

„Ende-zu-Ende-verschlüsselt" wird oft lax verwendet. Hier der tatsächliche kryptographische Mechanismus hinter einem Zero-Knowledge-PDF-Link — AES-256-GCM, Schlüssel-Handling, Fragment- vs. Passphrase-Modus und was der Server buchstäblich nicht tun kann.

lockAES-256-GCM vpn_keyPBKDF2-SHA256 · 310,000 linkFragment oder Passphrase memoryWeb Crypto API

Was „Zero-Knowledge" hier bedeutet

Eine nützliche, marketingfreie Definition: Der Dienst, der Ihre geteilte Datei speichert, hat keinerlei Wissen — weder kryptographisch noch operativ — das zum Entschlüsseln dienen könnte. Der Schlüssel berührt den Server nie, also kann der Server ihn unter keinen Umständen preisgeben.

memory
Verschlüsselung passiert in Ihrem Browser
Nicht auf dem Server, nicht in einem Worker, den Sie nicht kontrollieren — in Ihrem Tab, via window.crypto.subtle. Nachprüfbar in den DevTools.
cloud_off
Nur Chiffretext wird hochgeladen
Der Upload-Body ist AES-256-GCM-Chiffretext. PDF, Dateiname und Metadaten erreichen den Server nie in lesbarer Form.
vpn_key
Der Schlüssel reist mit dem Empfänger
Entweder im URL-Fragment (wird nie an Server gesendet) oder aus einer vom Sender gewählten Passphrase abgeleitet. So oder so: wir sehen ihn nie.
block
Keine Wiederherstellung = keine Hintertür
Link verloren oder Passphrase vergessen? Die Datei ist endgültig weg. Zero-Knowledge bedeutet: Der Wiederherstellungsweg, der die Garantie schwächen würde, existiert nicht.

Wie ein Zero-Knowledge-PDF-Link gebaut wird

Eine Erklärung, was der Sender-Browser, der Server und der Empfänger-Browser jeweils tun — mit den tatsächlichen Web-Crypto-Aufrufen.

1 — Sender-Browser
// 256-bit AES key, generated locally key = crypto.subtle.generateKey({name:"AES-GCM", length:256}) // fresh 96-bit IV per file iv = crypto.getRandomValues(new Uint8Array(12)) // encrypt locally; GCM gives us an auth tag for integrity ct = crypto.subtle.encrypt({name:"AES-GCM", iv}, key, pdfBytes) // upload ciphertext + iv (and salt, if passphrase mode) id = await PUT("/api/transfer", ct, {iv, expiry})
2 — Form des Share-Links
// fragment mode: key lives after # link_f = `https://pdfpro.tools/s/${id}#${b64url(rawKey)}` // passphrase mode: no key in the link; recipient must know the passphrase link_p = `https://pdfpro.tools/s/${id}`
3 — Server speichert opake Bytes
ciphertext = ??? // random-looking, unreadable iv = 12-byte nonce salt = 16-byte random (passphrase mode only) expiry = 24h free / 30d Pro
4 — Empfänger-Browser
// browsers never transmit the URL fragment to the server rawKey = /* from location.hash OR */ PBKDF2(passphrase, salt, 310_000, "SHA-256") ct = await GET("/api/transfer/" + id) pdf = crypto.subtle.decrypt({name:"AES-GCM", iv}, importKey(rawKey), ct) // browser serves pdf to Downloads

Fragment-Modus vs. Passphrase-Modus

Zwei Wege, den Schlüssel zum Empfänger zu bringen. Gleiche Chiffretext-Garantie, unterschiedliche Usability-/Leak-Kompromisse.

Fragment-Modus

Schlüssel reist im URL-Hash (#)

Der einfachste Ablauf: Link kopieren, in einen Chat zum Empfänger einfügen, fertig. Der Teil der URL nach # wird von keinem konformen Browser an einen Webserver gesendet — das hält den Schlüssel privat.

  • Ein Schritt für den Empfänger — auf den Link klicken.
  • Geringe Reibung, geeignet für niedrig-bis-mittelsensible Freigaben.
  • Risiko: Lekt der Link via Screenshot oder Browser-Sync, leakt die Datei mit.
  • Nutzen Sie es, wenn Sie dem Kanal vertrauen (signierter Messenger, interner Chat).
Passphrase-Modus

Schlüssel aus Passphrase abgeleitet (PBKDF2)

Der Sender wählt eine Passphrase. Der Browser leitet einen 256-Bit-Schlüssel via PBKDF2-SHA256 mit 310.000 Iterationen über ein zufälliges 128-Bit-Salt ab. Das Salt wird serverseitig gespeichert; die Passphrase wird außerhalb des Kanals geteilt (Telefon, Signal, persönlich).

  • Zwei-Faktor-Share: Link und Passphrase reisen getrennt.
  • Link allein reicht nicht — der Chiffretext bleibt unlesbar.
  • Passphrase-Stärke zählt: 310k Iterationen verlangsamen Brute-Force, retten aber keine 6-Zeichen-Passphrase.
  • Nutzen, wenn der Link weitergeleitet oder an Orten gespeichert werden könnte, denen Sie nicht voll vertrauen.
EigenschaftFragment-ModusPassphrase-Modus
Schlüssel-TrägerURL-Hash (#)Passphrase + Salt
Server sieht den Schlüssel jeNeinNein
Server speichertChiffretext + IVChiffretext + IV + Salt
Empfänger-AufwandLink klickenLink klicken + Passphrase eingeben
Per Screenshot leakbarJa (Link = Schlüssel)Nein (Link allein nutzlos)
Brute-Force-resistent256-Bit-ZufallHängt von der Passphrase ab
Am besten fürFriktionsarmes Teilen über vertrauenswürdige KanäleTeilen mit höherer Sensibilität

Warum ein serverseitig gespeicherter Chiffretext Sie trotzdem schützt

Häufige Frage: „Wenn es auf Ihrem Server ist, wie ist es privat?" Antwort: Chiffretext ist nicht die Datei. Ohne Schlüssel sind es nur zufällig aussehende Bytes. Was das in der Praxis bedeutet.

storage
Datenbank-Breach = Chiffretext-Leak
Kompromittiert ein Angreifer unsere Datenbank, geht er mit opaken Bytes fort. Eine einzige Datei zurückzugewinnen, erfordert Brute-Force eines 256-Bit-Schlüssels — mit bekannter Physik unmöglich.
gavel
Vorladung erzeugt Chiffretext
Ein Gericht kann uns zur Herausgabe dessen zwingen, was wir haben. Was wir haben, ist Chiffretext. Eine Gerichtsanordnung kann nicht rückwirkend einen Schlüssel erschaffen, den wir nie gespeichert haben.
group
Insider-Zugriff wird neutralisiert
Ein böswilliger Mitarbeiter mit vollen Datenbank-Credentials kann Dateien dennoch nicht lesen. Die Garantie wird mathematisch erzwungen, nicht durch Zugriffskontrolle.
timer
Ablauf stärkt die Garantie
Chiffretext wird bei Ablauf gelöscht (24 h Free, bis 30 Tage Pro). Danach ist auch der Chiffretext weg — die einzige Kopie der Datei existiert dort, wo sie entschlüsselt wurde.

warningEhrliche Einschränkungen

Zero-Knowledge löst nicht die Endgeräte-Sicherheit. Malware auf dem Gerät von Sender oder Empfänger kann den Schlüssel aus dem Speicher stehlen. Eine kompromittierte Browser-Erweiterung kann die entschlüsselte Datei lesen. Und ein weitergeleiteter Link in einem Gruppenchat hebelt jede kryptographische Garantie aus. Die Architektur erhöht die Kosten eines Breaches; sie beseitigt nicht alle Risiken.

Zero-Knowledge vs. andere „sichere" Optionen

Ein klarer Vergleich gängiger Optionen zum Teilen einer PDF. Die meisten mit „sicher" beschrifteten Optionen sind transport-verschlüsselt, aber nicht Zero-Knowledge.

OptionTLS im TransitServer kann Datei lesenAblaufEmpfänger-Konto
E-Mail-AnhangMeistens jaJa — an jedem HopFür immerNicht nötig
Generischer Cloud-LinkJaJaOptionalManchmal
Passwortgeschütztes PDFJaJa (wenn der Host die Datei hat)NieNicht nötig
PDF Pro (Fragment-Modus)JaNein24 h / 30 TNicht nötig
PDF Pro (Passphrase-Modus)JaNein24 h / 30 TNicht nötig

Häufige Fragen

Was bedeutet Zero-Knowledge-PDF-Sharing eigentlich?
Das heißt: Der Server, der Ihre geteilte Datei speichert, kann sie buchstäblich nicht entschlüsseln. Der Schlüssel wird im Browser des Senders erzeugt, nie hochgeladen, und nur der Browser des Empfängers kann ihn rekonstruieren — entweder aus dem URL-Fragment oder aus einer vom Sender außerhalb des Kanals geteilten Passphrase. Die Garantie wird durch Kryptographie erzwungen, nicht durch eine Zugriffsrichtlinie, die wir ändern könnten.
Welche Verschlüsselung nutzt PDF Pro für Zero-Knowledge-Sharing?
Symmetrische AES-256-GCM-Verschlüsselung mit zufälligem 96-Bit-IV pro Datei. Im Passphrase-Modus werden Schlüssel via PBKDF2-SHA256 mit 310.000 Iterationen über ein zufälliges 128-Bit-Salt abgeleitet. Die gesamte Krypto läuft in der nativen Web-Crypto-API des Browsers.
Was ist der Unterschied zwischen Fragment- und Passphrase-Modus?
Der Fragment-Modus legt den 256-Bit-Schlüssel in den URL-Hash (nach #), den Browser nie an irgendeinen Server senden. Jeder mit dem vollständigen Link kann entschlüsseln. Der Passphrase-Modus leitet den Schlüssel aus einer vom Sender gewählten Passphrase ab; ohne sie bleibt der Chiffretext unlesbar. Leakt der Link, ist der Passphrase-Modus sicherer; für friktionsarmes Teilen ist der Fragment-Modus einfacher. Siehe Vergleichstabelle oben.
Ist ein URL-Fragment als Schlüssel-Träger wirklich sicher?
Konforme Browser übertragen den Fragment-Teil einer URL (nach #) nie an den Server. Er bleibt client-seitig und ist nur für JavaScript im Tab des Empfängers sichtbar. Genau das macht den Share-Link selbst zum Entschlüsselungs-Credential — der Schlüssel reist mit dem Empfänger, nicht mit dem Upload. Nachprüfbar im Netzwerk-Tab Ihres Browsers: Die Request-URL wird bei ? oder # abgeschnitten.
Können PDF Pro oder ein Gericht per Zero-Knowledge-Sharing gespeicherte Dateien lesen?
Nein. Der Server speichert AES-256-GCM-Chiffretext plus IV (plus Salt im Passphrase-Modus). Ohne den Schlüssel — den wir nie erhalten haben — sind diese Daten kryptographisch nicht von Zufallsbytes unterscheidbar. Wir können nur Chiffretext herausgeben — mehr haben wir nicht.
Was passiert, wenn ich den Link verliere oder die Passphrase vergesse?
Die Datei ist dauerhaft unwiederbringlich. Das ist so gewollt — Zero-Knowledge bedeutet keinen Wiederherstellungsweg, weil ein solcher erfordern würde, dass wir den Schlüssel halten. Passphrase in einen Passwortmanager speichern und Link dauerhaft aufbewahren.
Ist Zero-Knowledge-PDF-Sharing kostenlos?
Ja. Die kostenlose Stufe unterstützt AES-256-GCM-Verschlüsselung und 24-Stunden-Link-Ablauf ohne Anmeldung. Das Free-Limit liegt bei ca. 25 MB pro Transfer; Pro erweitert das Ablauf-Fenster auf 30 Tage und erhöht die Dateigrößen-Limits.
Braucht der Empfänger ein Konto?
Nein. Der Empfänger klickt den Link, sein Browser entschlüsselt lokal via Web-Crypto-API und lädt die Datei herunter — keine Anmeldung, keine Installation, keine Portalmauer zwischen ihm und der Datei.

Senden Sie einen Zero-Knowledge-Link. Lassen Sie ihn planmäßig ablaufen.

AES-256-GCM-Verschlüsselung im Browser. Keine Anmeldung, kein serverseitiger Klartext, keine Wiederherstellungs-Hintertür.

sendVerschlüsselten Link erstellen