djwice schreef onder meer:
Dus ik denk dat een passkey ontsleutelen twee tokens nodig heeft: een lokaal (TPM) en een in Cloud.
Ik ga uit van één. Wat ik hieronder schrijf zijn sterke vermoedens, deze kunnen (deels) fout zijn: hang me er niet aan op.
Google bewaart per Android device een aantal secrets in wat zij, meen ik, hun HSM (Hardware Security Module) in de cloud noemen.
Ze zeggen daar zelf ook niet in te kunnen komen (dat geloof ik, maar niet dat ze die secrets niet op andere wijze kunnen achterhalen, want er zijn omstandigheden waarbij je zowel jouw Google cloud password als jouw device screen unlock key op één van hun websites moet invoeren - een beheerder kan daar dan in principe ook bij. En die beide secrets volstaan voor
jou om passkeys en passwords naar een nieuw Android device te syncen, dus ook voor een Google medewerker).
Ik vermoed dat Google, per device, een (symmetrische) encryptiesleutel in hun "cloud-HSM" genereert en bewaart (ik heb bewijs dat deze sleutel zelf geheel onafhankelijk is van zowel jouw device unlock code(s) als jouw Gcloud wachtwoord).
Om die sleutel zelf veilig te kunnen transporteren, wordt deze versleuteld met jouw een tijdelijke sleutel afgeleid van jouw gcloud password en device unlock code. Daarmee kan deze, vanuit de cloud-HSM, naar een de "secure enclave" (TPM-achtig) worden getransporteerd, en daarin ontsleuteld en opgeslagen.
djwice schreef:
En dat synchroniseren dus ook alleen gebeurt als de device gekoppeld is aan internet.
Dat kan moeilijk op andere wijze
djwice schreef:
De lookup wordt wellicht op basis van domein+geldige response van de certificaat validatie? (staple?)
Het https servercert staat er los van. Vereenvoudigd:
• Als de domeinnaam in de adresbalk bijvoorbeeld exact google.com luidt of eindigt op .google.com, wordt op basis daarvan in de passkeydb gezocht of daarin een passkey voor google.com te vinden is.
• Zo ja dan stuurt de browser de bijbehorende user-ID naar de server (bij méér dan 1 krijg je eerst een keuze met welk account je wilt inloggen).
• Als er een passkey bestaat (public key in plaats van, of naast een wachtwoord, in de data van het account) op de server, stuurt de server een nonce (lang random getal) naar de browser.
• De browser neemt de volledige domeinnaam uit de adresbalk (zoals accounts.google.com) en pakt deze samen met de nonce en nog meer data in een record (of struct zo je wilt) en zet daar een digitale handtekening onder (gebruikmakend van de private key van de passkey). Dat ondertekende object stuurt de browser naar de server.
• De server checkt de digitale handtekening aan de hand van de public key. Als dat klopt checkt de server of er daadwerkelijk op de gegeven domeinnaam mag worden ingeogd: dat mag wel op accounts.google.com, maar niet op bijv. sites.google.com - waar (voorheen?) user pages op stonden.
• Als alles klopt stuurt de server een session token naar de browser waarmee de user is ingelogd "bij google" en vrijelijk naar bijv. "zijn of haar" passwords.google.com kan surfen.
djwice schreef:
Lastig wel dat je zelf geen backup kan maken, maar is inherent aan het model natuurlijk.
Ja, en dat betekent ook irritante vendor lock-in.
djwice schreef:
Maar uit GDPR heb je ook een inzage recht, dus theoretisch zou je kunnen vragen om de informatie.
Nee, want de secrets (private keys) zijn versleuteld met een sleutel waarvan Google claimt dat zij daar niet bij kunnen.
djwice schreef:
Anders wellicht dat team hierover informeren?
Dat users geen backups kunnen maken is by design (dit geldt ook voor iOS/iPadOS). Dat hoef ik hen niet te vertellen.
De bug die ik beschreef, en nog meer leed, is natuurlijk niet by design. De bug dat je na het drukken op Clear Data onderin
https://chrome.google.com/sync heb ik "responsibly disclosed" aan Google op 11 juni 2023, met geen echte fix als gevolg - ook niet na meerdere keren navragen. Daarom bovenstaande opening van zaken, en zojuist heb ik ook een bericht op de Full Disclosure lijst gepost (dat bericht wacht op moderatie).
Ik vind het buitengewoon triest en amateuristisch hoe een partij als Google scheit heeft aan haar users (dit nadat zij aanvankelijk geen backups maakte van secrets in Google Authenticator - met als gevolg dat zeer veel gebruikers in de play store over account lockout klaagden na defect raken of verlies van hun smartphone).