A new login technique is becoming available in 2023: the passkey. The passkey promises to solve phishing and prevent password reuse. But lots of smart and security-oriented folks are confused about what exactly a passkey is. There’s a good reason for that. A passkey is in some sense one of two (or three) different things, depending on how it’s stored.
The secret key pair of a passkey is never transmitted over the internet. Even if somebody snoops the authentication, they will not be able to reproduce the secret key to login in the future.
Think of it just like SSH public and private keys.
Normal passwords, are typically provided at login time, and get transmitted, relying on HTTPS to keep them secure, if somebody could observe the authentication, they could reproduce the password later.
(Yes someone could hash the password client side and send over the output… But that’s extra work and not guaranteed)
Client side hashing of a password just makes the hashed result the password, as far as security is concerned.
Unless there is some back-and-forth with the server providing a one-time-use salt or something to make each submission of the password unique and only valid once, at which point that might get snooped as well.
Better off relying on client certificates if you are that concerned
Passkey’s approach is actually relatively close to client side certificates. It’s just in a form that is compatible with using a password manager. From the user standpoint once everything supports it properly, logins become relatively transparent and man-in-the-middle is pretty effectively mitigated. The other upside is of course unless you’re hosting your own stuff, no one supports client side certificates. This is an opportunity for all the big players to actually push people into better security.
The secret key pair of a passkey is never transmitted over the internet. Even if somebody snoops the authentication, they will not be able to reproduce the secret key to login in the future.
Think of it just like SSH public and private keys.
Normal passwords, are typically provided at login time, and get transmitted, relying on HTTPS to keep them secure, if somebody could observe the authentication, they could reproduce the password later.
(Yes someone could hash the password client side and send over the output… But that’s extra work and not guaranteed)
Client side hashing of a password just makes the hashed result the password, as far as security is concerned.
Unless there is some back-and-forth with the server providing a one-time-use salt or something to make each submission of the password unique and only valid once, at which point that might get snooped as well.
Better off relying on client certificates if you are that concerned
Passkey’s approach is actually relatively close to client side certificates. It’s just in a form that is compatible with using a password manager. From the user standpoint once everything supports it properly, logins become relatively transparent and man-in-the-middle is pretty effectively mitigated. The other upside is of course unless you’re hosting your own stuff, no one supports client side certificates. This is an opportunity for all the big players to actually push people into better security.
Ah, thanks for that explanation. That makes sense. Eliminates a possible attack vector with https