3 ms·
It's a very nice feature. But note that a consequence of this is that you'll loose data if you desync all devices. The private key is only transferred from devi
by DiThi 9y ago
It's a very nice feature. But note that a consequence of this is that you'll loose data if you desync all devices. The private key is only transferred from device to device, without being stored in any server.
- callahad 9y agoWe actually fixed that failure mode three years ago with the release of Firefox Sync 1.5. The encryption key can now be re-derived from your password, so you can always recover your data as long as you remember your password. Even if you lose all of your devices.
- DiThi 9y agoAh, good to know. Ideally it should also derive another key when logging into Sync, so it's never sent verbatim even through a secure channel.
- callahad 9y agoWe do :) The full details are at https://github.com/mozilla/fxa-auth-server/wiki/onepw-protocol https://github.com/mozilla/fxa-auth-server/wiki/onepw-protoc..., but basically we derive two separate keys: one for authentication, that gets sent over the wire, and a completely different one for decrypting the sync key, which is not set over the wire. This means that even if you can observe the entire transaction, you still aren't able to derive the decryption key. It's more or less: let quickStretchPW = PBKDF2(email, password) let authPW = HKDF('authPW', quickStretchPW) let unwrapBkey = HKDF('unwrapBkey', quickStretchPW) Where unwrapBkey !== authPW.
- DiThi 9y agoPerfect. So web login does that too, I guess. Therefore as good as before but easier to use. I'm happy I don't need to trust the server.