I am trying to figure out the implications of authentication technologies. Answers to a previous question indicate my real question is more "meta than that.
The primary requirements for an authentication system from my point of view are below, roughly in order of importance. They do not seem too unusual for a web site.
- Private
- This is my top concern. The users must not have to trust anyone with their identity. The primary "threats" would be the users government (possibly authoritarian), big tech and the web site owner. It should be possible for the user to ensure there is no risk of multiple accounts created on the same machine being linked, even if all the web sites are controlled by the same malicious actor (with perhaps tor to prevent IP address "attacks").
- Easy
- It should be usable on a general purpose computer running only open source software with no additional hardware requirements. Using tpm-fido seems like a possibility if there is not an easier option. GPG cli is easy enough, but a tool purpose built for the job would be best.
- Secure
- It has to have better security than passwords. Not relying on third party systems would be an advantage.
- Backupable
- Assuming this is the primary (or sole) method of authentication there must be a way for users to manage their credentials in such as way as the loss of a device does not prevent them accessing their account
The options I have examined:
- Username/password
- This has poor security
- TOTP
- This has better security, but still not great
- WebAuthn/Passkey
- This seems to fail the privacy criteria and the backup criteria. It seems some solution with tpm-fido if you have the right CPU is possible with pure open source software and fairly common hardware, but is not that easy.
- mTLS
- This seems to fit most of the requirements except easy, as cloudflare says to use widely would be a problem as "generating, managing, and verifying the billions of certificates necessary for this is a near-impossible task", though they do not explain why.
- DIDs
- These seem conceptually perfect, but are not actually available today as I understand it, as there is a blockchain requirement that is not implemented?
- PGP
- Some web sites (particularly less savoury ones) use PGP to log in. The public key is the "username" and a one time password is provided encrypted with that private key. This does seem to meet all the requirements, but is not designed for the job.
What is the best log in system for a privacy focused website to choose given these requirements?