Skip to content

Security overview

How MGVault protects your data

A precise account of our cryptography, what our servers can and cannot see, how team sharing stays trustworthy — and the limitations we design around.

  • End-to-end encrypted
  • Keys derived on device
  • 4 data centers in Türkiye

Security program

How we test, review and respond — today.

  • Ongoing

    Internal security reviews

    We review the design and code in focused rounds. Findings are fixed and covered by tests before release.

  • In place

    Cryptography tests

    Our crypto package is checked against standard test vectors (RFC 9106, RFC 7693, RFC 7748, XChaCha20-Poly1305) and against an independent reimplementation of our formats.

  • Open

    Coordinated disclosure

    Report vulnerabilities by email. Contact details are also published in machine-readable form at /.well-known/security.txt.

An independent third-party security audit and a bug bounty program are planned.

Architecture at a glance

Keys are created and used on the client. The network carries ciphertext; the server stores what it cannot open.

MGVault architecture: on your device, Argon2id derives a login key and a key-encryption key; the key-encryption key wraps your account key, which protects collection keys, which encrypt items. Only ciphertext and a hashed login key travel over TLS to the API running in our data centers in Türkiye, which stores them in PostgreSQL with row-level security, writes an append-only audit log, and keeps encrypted backups.

Cryptographic primitives

We use well-studied, modern primitives from libsodium, the same library in the web app and the browser extension.

PurposePrimitiveParameters
Deriving keys from your master passwordArgon2idm = 64 MiB · t = 3 · p = 1
Encrypting items and keysXChaCha20-Poly1305256-bit · 192-bit nonce
Sharing collection keys with membersX25519 sealed boxcrypto_box_seal
Signing shared keys and key epochsEd25519RFC 8032
Salts and key fingerprintsBLAKE2bRFC 7693

Argon2id parameters are stored per account so they can be raised over time. Clients refuse parameters below a safe minimum, so a server can't weaken them.

How your keys fit together

Everything starts on your device. Here is the chain from your master password to an encrypted item.

  1. 1

    Your master password is stretched with Argon2id

    Together with a salt derived from your email, it produces 64 bytes on your device. Half becomes a login key, half becomes your key-encryption key.

  2. 2

    Only the login key is sent — and hashed again

    The server stores an Argon2id hash of the login key to check your login. The key-encryption key never leaves your device.

  3. 3

    Your account key is wrapped

    A random 256-bit account key is encrypted with your key-encryption key. It protects your private keys for sharing and signing.

  4. 4

    Each collection has its own key

    Personal and shared collections each use a random key, wrapped separately for every member with their X25519 public key.

  5. 5

    Items are encrypted and bound to their place

    Items are encrypted with XChaCha20-Poly1305. The item ID, collection and version are authenticated, so an encrypted item can't be swapped or rolled back unnoticed. Padding hides the exact length of your data.

What our servers can and cannot see

Zero-knowledge doesn't mean zero data. Here is the honest split.

Never visible to us
  • Your master password
  • Your encryption keys and private keys
  • Item titles, usernames, passwords, URLs and notes
  • 2FA (TOTP) secrets stored in your vault, and the codes made from them
  • Collection names in organizations
Visible to us (needed to run the service)
  • Your email address and organization names
  • Encrypted items, their IDs, approximate sizes and timestamps
  • Who belongs to which organization and collection, and their roles
  • Public keys, sessions and devices
  • Security events in the audit log, with masked IP addresses

What if our servers were breached?

The most honest way to judge a security model is to ask about the worst case. Here is our answer:

  1. Exposed: encrypted data only

    The database and backups contain encrypted items, wrapped keys and an Argon2id hash of your login key. None of these reveal vault contents directly.

  2. Not exposed: your keys

    Your master password, key-encryption key and account key never exist in plaintext on the server. There is no master key to steal.

  3. Remaining risk: master password guessing

    An attacker could try to guess your master password offline against the stolen data. Argon2id (64 MiB, 3 passes) makes every guess expensive; a long, unique master password reduces this risk substantially.

  4. Our obligation: timely notification

    In the event of a personal data breach we notify the Personal Data Protection Authority and affected users as soon as possible under Article 12 of KVKK, and tell you clearly what to do.

Sharing in teams

