Security
Built to be checked.
How we protect what you send, how to tell us about a problem, and how to check the code your browser runs.
How it’s protected
- End-to-end encrypted. Messages and files are locked on your device with AES-256-GCM. The key is in the part of the link after the #, which browsers never send to us.
- Quantum-resistant. Links use 256-bit keys. Requests and private replies combine a classic lock (P-256) with ML-KEM-768, the US government’s 2024 standard, so breaking them means breaking both.
- Rules enforced by our servers. One-time opens, expiry, and the three-try limits are enforced in a single database step, so two people opening a link at the same moment can’t both get it.
- Erased, not hidden. The encrypted message is deleted the moment it’s opened for the last time. Files are deleted as soon as the download finishes.
- Nothing from anywhere else. A strict browser security policy allows only our own code. No outside scripts, fonts, analytics, ads, or cookies.
The details are on How it works and Transparency.
Report a security problem
If you think you’ve found a weakness, please email hello@safewith.us with “Security” in the subject. Tell us what you found, how to reproduce it, and what it could affect. We’ll reply within 3 business days and keep you updated until it’s fixed.
Good-faith research is welcome. Please:
- Use only your own links. Test with links and requests you created. Never try to open anyone else’s messages.
- Keep the service running. No denial-of-service, spam, or automated floods.
- Leave people out of it. No phishing or tricking our users, and no attacks on our providers.
- Give us time. Allow 90 days for a fix before sharing details publicly.
If you follow these rules, we’ll treat your research as authorized and won’t take legal action over it. We don’t run a paid bug bounty yet, but we’re happy to thank you publicly if you’d like. Machine-readable details are at /.well-known/security.txt.
Check the code yourself
Below is every script our site runs in your browser, with its SHA-256 fingerprint. If even one character of a file changed, its fingerprint would be completely different. Check your browser’s copy right here, or check any file on your own computer:
curl -s https://safewith.us/crypto.js | shasum -a 256
These fingerprints show that the code reached you unchanged. They can’t show what the code does. If you’d like to review it, email us. The post-quantum code in /vendor/mlkem.js is the unmodified open-source @noble/post-quantum library, which we test against the US government’s official results.
Found something?
We take every report seriously, and we’ll keep you posted.
Email hello@safewith.us