Add an "Allow weak passphrases" setting, off by default #674

Closed
opened 2026-10-25 03:07:20 +01:00 by clawbot · 1 comment
Collaborator

sneak confirmed this reading on 25 October
(#401 (comment), approving
#401 (comment)):

  • Key derivation stays as it is today: one derivation at libsodium's interactive
    setting (64 MiB, about 0.15 s), with no second copy in memory.
  • The 12-character passphrase minimum stays the default.
  • A new setting, "Allow weak passphrases", off by default, lets a user who turns
    it on set a shorter passphrase.

The length of the passphrase is what protects the stored secret, so this is the
only change.

Definition of done

  • The settings screen has an "Allow weak passphrases" setting, off by default.
  • While it is off, every screen that sets or changes a passphrase refuses one
    under 12 characters, exactly as today.
  • While it is on, those screens accept any non-empty passphrase.
  • Key derivation is unchanged.
  • Tests cover a short passphrase refused with the setting off and accepted with
    it on.
  • The README describes the setting in one or two plain sentences, and its Key
    Decisions section states the key-derivation parameters and why (one light
    derivation; the passphrase's length is what protects the stored secret).
  • One PR into next ending its title with (closes #674), passing an
    independent review before it is squash-merged.

Model: opus-5-5

sneak confirmed this reading on 25 October (https://git.eeqj.de/sneak/AutistMask/issues/401#issuecomment-154565, approving https://git.eeqj.de/sneak/AutistMask/issues/401#issuecomment-154156): - Key derivation stays as it is today: one derivation at libsodium's interactive setting (64 MiB, about 0.15 s), with no second copy in memory. - The 12-character passphrase minimum stays the default. - A new setting, "Allow weak passphrases", off by default, lets a user who turns it on set a shorter passphrase. The length of the passphrase is what protects the stored secret, so this is the only change. **Definition of done** - The settings screen has an "Allow weak passphrases" setting, off by default. - While it is off, every screen that sets or changes a passphrase refuses one under 12 characters, exactly as today. - While it is on, those screens accept any non-empty passphrase. - Key derivation is unchanged. - Tests cover a short passphrase refused with the setting off and accepted with it on. - The README describes the setting in one or two plain sentences, and its Key Decisions section states the key-derivation parameters and why (one light derivation; the passphrase's length is what protects the stored secret). - One PR into `next` ending its title with (closes #674), passing an independent review before it is squash-merged. Model: opus-5-5
clawbot self-assigned this 2026-10-25 03:07:20 +01:00
Author
Collaborator

Plan: one PR to next, after #671 lands (both change Settings and the stored profile).

  • A stored setting, off in a new profile (DEFAULT_STATE and normalizePersisted() in src/shared/persistedState.js).
  • Settings: an "Allow weak passphrases" checkbox, unticked, with one plain sentence on what it allows.
  • AddWallet (src/popup/views/addWallet.js), the only screen that sets a passphrase: with the setting off it refuses one under 12 characters, exactly as today; with it on it accepts any non-empty one. The hint line and error wording follow the setting.
  • src/shared/vault.js is not touched.
  • Jest tests: a short passphrase refused with the setting off and accepted with it on; an empty one refused either way.
  • README: the setting in one or two sentences, and in Key Decisions the key derivation (Argon2id at libsodium's interactive setting, 64 MiB, one derivation) and why: the passphrase's length is what protects the stored secret.

Model: opus-5-5

Plan: one PR to `next`, after https://git.eeqj.de/sneak/AutistMask/pulls/671 lands (both change Settings and the stored profile). - A stored setting, off in a new profile (`DEFAULT_STATE` and `normalizePersisted()` in `src/shared/persistedState.js`). - Settings: an "Allow weak passphrases" checkbox, unticked, with one plain sentence on what it allows. - AddWallet (`src/popup/views/addWallet.js`), the only screen that sets a passphrase: with the setting off it refuses one under 12 characters, exactly as today; with it on it accepts any non-empty one. The hint line and error wording follow the setting. - `src/shared/vault.js` is not touched. - Jest tests: a short passphrase refused with the setting off and accepted with it on; an empty one refused either way. - README: the setting in one or two sentences, and in Key Decisions the key derivation (Argon2id at libsodium's interactive setting, 64 MiB, one derivation) and why: the passphrase's length is what protects the stored secret. Model: opus-5-5
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/AutistMask#674