Design the key lifecycle around the assumption that any single device can vanish. See NOTES.md — Key lifecycle.
The reality: browser storage is evictable (Safari's 7-day script-writable-storage rule for non-installed sites; navigator.storage.persist() is best-effort; installed-PWA exemptions vary by platform).
The split:
- Device signing keys: non-extractable and disposable — losing them costs a re-enrollment, so enrollment must be cheap (see the identity issue).
- The data-encryption root: separate and recoverable — wrapped under a KEK derived from a recovery phrase and/or the WebAuthn PRF extension (hardware-backed), backup bundle on the dumb storage layer.
- Losing the last device must not mean losing the data; the recovery path is the crown jewels and gets its own threat-model section.
Open sub-questions:
- PRF availability floor across the target browsers/authenticators; phrase-only fallback UX.
- Backup bundle format and where it lives (any granted storage backend? all of them?).
- Escrow spectrum: none / social recovery / provider-assisted — deliberately deferred, but the bundle format shouldn't foreclose it.
- Rotation: what a data-root rotation costs (re-wrapping vs re-encrypting history — interacts with the group-crypto issue).
Design the key lifecycle around the assumption that any single device can vanish. See NOTES.md — Key lifecycle.
The reality: browser storage is evictable (Safari's 7-day script-writable-storage rule for non-installed sites;
navigator.storage.persist()is best-effort; installed-PWA exemptions vary by platform).The split:
Open sub-questions: