Mabits

Security

Who can read your passwords? You.

Your master password never leaves your device, and the server stores only ciphertext it has no key for. Here is how that works, where a quantum computer changes anything, and — at the end — what Mabits does not protect you from.

Your master password never leaves your device

One key, derived where you type

Your master password goes through Argon2id — m=19 MiB, t=2, p=1 — on your device. Two values are derived from the result: one opens your vault key, and the other is what signs you in. The sign-in value decrypts nothing, and the server hashes it again before storing it.

A server cannot talk you into a weaker key

The key-derivation settings are bound into the key itself, so a server that lied about them would produce a key that simply fails to open your vault. Settings below a fixed floor are refused before any work is done.

Every item has a key of its own

Each item is sealed with AES-256-GCM under a random key made for it, and that key is sealed under your vault key. Sharing one item hands over one key and nothing else, and a leaked item key opens exactly one item.

Changing your master password re-seals one key, not your whole vault.

Post-quantum where a quantum computer actually matters

A quantum computer does not break AES-256, which is why your vault is sealed with it. What it breaks is public-key cryptography — the kind used to hand a key to somebody else — and ciphertext recorded today can be kept until it can.

Keys sealed to another account use both

Sharing an item, an organisation’s keys and an emergency contact’s access are sealed with X25519 and ML-KEM-768 together. Breaking the result needs both broken — the elliptic curve by a quantum computer, the lattice by a classical break nobody has found.

Public keys are signed twice

The keys you share with are published signed by Ed25519 and ML-DSA-65, both required, and pinned the first time you see them — so a key swapped out afterwards is caught. The first contact is the gap, and comparing fingerprints closes it.

Checked against NIST, on every build

ML-KEM and ML-DSA are written in this project rather than pulled from a library, and every build runs them against NIST’s own test vectors. Where a platform already provides an audited primitive — AES-GCM, X25519, Ed25519 — the platform’s is used instead.

What our server can and cannot see

Cannot see

  • Your master password, in any form that opens anything
  • Anything inside an item — its name, username, password, website or notes
  • Your folder names
  • What you search for, which happens on your device
  • Which sites you keep: icons are drawn from the item, never fetched from them
  • The exact size of an item — every one is padded before it is sealed

Can see

  • The email address you sign in with
  • How many items you have, and when they change
  • Roughly how large an attachment is, to within a megabyte — never its name or type
  • When you sign in, and which devices are signed in

A breached server has what the server has. That is why none of it is a key.

Signing in

A security key cannot be phished

Two-step login takes an authenticator app or a security key. Prefer the key: a convincing copy of this page can ask for an app’s six digits and relay them, but a security key signs for the site the browser is really on, and a copy is not it.

A stolen session goes stale in minutes

Access tokens last fifteen minutes and the token that renews them is replaced every time it is used, so a copy taken from somewhere goes stale — and using one ends the session and says so.

Any device can be signed out, now

Every session is listed, and revoking one takes effect on its next request — there is no cache for it to outlive. Recovery codes are stored only as hashes.

The browser holding your vault runs nothing third-party

The one thing no encryption repairs is hostile script in the page where you type your master password. So the page holding your vault runs under default-src 'none': no remote origin can load anything into it, and it may not execute a string as code.

Zero third-party code in the client

Not a crypto library, not an analytics SDK, not a font from somebody else’s server. A build rule enforces the short dependency allowlist, refuses install scripts outright, and fails if a package arrives without an integrity hash.

An extension you can rebuild

The browser extension builds reproducibly: anyone can rebuild it from the source and get exactly the files the release publishes, checked against one published hash.

What Mabits does not protect you from

A security page that claims everything is worthless. These are the ones that matter.

Moving from somewhere else?

Your export is read on your device and never uploaded, and you see every item before anything is saved.

How Mabits protects your passwords — zero-knowledge, post-quantum encryption