Commit d17c643
feat(agent): fingerprint unlock (Linux/fprintd, off by default) (#48)
`vault unlock --fingerprint` (and a TUI unlock-screen mode) re-unlock the
keyring-held session after a fingerprint verified over D-Bus to the system
`fprintd`, instead of re-typing the master password.
This builds on the opt-in `agent.session_keyring`: a fingerprint yields only
match/no-match, never key material, so it *gates the resume* of the key already
in the kernel session keyring rather than wrapping a key at rest. With
`agent.fingerprint_unlock` on, the agent no longer silently auto-resumes (it
waits for a verified touch), idle-lock zeroises the in-memory key but KEEPS the
keyring entry so a touch works after a timeout (lifetime
`agent.fingerprint_ttl_secs`), and a manual `vault lock` still clears it.
Verification happens inside the agent so a client can't bypass it over the
socket; enrollment stays OS-level (`fprintd-enroll`) — Vault stores no template.
Posture (PRD §7.3): the keyring entry is possessor-gated, so this is convenience
+ user-presence, NOT a cryptographic boundary beyond `session_keyring`, and
strictly weaker than a master-password unlock. Default off, Linux-only, behind a
new off-by-default `fingerprint` cargo feature (zbus).
- vault-ipc: `Request::UnlockFingerprint` + `FingerprintUnavailable`/`Failed`
- vault-config: `agent.fingerprint_unlock` / `fingerprint_ttl_secs` + spawn flags
- vault-agent: fprintd zbus client (`fingerprint.rs`), dispatch, idle-lock/resume
gating, `resume_from_keyring` helper
- vault-cli: `vault unlock --fingerprint`
- vault-tui: unlock-screen fingerprint mode (Tab cycles password/PIN/fingerprint)
- docs/fingerprint.md, PRD §7.3, CHANGELOG, `just fingerprint`
Tests cover config round-trip + flags, the resume gate, and the TUI mode/request.
Full `just ci` green (clippy `--all-features` incl. the feature; deny/audit clean
with zbus). Verified live: CLI fingerprint unlock against a real reader.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>1 parent 112db8a commit d17c643
18 files changed
Lines changed: 962 additions & 59 deletions
File tree
- crates
- vault-agent
- src
- vault-cli/src
- vault-config/src
- vault-ipc/src
- vault-tui/src
- docs
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
76 | 76 | | |
77 | 77 | | |
78 | 78 | | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
79 | 93 | | |
80 | 94 | | |
81 | 95 | | |
| |||
0 commit comments