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

1

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.

2

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.

3

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.

4

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.

5

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?

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)?

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?

In France, at o2switch (Clermont-Ferrand), in compliance with GDPR.

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?

Yes, like file content, metadata (names, folder structure) is encrypted client-side before being stored.

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?

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?

May·Secret only uses storage strictly necessary for the service to work: a preference cookie to remember this notice and an authentication token in sessionStorage, deleted when the tab closes. No tracking or advertising cookies. Learn more