Zero-Knowledge Architecture Explained: What It Means When We Say We Can't See Your Files
SecureEU Team
Privacy & Security
"Zero-knowledge" gets thrown around a lot in marketing copy. But at SecureEU, it's not a slogan — it's an architectural constraint that's verifiable by anyone who opens their browser's developer tools. Let us walk you through exactly what it means.
What Zero-Knowledge Means
A zero-knowledge service is one where the operator — that's us — has no technical ability to access the plaintext content you store or transmit through the platform. It's not a policy ("we promise not to look"). It's an engineering guarantee ("we cannot look, even if we wanted to").
How SecureEU Achieves It
Here's the exact flow when you upload a file:
Key generation: Your browser generates a random 256-bit AES-GCM key using crypto.subtle.generateKey(). This happens entirely in JavaScript, on your device.
Encryption: Every byte of your file is encrypted with that key using AES-256-GCM. For large files, this happens in 64 MB chunks, each with a unique initialisation vector (IV).
Upload: The encrypted blob is uploaded directly to Hetzner Object Storage via a presigned URL. Our application server generates the URL but never touches the file data.
Link creation: The download URL is constructed as /download/batch/id#key. The key lives in the fragment — the part after # — which browsers never send to servers.
What We Store
On our servers, we have:
- •The file name (for display purposes only)
- •The file size (for pricing)
- •An encrypted blob (useless without the key)
- •A Stripe session ID (for payment verification)
We do not store: email addresses, IP addresses, user accounts, names, the encryption key, or any form of personal identifier.
Verify It Yourself
Open your browser's Network tab while uploading a file. You'll see the encrypted data going directly to Hetzner via a presigned URL. Check the download link — the key is in the fragment. Inspect the requests to our server — you'll find no file content and no key. Zero-knowledge isn't something you have to take our word for. It's something you can verify.