Absolute privacy
May·Secret is built around one fundamental principle: we cannot read your files. Not as a policy choice, but as a technical impossibility.
A zero-knowledge architecture
In a zero-knowledge architecture, the server only ever receives data it's mathematically unable to decrypt. Your files are encrypted in your browser, before they even reach the network. May Software holds no key that could give access to your data. Even under a court order, we can only hand over unreadable encrypted content.
How the encryption works
Generating your key pair (at signup)
When you sign up, your browser generates an asymmetric key pair with
libsodium crypto_box_keypair
(Curve25519, 256 bits). The public key is sent to the server to encrypt your files.
The private key never leaves your device in clear text.
Protecting the private key with your password (Argon2id)
Your private key is encrypted with a key derived from your password via
crypto_pwhash (Argon2id).
Argon2id is the derivation algorithm recommended by NIST in 2022: it's deliberately
slow in memory and CPU to resist brute-force attacks, even from specialized hardware (GPU, ASIC).
The server only stores the encrypted private key along with the salt and nonce — never the password.
Encrypting each file (XChaCha20-Poly1305)
On every upload, a unique random symmetric key is generated for the file.
The file is encrypted in streaming mode with
crypto_secretstream_xchacha20poly1305:
an AEAD algorithm (Authenticated Encryption with Associated Data) that guarantees both
confidentiality (XChaCha20) and integrity (Poly1305 MAC).
Any tampering with the encrypted data is detected and rejected on decryption.
Protecting the file's key (asymmetric encryption)
The file's symmetric key is itself encrypted with your public key
via crypto_box_seal (X25519 + XSalsa20-Poly1305).
Only your private key — which only you hold — can decrypt it.
The server thus stores the file's key in encrypted form, without ever being able to use it.
Download and in-memory decryption
On download, your browser fetches the encrypted file, decrypts the symmetric key with your private key (held only in RAM), then decrypts the file in memory. The clear-text file never travels over the network. Your decrypted private key is never written to localStorage, sessionStorage, or a cookie — it disappears when the tab is closed.
What May Software can and can't see
✕ We cannot see
- The content of your files
- The original name of your files
- The name of your folders
- Your private key
- Your password (nor its hash)
- Your files' encryption keys
✓ We can only see
- Your email address
- The size of your files
- The upload date
- The MIME type (image, PDF…)
- Your used storage quota
- Your subscription plan
Stateless authentication (JWT RS256)
Authentication relies on JWT tokens signed with RSA 256-bit (LexikJWTAuthenticationBundle). No session is stored server-side: each request is authenticated by the token alone, signed with the API's private RSA key. A compromised token doesn't grant access to files — you'd also need the user's libsodium private key, which is never transmitted to the server.
The token is stored in sessionStorage
(lifetime limited to the tab) rather than in localStorage
to limit exposure to persistent XSS attacks.
Cryptographic libraries used
| Library | Use | Algorithm |
|---|---|---|
| libsodium-wrappers-sumo | File and key encryption | XChaCha20-Poly1305, Curve25519, Argon2id |
| sodium (PHP) | Server-side key generation (fixtures only) | Curve25519 |
| symfony/password-hasher | Password hashing | Argon2id |
| lexik/jwt-authentication-bundle | Authentication tokens | RSA 256-bit (RS256) |
Important consequence: losing your password
The guarantee of absolute confidentiality has a cost: if you forget your password, your files are unrecoverable. May Software has no private key recovery mechanism — that would be technically incompatible with a zero-knowledge architecture. Keep your password somewhere safe (a password manager is recommended).
Frequently asked questions about security
Can you really not read my files?
Can you really not read my files?
That's right. libsodium encryption happens in your browser before upload: we only ever receive and store already-encrypted data, and your private key never leaves your device.
Can I access my files from several devices (phone, new computer)?
Can I access my files from several devices (phone, new computer)?
Yes. Your private key, encrypted with your password, is synced with your account. On a new device, just sign in with your usual password: the key is then decrypted locally, just like on your other devices.
Where is my data hosted?
Where is my data hosted?
In France, at o2switch (Clermont-Ferrand), in compliance with GDPR.
Do you use recognized encryption standards?
Do you use recognized encryption standards?
Yes, libsodium, an open-source, widely audited cryptography library used by many privacy-focused services.
Are my file and folder names also encrypted?
Are my file and folder names also encrypted?
Yes, like file content, metadata (names, folder structure) is encrypted client-side before being stored.
Do you offer two-factor authentication?
Do you offer two-factor authentication?
Yes, email-based two-step verification is available to secure sign-in to your account.
What happens if I forget my password?
What happens if I forget my password?
Because encryption is end-to-end, no one — not even us — can decrypt your files without your password. Keep it safe or use a password manager.
Wondering who we are or what happens if the service shuts down? Check out our "Why trust May·Secret" page. For more technical detail, our Blog: encryption, GDPR, comparisons and guides by profession.
Ready to store your files with full confidentiality?