Client-side crypto first
Messages are encrypted in the browser using Web Crypto (AES-GCM). The server stores ciphertext and metadata.
This page describes the current implementation: which data is encrypted client-side, how links and keys are handled, which access controls are active, and where the model limits are.
Messages are encrypted in the browser using Web Crypto (AES-GCM). The server stores ciphertext and metadata.
Decryption keys are transported in URL fragments like #k or #rk and are not sent to the server.
Password-protected links use server-side password hashes plus additional client-side key wrapping (PBKDF2-SHA-256).
Expiry, view or submission limits, and one-time-read policies constrain access to sensitive content.
encrypted_payload, encrypted_key, crypto metadata, and access policy fields.Public access tokens are generated randomly, stored only as SHA-256 hashes in the database, and validated via hash_equals.
Link passwords are never stored in plaintext and are checked against server-side hashes. Password sessions for public links are time-limited and configurable.
Rate limiting is active for critical endpoints including password checks, public submissions, login, and verification flows.
Owner-side operations are protected by authentication, verified email state, and authorization policies; sensitive recovery mutations require recent password confirmation.
EncSend provides optional encrypted recovery artifacts for cross-device scenarios:
Security-relevant actions are logged, for example link issuance, access denied, password challenge steps, submission creation, and recovery updates.