Sharing is where many designs quietly trust the server. Ours is built so that a compromised server can't quietly insert itself between team members.

  • Signed key epochs

    Every shared collection key is wrapped for a member with a sealed box and signed with Ed25519 by the person who shared it. Clients check the signature before opening anything.

  • Fingerprint verification

    Admins confirm new members by their key fingerprints, which you can compare over a trusted channel. Unverified keys aren't used for sharing.

  • Rotation when someone leaves

    Removing a member deletes their copies of the keys and moves the collection to a new key epoch. Clients refuse to write with an older key, so new items stay out of their reach.

  • An honest rotation checklist

    Someone who leaves may remember what they saw. MGVault lists the passwords and 2FA codes they could access, so you can change them.

Account and session security

Protecting the way in matters as much as protecting the vault.

  • Two-step login

    Add an authenticator app (TOTP) or passkeys (WebAuthn). The login TOTP secret is stored server-side, encrypted, because the server must check your code.

  • Short-lived sessions

    Access tokens expire after 15 minutes. Refresh tokens rotate on every use, and reuse of an old token revokes the whole session.

  • Devices you control

    See your active sessions and revoke any of them remotely. Security changes trigger an email notification.

  • Rate limits

    Login, registration and recovery attempts are rate limited per IP address and per account, and responses don't reveal whether an account exists.

  • Automatic locking

    Your vault locks after 15 minutes of inactivity, and keys are kept in memory only while it's unlocked.

Infrastructure

Layers that still protect you if one of them fails.

  • Four data centers in Türkiye

    Our servers and encrypted backups are distributed across four data centers in Türkiye: Datacasa, Mars Datacenter, Equinix and PenDC. The database and logs are kept in Türkiye and handled in line with KVKK.

  • Row-level security

    PostgreSQL row-level security separates organizations as a second line of defense behind the application's own checks.

  • Append-only audit log

    Audit events can be added but not edited by the application. Retention is 7 days on Free and 365 days on Team.

  • Encrypted backups

    Nightly database backups are encrypted to a public key on the server and stored across our data centers in Türkiye, where the providers cannot read them. The private key needed to restore them is kept offline, and restores are tested.

  • Strict browser policy

    A strict Content Security Policy with per-request nonces. No third-party scripts, fonts, trackers or analytics.

  • Payments kept apart

    When paid plans launch, card payments will be handled by iyzico on a separate origin. Card data won't touch our servers.

What you can verify yourself

You should not have to take our word for it. Several of our claims can be checked in your own browser.

  • Network traffic

    In your browser’s developer tools you can see that saving an item sends only encrypted data to the server.

  • Content Security Policy

    The CSP header on every response shows that pages run only nonce-bearing scripts from our own origin. There are no third-party scripts, fonts or trackers.

  • Key fingerprints

    By comparing fingerprints with teammates by phone or in person, you confirm that shared keys reach the right people.

  • Sessions and audit log

    You can review the active sessions on your account and your organization’s audit log, and end any session you do not recognize immediately.

Known limitations

No system is perfect. These are the trade-offs we know about today, stated plainly:

  • Lost master password and Emergency Kit. If you lose both, your data can't be recovered — by anyone, including us.
  • Your master password matters. Argon2id slows guessing a lot, but a short or reused password can still be guessed offline by someone who obtains the encrypted data.
  • First contact relies on trust. The first key you receive from a team member is trusted on first use unless you compare fingerprints out of band.
  • Some audit events come from clients. Copy and autofill events are reported by members' apps and can't be verified by the server; they are labeled as such.
  • Browser memory. We wipe keys from memory where JavaScript allows, but browsers may keep copies we can't erase.
  • The web vault loads its code from our server. Like every web application, the web vault downloads its code from our server each time it opens, so someone who controlled the server could in theory serve modified code. A strict CSP and the ban on third-party scripts narrow this surface; the browser extension ships its code with the installation and does not load remote code.

Reporting a vulnerability

Found something? We want to hear about it and will respond quickly.

Email us with details and steps to reproduce. Please give us reasonable time to fix the issue before disclosing it publicly.

muhammed@aliguc.com

/.well-known/security.txt

Get started

Start your vault in under a minute

Free for personal use. Your keys are created on your device — right now, in your browser.