feat(keys): the password's own proof key (ADR 0020, D19)

A third subkey of the password's Argon2id (context `hlkpass1`, subkey 3)
seeds an Ed25519 pair: `PasswordKeys.proofKeyPair` and `proofPublicKey`.
An account that keeps no SRP verifier proves its password by signing the
register's nonce with it, as it proves the recovery phrase; neither SRP's
verifier nor the unwrapped account keys a signed-in device keeps can make
it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-23 21:20:56 +02:00
commit e8953d1560
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -1,5 +1,6 @@
/// An account's keys on the device (ADR 0017): what the password unlocks
/// (Argon2id, split into SRP's x and the key-encryption key), the account's
/// (Argon2id, split into SRP's x, the key-encryption key and the password's
/// proof key), the account's
/// key pairs and their wrapping, the recovery phrase and its key, data keys
/// sealed to the account, and content sealed and signed in ADR 0002's
/// envelope. libsodium (the `sodium` package, its sumo API for Argon2id)