diff --git a/README.md b/README.md index 7f1097b..d900566 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Vault data is encrypted on the client with a key derived from your master password, and the server only ever stores ciphertext + KDF parameters. A database breach leaks nothing usable. -![Passman vault dashboard](docs/img/vault.png) +![Passman vault dashboard with Edit, Import, and Connect actions per row](docs/img/vault.png) The vault treats credentials as connection targets, not just `name + password` rows: every entry carries protocol, hostname, IP, port, and @@ -18,6 +18,14 @@ auto-clear; the server still sees only ciphertext. ![Connect dialog with JDBC, SSH, copy-command, and RDP options](docs/img/vault-connect.png) +Login is optionally protected by **TOTP 2FA** (Google Authenticator, +1Password, Authy, …) with single-use recovery codes. Vault contents +remain zero-knowledge regardless — even if the OTP secret leaks, the +master key the server never sees is still the only thing that decrypts +the vault. + +![Two-factor authentication setup with QR code and recovery codes](docs/img/settings-2fa-setup-qr.png) + ## Architecture at a glance ``` diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 39d6e43..06abd1b 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -222,7 +222,7 @@ The dialog greys out actions that don't apply to a credential: Click **+ New credential** in the top-right: -![Add credential form with Protocol, Database, Environment, and per-engine fields](img/vault-add.png) +![Add credential form with the password generator open and the SSH private-key textarea visible](img/vault-add.png) The form is **protocol-aware**: @@ -357,14 +357,20 @@ schema bump. ### 5g. Two-factor authentication (TOTP) -Open the **Settings** link in the sidebar's user card → click **Set up 2FA**. +Open the **Settings** link in the sidebar's user card. With 2FA off, +the Security section shows a single "Set up 2FA" call to action: -The setup flow has three steps: +![Settings page with 2FA disabled](img/settings-2fa-off.png) + +Click **Set up 2FA** to start the three-step setup flow: 1. **Scan the QR** with your authenticator (Google Authenticator, 1Password, Authy, Microsoft Authenticator, …). If your phone can't reach the screen, expand "Can't scan? Type this manually" and copy the base32 secret directly into the app. + + ![2FA setup — scan QR step](img/settings-2fa-setup-qr.png) + 2. **Confirm the first code.** Type the 6-digit code your authenticator shows. Passman verifies against the stored secret and only then flips the `totp_enabled` flag — if you abandon the flow before this @@ -374,9 +380,19 @@ The setup flow has three steps: them, download the `.txt`, or write them down — Passman keeps only Argon2id hashes server-side, so this list cannot be retrieved later. -Once enabled, login becomes two-step: email + master password, then a -6-digit code. Recovery codes work in place of the 6-digit code (and -are consumed on first use — `9 remaining` becomes `8`). + ![2FA setup — save recovery codes step](img/settings-2fa-setup-recovery.png) + +Once enabled, the Settings page shows the active state + how many +recovery codes are left: + +![Settings page with 2FA enabled](img/settings-2fa-on.png) + +Login becomes two-step: email + master password (the existing screen), +then a 6-digit code on a second screen. Recovery codes work in place +of the 6-digit code (and are consumed on first use — `9 remaining` +becomes `8`): + +![Two-factor verification step on login](img/login-otp.png) > **Trade-off, plainly stated.** TOTP is **not** zero-knowledge — > RFC 6238 requires the verifier to know the shared secret, so the diff --git a/docs/img/login-otp.png b/docs/img/login-otp.png new file mode 100644 index 0000000..f38159f Binary files /dev/null and b/docs/img/login-otp.png differ diff --git a/docs/img/settings-2fa-off.png b/docs/img/settings-2fa-off.png new file mode 100644 index 0000000..677fb28 Binary files /dev/null and b/docs/img/settings-2fa-off.png differ diff --git a/docs/img/settings-2fa-on.png b/docs/img/settings-2fa-on.png new file mode 100644 index 0000000..c607112 Binary files /dev/null and b/docs/img/settings-2fa-on.png differ diff --git a/docs/img/settings-2fa-setup-qr.png b/docs/img/settings-2fa-setup-qr.png new file mode 100644 index 0000000..a25e615 Binary files /dev/null and b/docs/img/settings-2fa-setup-qr.png differ diff --git a/docs/img/settings-2fa-setup-recovery.png b/docs/img/settings-2fa-setup-recovery.png new file mode 100644 index 0000000..da867c9 Binary files /dev/null and b/docs/img/settings-2fa-setup-recovery.png differ diff --git a/docs/img/vault-add.png b/docs/img/vault-add.png index 7b3e5fb..80dbdb1 100644 Binary files a/docs/img/vault-add.png and b/docs/img/vault-add.png differ diff --git a/docs/img/vault-connect.png b/docs/img/vault-connect.png index a4a2322..edda1eb 100644 Binary files a/docs/img/vault-connect.png and b/docs/img/vault-connect.png differ diff --git a/docs/img/vault.png b/docs/img/vault.png index 9f3440f..1d96160 100644 Binary files a/docs/img/vault.png and b/docs/img/vault.png differ diff --git a/docs/preview/index.html b/docs/preview/index.html index 9fda7b1..2e3d999 100644 --- a/docs/preview/index.html +++ b/docs/preview/index.html @@ -16,9 +16,14 @@

Passman screenshots

  • Register
  • Login — default branding
  • Login — with white-label override (Acme)
  • -
  • Vault — sidebar dashboard
  • +
  • Login — 2FA OTP step
  • +
  • Vault — sidebar dashboard (Edit + Import + Settings)
  • Vault — Connect dialog (JDBC / SSH / RDP / copy-command)
  • -
  • Vault — add credential form
  • +
  • Vault — add credential form (password generator + SSH key)
  • +
  • Settings — 2FA disabled
  • +
  • Settings — 2FA setup, scan QR step
  • +
  • Settings — 2FA setup, save recovery codes
  • +
  • Settings — 2FA enabled
  • Extension — locked
  • Extension — unlocked
  • diff --git a/docs/preview/login-otp.html b/docs/preview/login-otp.html new file mode 100644 index 0000000..45b8cdb --- /dev/null +++ b/docs/preview/login-otp.html @@ -0,0 +1,37 @@ + + + + + + Passman — Two-factor verification + + + +
    +
    +
    + Passman +
    +

    Two-factor verification

    +

    + Enter the 6-digit code from your authenticator app, or one of your + recovery codes. +

    +
    + + +
    +

    + +

    +
    + + diff --git a/docs/preview/settings-2fa-off.html b/docs/preview/settings-2fa-off.html new file mode 100644 index 0000000..92d9cc5 --- /dev/null +++ b/docs/preview/settings-2fa-off.html @@ -0,0 +1,44 @@ + + + + + + Passman — Settings + + + +
    +
    +
    + Passman +
    +

    Settings

    +

    Zero-knowledge password manager

    + +
    +
    +

    Two-factor authentication

    +

    + Adds a 6-digit code from your authenticator app (Google Authenticator, + 1Password, Authy, …) to login. Note: enabling 2FA + stores the OTP secret server-side. Vault contents stay encrypted + with your master key — the server still can't read them. +

    +
    + +
    +
    +
    + Not enabled +
    +
    + +
    +
    + +

    + ← Back to vault +

    +
    + + diff --git a/docs/preview/settings-2fa-on.html b/docs/preview/settings-2fa-on.html new file mode 100644 index 0000000..0106e84 --- /dev/null +++ b/docs/preview/settings-2fa-on.html @@ -0,0 +1,45 @@ + + + + + + Passman — Settings (2FA enabled) + + + +
    +
    +
    + Passman +
    +

    Settings

    +

    Zero-knowledge password manager

    + +
    +
    +

    Two-factor authentication

    +

    + Adds a 6-digit code from your authenticator app (Google Authenticator, + 1Password, Authy, …) to login. Note: enabling 2FA + stores the OTP secret server-side. Vault contents stay encrypted + with your master key — the server still can't read them. +

    +
    + +
    +
    +
    + Enabled +
    +
    9 recovery codes remaining
    +
    + +
    +
    + +

    + ← Back to vault +

    +
    + + diff --git a/docs/preview/settings-2fa-setup-qr.html b/docs/preview/settings-2fa-setup-qr.html new file mode 100644 index 0000000..e31e4ff --- /dev/null +++ b/docs/preview/settings-2fa-setup-qr.html @@ -0,0 +1,71 @@ + + + + + + Passman — Set up 2FA + + + +
    +
    +
    + Passman +
    +

    Settings

    +

    Zero-knowledge password manager

    + +
    +
    +

    Two-factor authentication

    +

    + Adds a 6-digit code from your authenticator app to login. +

    +
    +
    +
    +
    + Not enabled +
    +
    + +
    +
    +
    + + + + + diff --git a/docs/preview/settings-2fa-setup-recovery.html b/docs/preview/settings-2fa-setup-recovery.html new file mode 100644 index 0000000..e37369e --- /dev/null +++ b/docs/preview/settings-2fa-setup-recovery.html @@ -0,0 +1,72 @@ + + + + + + Passman — Save your recovery codes + + + +
    +
    +
    + Passman +
    +

    Settings

    +

    Zero-knowledge password manager

    + +
    +
    +

    Two-factor authentication

    +

    + Adds a 6-digit code from your authenticator app to login. +

    +
    +
    +
    + + + + + diff --git a/docs/preview/vault-add.html b/docs/preview/vault-add.html index 8c5b1c7..0b10825 100644 --- a/docs/preview/vault-add.html +++ b/docs/preview/vault-add.html @@ -24,7 +24,11 @@
    VA
    ops@example.az
    - Vault unlocked + + Settings + · + +
    @@ -35,7 +39,10 @@

    All credentials

    6 entriesDecrypted in your browser

    - +
    + + +
    @@ -44,37 +51,37 @@

    New credential

    @@ -83,23 +90,66 @@

    New credential

    User -