Možná nechápu jak LastPass funguje, ale tvrdí, že nezná vůbec hesla a šifrování/dešifrování provádí pouze na straně klienta, ale když se přihlásím z jiného zařízení tak po mě chce jen heslo a ne klíč. Takže sice šifrování/dešifrování provádí na straně klienta, ale privátní klíč je uložen na serveru LastPass :D
"When you login to LastPass, two things are generated from your Master Password using our code discussed previously before anything is sent to the server: the password hash and the decryption key. This is all done locally.
The password hash is sent to our servers to verify you. Once verified, we send back your encrypted Vault. We are only sent your hash, not your Master Password. The decryption key, which NEVER leaves your computer, is then used to decrypt your Vault once it comes back."
Podle všeho je z hesla vždycky vygenerovaný stejný klíč, který je použit k odemčení "trezoru".
V requestech na LastPass je vždycky skutečně jen hash hesla.
Takže otazník už spíš jen je, jak pak funguje sdílení mezi uživateli, protože tam se reálně přenáší údaje mezi dvěma účty takže musí dojít k přenesení údajů, které LastPass musí dešifrovat z jednoho účtu a zašifrovat na druhém.
Vas klic neni nikde ulozen, dost mozna ani lokalne, vygeneruje se z vaseho hesla:
Lokalne:
Klic = hash(login + heslo)
authToken = hash(Klic + heslo)
Na serveru v DB:
salt = nahodne (pro zaznam)
komparacniBlob = hash(authToken+salt)
if (komparacniBlob == hash(authToken+salt)) -> dostane trezor, ke kteremu pasuje Klic.
Sdilena hesla funguji jinak. Kazdy uzivatel vygeneruje public/private par klicu, na server nahrava svuj public. (Private ma nejspis ve svem trezoru, kde jinde).
Kdyz chci s nekym sdilet heslo, musim ho zakryptovat jeho verejnym klicem. Jen on si jej tedy dokaze precist, a private nikdy neopustil jeho trezor.