Veiligheid
Zo min mogelijk weten, zo kort mogelijk bewaren.
Het ontwerp gaat ervan uit dat links lekken, mailboxen worden meegelezen en servers ooit worden gestolen. Elke laag beperkt de schade als een andere laag faalt.
Transport en opslag
- Alle verkeer loopt over TLS 1.2+ met HSTS; HTTP wordt geweigerd.
- Bestanden staan in Cloudflare R2 met EU-jurisdictie: opslag en verwerking blijven binnen de Europese Unie.
- Data at rest is versleuteld (AES-256, door de opslaglaag beheerde sleutels).
- Downloads worden rechtstreeks vanuit opslag gestreamd; er wordt niets gecachet aan de edge (
Cache-Control: no-store).
Pincode
- De pincode wordt nooit opgeslagen. We bewaren alleen een PBKDF2-SHA256-hash (100.000 iteraties) met een unieke 128-bit salt per bestand.
- Vergelijking gebeurt in constante tijd.
- Na 8 foute pogingen wordt het bestand én de metadata vernietigd. Daarnaast geldt rate limiting per IP op de pincode-controle.
- De bestandsnaam wordt pas vrijgegeven na een correcte pincode; de link zelf verraadt alleen grootte en vervaldatum.
Precies één download
- Een correcte pincode levert een eenmalig token op. Het uitgeven van dat token is een atomaire databasewijziging: twee gelijktijdige pogingen kunnen nooit allebei slagen.
- Bij de eerste byte van de download wordt het token ongeldig gemaakt — nog vóór het bestand wordt verzonden.
- Het object blijft daarna maximaal 3 uur beschikbaar voor de lopende stream en wordt dan definitief verwijderd. Een tweede verzoek met dezelfde link krijgt altijd 410.
Bewaartermijn en opruimen
- Niet-opgehaalde bestanden verlopen na 72 uur. Een geplande taak verwijdert elke 15 minuten alles wat verlopen is.
- Als vangnet dwingt de opslaglaag zelf een maximale levensduur van 4 dagen af en breekt ze onvoltooide uploads na 1 dag af.
Links en identifiers
- Bestands-ID's zijn 14 willekeurige tekens (≈ 82 bits) uit een CSPRNG; raden is niet realistisch.
- Download-tokens zijn 256 bits en eenmalig.
- Pagina's sturen geen
Referermee en zijn uitgesloten van zoekmachines.
Wat ZeroTransfer niet is
- Geen end-to-end-versleuteling: de opslaglaag kan het bestand technisch lezen. Wie dat niet wil, versleutelt het bestand vooraf (bijv. een met wachtwoord beveiligde 7z/zip of age/GPG) en gebruikt ZeroTransfer als transportlaag.
- Geen archief: alles wat ouder is dan 3 dagen bestaat niet meer, ook niet voor ons.
Kwetsbaarheid melden
Mail security@zerotransfer.org. We reageren binnen 72 uur en noemen je, als je wilt, in de credits.
Security
Know as little as possible, keep it as briefly as possible.
The design assumes links leak, mailboxes get read and servers eventually get stolen. Each layer limits the damage when another layer fails.
Transport and storage
- All traffic runs over TLS 1.2+ with HSTS; plain HTTP is refused.
- Files live in Cloudflare R2 with EU jurisdiction: storage and processing stay inside the European Union.
- Data at rest is encrypted (AES-256, keys managed by the storage layer).
- Downloads stream directly from storage; nothing is cached at the edge (
Cache-Control: no-store).
PIN
- The PIN is never stored. We only keep a PBKDF2-SHA256 hash (100,000 iterations) with a unique 128-bit salt per file.
- Comparison happens in constant time.
- After 8 wrong attempts both file and metadata are destroyed. On top of that, PIN verification is rate-limited per IP.
- The filename is only released after a correct PIN; the link itself reveals only size and expiry.
Exactly one download
- A correct PIN yields a one-time token. Issuing that token is an atomic database update: two simultaneous attempts can never both succeed.
- At the first byte of the download the token is invalidated — before the file is sent.
- The object then remains available for at most 3 hours for the running stream and is then permanently deleted. A second request with the same link always gets 410.
Retention and cleanup
- Uncollected files expire after 72 hours. A scheduled job removes everything expired every 15 minutes.
- As a safety net the storage layer itself enforces a maximum lifetime of 4 days and aborts incomplete uploads after 1 day.
Links and identifiers
- File IDs are 14 random characters (≈ 82 bits) from a CSPRNG; guessing is not realistic.
- Download tokens are 256 bits and single-use.
- Pages send no
Refererand are excluded from search engines.
What ZeroTransfer is not
- Not end-to-end encrypted: the storage layer can technically read the file. If that matters, encrypt the file first (e.g. a password-protected 7z/zip, or age/GPG) and use ZeroTransfer as the transport.
- Not an archive: anything older than 3 days no longer exists, not even for us.
Reporting a vulnerability
Email security@zerotransfer.org. We respond within 72 hours and credit you if you wish.