It seems like if you are on Linux (no Windows Hello or apple Face ID/ touch ID), then your only option for WebAuthn is to buy a Yubikey. Some people (including me) don't want a usb key. I'd much rather use TOTP or to verify using an existing verified device (like how Signal or Matrix does it)
There is a huge number of other vendors supporting Webauthn apart from Yubikey. (From the top of my head Nitrokey, Solo, Tomu, Mooltipass, Ledger, Trezor, Google Titan, OnlyKey, Token2).
A brief search didn't yield any FIDO2 software-only solutions for Linux, but I see no reason why in principle you couldn't implement it (perhaps interfacing https://github.com/google/OpenSK through hidg - similar projects do exist for U2F).
Indeed, which is most likely the biggest reason why a ready-to-use solution doesn't exist : it's not really a common use-case due to the security implications.
Still, if compared to a local software TOTP, it's not necessarily a step down.
On QubesOS, a Linux distro, a virtual FIDO device is being implemented along with a domain whitelist firewall. Github also made a proof of concept software FIDO token in the form of a browser plugin s few years ago.
The goal of 2FA is not to stop malware, as malware on your machine will just take the post login cookies and do whatever. The point of 2FA is to protect a user from phishing or database leaks, and TOTP fundamentally fails at stopping both. You can also change system time and get a valid token in the future, and anyone with read access to your phones or the servers system memory can get unlimited free codes by dumping the plaintext secret.
Any service still offering TOTP is frankly negligent. WebAuthn is the only standard phishing resistant 2FA available and even pure software emulated solutions offer dramatically better protection than TOTP.
This is the point around adoption, and we need to find a way for Linux machines to support this without a usb token. If we always have the option for TOTP, people will fall back to it, instead of finding ways to move forward with Webauthn.
If we keep allowing the use of inferior options, Webauthn won’t gain traction.
Is it not possible to just implement webauthn in software (e.g. as a browser extension, or like the SSH agent)? While that's not quite as secure as a hardware token, it's still better than using a password.
Too bad that they still require a username/password and only use webauthn as 2FA.
Why not go full passwordless, with a fido2 token + pincode? It's more secure and you need the token anyway. No password to remember or for an adversary to guess. Even the account can be derived from the token. With Office 365 all I have to do is insert the token, enter the pin, touch it (to avoid remote control abuse) and I'm logged in.
Simple as taking money out of the ATM and just as secure.
Yes they can be lost but that's why people use more than one. They already support that as they mention in the blog post.
And what you describe "password and oneOf(token, phone, etc)" is not how passwordles works. It is really just "oneOf(token, phone, etc)". The token itself is what validates your PIN code in this scenario.
Tokens will have to get a bit cheaper, or software implementations will have to be more widely available and well known, and the storage will have to increase.
I would not be happy if I suddenly had to by several of these tokens, carry them around, and potentially manually swap them out, since many current ones only hold 25 keys or so.
I wonder if something simpler wouldn't be possible, that didn't involve storing keys on-chip, or storing them in encrypted form on the host.
Couldn't the token just generate the key as needed, seeded by hash(domainName, accountName, salt, internalSecret)?
It seems like YubiKey does something like this but some seem to actually store keys, or require some complex in browser or server side storage, adding points of failure.
And there seems to be some "resident key" feature that always stores data on the authenticator? Is that really necessary?
> I would not be happy if I suddenly had to by several of these tokens, carry them around, and potentially manually swap them out, since many current ones only hold 25 keys or so.
This is not how FIDO2 works. It uses the same key but it generates a different derivative for every site. There is no limit on how many sites you can use it on. And the derivative is different for each site, so you can't hijack an authentication session and use it for another site. It's pretty well designed.
> I wonder if something simpler wouldn't be possible, that didn't involve storing keys on-chip, or storing them in encrypted form on the host.
It is possible, but this is a weakness because you have the key in more than one place. Having it only inside the token is what makes the token unique. But Apple and Google are working on something like this: https://news.ycombinator.com/item?id=31272867
But personally I prefer the physical keys. And no it doesn't require browser storage.