high-entropy bytes available at login (derived from the seed while it is still in memory). Caller-owned: deriveCacheKey reads but never wipes them — zero the buffer (and the seed it came from) when done (R6).
FRESH random bytes for this login. Never reuse a salt across logins: the whole point is that a compromised cacheKey from session N is useless in session N+1.
Derives a fresh, per-login cache key from login-time secret material and wraps it as a NON-EXTRACTABLE persisted CryptoKey. Raw key bytes exist only transiently during importKey.