@faebudo @GossiTheDog No, this is nothing about Passkeys, this is how password managers usually generate an encryption key for the wallet. None of the keys above is a Passkey.
Making this more clear, given all Passkeys and other data in the keychain kc, the following happens to upload it to the cloud:
ekc <- Enc(pk, kc)
The bundle of (ekc, esk) is uploaded to the cloud. When enrolling a new device, the user gives their master password and thus:
(ekc, esk) <- Download(LoginAuthToken)
k_sk <- KDF(pass)
esk <- Dec(k_sk, esk)
kc <- Dec(sk, ekc)
You have:
1. a password (never leaves the device)
2. a derived secret encryption key (never leaves device)
3. a randomly generated encryption keypair (pk,sk) (may be symmetric actually, fuzzy on the details right now), never leaves the device (in unencrypted fashion)
4. the keychain itself (never leaves the device in unencrypted fashion)
5. the keychain encryption with the generated key (yes, synched)
6. the keychain encryption keypair/key, itself encrypted with the derived secret (yes, synced)
Only encrypted data (= indistinguishable from random data) is uploaded.
And yes, this is phishing resistant and secure. This is how every proper synched password manager has operated for a long time.
1/2