Show HN: NullAuth – A proposal for password-less authentication
nullauth.org
nullauth.org
A ton of work has already been poured into it. In particular around the area of "user convenience" features (recovery, reset, forgot/lost, low friction day-to-day usage, etc) and preventing phishing and MITM attacks.
What happens when/if your private key is compromised? All accesses will be compromised All accesses need to be rekeyed
Some factor that's unique to the service would help to minimize this, something of an unique extension to the public/private key, something like two keys for the service, the general one and the other one (this is something other than your password, so the server would still need no password)
Tooling is key . Not only being able to manage all those public/private keys but also backing them up and make sure that they aren't lost. Or perhaps using email or other channel to reset them
Keybase could probably be an excellent tool to manage such key.
This is still a tad raw, and somehow user experience isn't factored in. We have a very powerful computer with fingerprint recognition in our pockets, why do we still need to type in passwords? (think WhatsApp web login)
> What happens when/if your private key is compromised?
We'd need to revoke the keys and that would be hard to do manually. But with tooling, eventually easier than logging on to a website and changing passwords.
Why storing and syncing a private key or multiple private keys is better than storing and syncing a complex password or multiple complex passwords?
I'm leaning towards generating a new key and something like this: Add key for <user@website> at <utcmillisecs>: <new_public_key_goes_here>;<sign_with_current>
How do you prove you control something? I don't know.
Since they need public proofs, email will not be supported, for example. Also, they're very slow[1] in adding more providers, or perhaps they don't want more providers.
But yes, I think the database Keybase is building can be used for a login system somehow.
It seems like you have to define a new device on a existing logged in device before using the new device. Is there a way around that? If I want to log into an app for the first time at work and forgot to define a new device name at home where I already can log in, I wouldn't be able to do so from what I understand.
It seems a bit arbitrary and since this meant to be used in a machine-to-machine context and for security, wouldn't a binary protocol make more sense (which would get you smaller transfer size and resistance all sorts of string-based terminator attacks)?
But I admit I haven't thought very much about how it could be attacked. Do you see potential holes here?
The syntax is: {command} with key1=val1, key2=val2, key3=val3;{signature}
Consider for instance that the escaping of comma's wouldn't be necessary in a binary protocol.
I wanted to check out the browser extension that is mentioned, but the site is returning 404.
Mostly, I wanted to find out whether the extension is using WebCrypto for the key generation, signing, verification, etc, and how the private key is being stored.
Can you please elaborate on this?
I'll keep you posted on progress, if your email is in your profile. Hoping to have everything (plug-in and serverside examples) ready in a week or two.
I love the idea. It reminds me of something I read on HN a few years back where somebody proposed using SSH auth for web authentication.
If you were to use WebCrypto, it ought to be possible to securely (with respect to cross-origin policy) store a user's private key using IndexedDB.
WebCrypto has support for keypairs that can have the private key data extracted (there are limits, though, which I cannot accurately remember) from the JavaScript object in which they are contained.
So it ought to be possible to extract the key data, encrypt it (also using WebCrypto) and sync it (somehow) to another device.
Add key for <user@website> at <utcmillisecs>: <new_public_key_goes_here>;<sign>
Again, having a command ("Add key ..." as in parent message) for this would make this feature accessible to password/key managers.