Security, in plain terms
We designed Frnd around one rule: even we should not be able to see your sensitive information (e.g. credentials).
Your passphrase is the key
When you connect a service — e.g. your mail — you set an encryption passphrase. It is separate from how you log in, and we only ask for it when you are adding or changing something sensitive. That passphrase is what unlocks your data. We do not store your passphrase, and we cannot recover it for you if you lose it — because if we could, so could anyone who broke in.
In other words: Neither we (nor a hacker who might steal our database) can access your sensitive data.
Your AI Assistant also holds a key
Your connected AI Assistant holds a key of its own, separate from your passphrase. This is required so we can act on your AI Assistant's instructions without asking for your passphrase on every call.
Like your passphrase, we do not store these keys, and we cannot recover them. If you (or your AI Assistant) lose one of these keys, you will need to create a new one — that is, connect your AI Assistant to Frnd again.
You control what your AI Assistant can touch
Beyond encryption, you decide what your connected AI Assistant is allowed to do — read-only or read-write, specific folders, actions that need your approval first. And everything it does is logged, so you can check.
For the technically curious
Each user has a randomly generated 256-bit Data Encryption Key (DEK), which encrypts service credentials and sensitive policy configuration. The DEK itself never touches disk unencrypted — it is wrapped by one or more Key Encryption Keys (KEKs), each coming from a different source:
Scroll sideways to see the full diagram →
- Your encryption passphrase (run through Argon2id) derives a passphrase KEK that wraps the DEK. Argon2id is a memory-hard key derivation function designed to resist brute-force attacks.
- If your AI Assistant connects via OAuth, the refresh token issued during that flow carries a second KEK which wraps the same DEK as a separate copy.
- If instead you generate an API key yourself and hand it to your AI Assistant, that key carries its own KEK the same way.
Either path lets your AI Assistant operate without your passphrase on every call — it never sees the passphrase, and revoking a key only revokes that copy, independently of the others.
All key wrapping uses post-quantum-safe algorithms. Decrypted keys are held in memory only for the duration of a single operation, then dropped.