Skip to content

crypto: give every encrypted entry its own salt - #224

Open
cgzones wants to merge 1 commit into
matze:masterfrom
cgzones:per-entry-salt
Open

cgzones wants to merge 1 commit into
matze:masterfrom
cgzones:per-entry-salt

Conversation

@cgzones

@cgzones cgzones commented Oct 22, 2026

Copy link
Copy Markdown
Contributor

One salt served the whole database, so a single argon2 evaluation per candidate password could be tested against every encrypted row at once — cracking many cost the same as cracking one — and two pastes sharing a password shared a key. The shipped default for it is the literal somesalt, so one precomputation works against every instance that never set the variable.

Mint 16 random bytes per entry and store them beside the ciphertext in a new salt column, deriving with Argon2id, which RFC 9106 recommends over the Argon2i used here.

Entries already stored keep the derivation they were sealed under, selected by whether they carry a salt; the process-wide salt stays for exactly those. A ciphertext captured from the old scheme guards that path, since nothing else would notice it breaking. Checked end to end as well: a database written by the previous release, with an encrypted paste in it, migrates and still opens with the right password.

One salt served the whole database, so a single argon2 evaluation per
candidate password could be tested against every encrypted row at once —
cracking many cost the same as cracking one — and two pastes sharing a
password shared a key. The shipped default for it is the literal `somesalt`,
so one precomputation works against every instance that never set the
variable.

Mint 16 random bytes per entry and store them beside the ciphertext in a new
`salt` column, deriving with Argon2id, which RFC 9106 recommends over the
Argon2i used here.

Entries already stored keep the derivation they were sealed under, selected
by whether they carry a salt; the process-wide salt stays for exactly those.
A ciphertext captured from the old scheme guards that path, since nothing
else would notice it breaking. Checked end to end as well: a database
written by the previous release, with an encrypted paste in it, migrates and
still opens with the right password.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant