Security — AES-256-GCM, zero-knowledge, threat model

How Filarr protects your data: files encrypted on your disk, KEK/FEK architecture, optional end-to-end encrypted cloud sync.

KEK / FEK Architecture

Filarr uses a two-level key system. Each file is encrypted with its own File Encryption Key (FEK) using AES-256-GCM. The FEK is itself protected by a Key Encryption Key (KEK) derived with PBKDF2-SHA-512, 600,000 iterations — the exact same derivation for your password and for your recovery phrase. If one FEK is compromised, only that file is exposed — not the rest of your data.

Which derivation, for which key

A product sold on encryption should be able to say which one, where, and with what parameters. Here is the full table, read back from the code of all three surfaces — desktop, web and mobile.

PathDerivationParametersSurfaces
Account password → KEKPBKDF2-SHA-512600,000 iterations, 16-byte salt, AES-GCM-256Desktop, web, mobile
Recovery phrase → KEKPBKDF2-SHA-512600,000 iterations — the exact same function as aboveDesktop, web, mobile
Local vault key, at restNone — random 256-bit keySealed by the system keychain (DPAPI, Keychain, Keystore)Desktop, mobile
File contentNone — encrypted under its FEKAES-256-GCM, 96-bit IV, 128-bit tagAll
Block-synced file (delta)HKDF-SHA-256Derived from the FEK, 16-byte salt, “filarr-delta-v4” context, 32-byte outputDesktop, web
Custody key (escrow)Argon2idm = 19 MiB, t = 2, p = 1, 32-byte outputDesktop, web, mobile
Password-protected Filarr SendArgon2idm ≤ 64 MiB, t ≤ 10, p = 1 — clamped by the serverDesktop, web, mobile
Passkey unlock (WebAuthn PRF)HKDF-SHA-256Separate, versioned domainDesktop, web
Device pairingHKDF-SHA-256 over ECDH P-256Uncompressed 65-byte public keys, 32-byte shared secretDesktop, web, mobile

Two points that often get lost. The FEK that encrypts your files is randomly generated, never derived from a password: the password only protects its wrapper. And passkey unlock exists on desktop and web only — on mobile, the second factor is a TOTP code. The key for block-synced files is derived from the FEK, never from a password either. Its context stays “filarr-delta-v4” even in the latest manifest layout: the derivation context is deliberately not versioned alongside the data layout, since changing one would make the other unreadable.

Your password stays with you

All encryption and decryption happens on your machine, and your password never leaves your device. Two distinct protections coexist, and it helps to know which does what. What leaves the machine — the copy of your key that makes multi-device access possible — is protected by a key derived from your password with PBKDF2-SHA-512, 600,000 iterations: without that password, the copy is useless, to us included. What stays on disk is encrypted with AES-256-GCM under a randomly generated key sealed by the operating system’s own vault — DPAPI on Windows, the Keychain on macOS, Keystore on Android. That model protects a stolen disk or a backup image; it does not protect against someone who already has your unlocked session. An honest caveat: on a Linux machine with no working keyring, Filarr falls back to a permission-restricted file, and the protection against disk theft no longer applies. When cloud sync is on, our servers (Cloudflare R2) only ever receive encrypted blobs.

What the app sends, and when →

The Filarr vault unlock screen: the profile and the vault password field
Your password never leaves your device
No account required for local use
No ads, no tracking
Full control over your data

Two-factor authentication (TOTP)

Optional from Settings > Security inside the app. Compatible with any standard TOTP app (Authy, Google Authenticator, 1Password, Bitwarden). At login: password, then a 6-digit code. 8 single-use backup codes are generated at activation so you aren't locked out if you lose your TOTP device.

The TOTP secret is stored server-side (required to verify codes) but grants no access to your files — it only protects the login to your account. Your password remains the only key that unlocks your data encryption.

  • TOTP RFC 6238 (SHA-1, 6 digits, 30s period)
  • Every standard TOTP app: Authy, Google Authenticator, 1Password, Bitwarden
  • 8 single-use backup codes, hashed server-side
  • Rate-limited to 10 attempts / 15 min / IP

Threat Model

Since your plaintext data never leaves your machine — and the copy of your key we store is useless without your password — Filarr’s threat model is fundamentally different from a typical cloud service. The main threats are physical access to your device, losing your password, or a password weak enough to be brute-forced if our servers were ever compromised (which is why we strongly recommend a password manager).

  • Physical access to deviceProtected by AES-256-GCM encryption
  • Password lossRecoverable via recovery phrase only
  • Malware on deviceKeys in memory only during use
  • Disk theftEncrypted with AES-256-GCM, key sealed by the system keychain
  • Brute force attackPBKDF2-SHA-512, 600,000 iterations
  • Online account takeoverProtected by optional TOTP 2FA

What this means in real life

Encryption is only useful if it protects you in the situations that actually happen.

Your laptop gets stolen

Your files are encrypted with AES-256-GCM. Without your vault password, they’re unreadable — even with full disk access. The thief gets an encrypted hard drive, not your documents.

Protected

A cloud provider gets breached

Filarr only stores encrypted blobs on our servers. Your files are encrypted on your device before upload. Even if our storage is compromised, attackers get unreadable ciphertext — not your files.

Protected

A legal request for your data

If Filarr receives a legal request, we can only hand over encrypted blobs — files plus the encrypted copy of your key. Without your password nothing is decryptable, and we never see your password. This isn’t a policy — it’s a technical fact.

Protected

You forget your vault password

This is the cost of end-to-end encryption. Your key is protected by a derivative of your password (PBKDF2-SHA-512, 600,000 iterations), and your password is never transmitted to us — if you lose it, we cannot recover your data. We recommend using a password manager and exporting a recovery key from Settings > Security.

Your responsibility

What if Filarr gets curious?

We can’t. Your files are encrypted with a random key, itself protected by a key derived from your password using PBKDF2-SHA-512 with 600,000 iterations. We store that key in encrypted form to enable multi-device access, but we never see your password — so we can never unwrap it. Our servers only see random-looking bytes.

Protected by design

Your internet goes down mid-session

Filarr is local-first. Everything works offline — notes, files, graph, canvas. Changes sync automatically when you reconnect. No internet required to access your own files.

Works offline

Multi-profile isolation

Each profile in Filarr has its own set of encryption keys. Data in a “Personal” profile is completely isolated from a “Client A” profile. Even if one profile is compromised, the others remain protected.

Filarr profile selection — each profile has its own encryption

What our servers still know

End-to-end encryption protects the CONTENT, not the fact that you use it. Our servers therefore see some traces of use — never what is written, never a file name, never a title. Here they are in full, rather than in a footnote.

Mentions

That you mentioned someone, in which item of which vault, and when.

Never the note’s text or its title: your device resolves them with your keys.

Live co-editing

Which devices are connected to which note, and when.

Never what is typed there: the relay forwards encrypted bytes it cannot open. This feature is off by default.

Phone notifications

They travel through Google’s servers, and carry the name of the person who mentioned you.

Never a title or an excerpt — what we do not have cannot become readable elsewhere.

Sync

The number of files, their size, the date they last changed.

Never their names, never their content, never the shape of your folders.

What we’re still working on

Cloud sync is live with end-to-end encryption — your files are encrypted on your device before upload. The desktop client is now published on GitHub under Business Source License 1.1: you can read the code and verify the cryptographic claims directly, rather than trusting us on our word. An independent security audit is on the roadmap. There’s no SOC2 or HIPAA certification yet.

Same guarantee for file sharing

Filarr Send applies the same AES-256-GCM encryption. The key stays in the URL, never on our servers.

See how it works →