Algorithms
Key hierarchy
KDF parameters
Default Argon2id parameters (client-side only):Wire formats
All binary data is unpadded base64 (RFC 4648 §5, URL-safe alphabet) for storage and transport.Profile record
wrapped_root_key and recovery_wrapped_root_key carry their 24-byte XChaCha20-Poly1305 nonce as the first 24 bytes; the decrypt side splits on the known nonce length.
ZK item record
ZK item plaintext envelope
Server-managed item record
Recovery key format
256-bit random key encoded as base32 (RFC 4648), grouped in fives:Password change flow
The root key never changes during a password change; only its wrap.Root key rotation flow
Partial payloads (missing some items) returnROTATE_KEY_INCOMPLETE with the missing IDs in meta.missingItemIds.
Version fields
Personal API key format
- Prefix:
abu_(personal API key, bound to a user + org) - Random portion: 32 bytes, base64url-encoded
- Server stores: SHA-256 hash + first 8 chars as lookup prefix
- Authentication: constant-time hash comparison
- Resolves to a session identity (management surface only); never reaches
access.*