-1
$\begingroup$

The usual way for a user to authenticate themselves to a website at the application layer is with a shared secret - the user's password. If a user is connecting to a bank, they give the bank their password, and the bank stores the password, hopefully not in plaintext, but as a salted hash run through a slow KDF.

There are some weaknesses to this scheme, for example the fact that users tend to reuse passwords across websites, and that many server operators do not take the appropriate precautions when storing their users' passwords. Even if a user randomly generates strong passwords for each website, the server could still lose the password, so the user must trust the server operator to safely store the password.

If a public key scheme was used, similar to SSH key authentication, the user would not have to trust the server. The server could store the user's public key, which compromises nothing if stolen. If the user's private key is stolen, they can still revoke the key, preventing the thief from using it.

SSH supports this kind of authentication. Are there any existing systems that do authentication to websites, as opposed to SSH servers, like this?

Basically, are there any systems that replace user passwords with signatures from the user's private key?

$\endgroup$
  • 1
    $\begingroup$ TLS has support for this, it's called "TLS client authentication". Also see the bear's answer on InfoSec.SE as to why we don't use this. $\endgroup$ – SEJPM Oct 11 '17 at 22:29
  • 1
    $\begingroup$ Unfortunately your scheme collapses with If the user's private key is stolen. It's not physical so he won't find it missing. The user won't know until he uses the ATM and it's all gone. And when he gets demands to pay the 5 mortgages taken out hours after his key was copied. $\endgroup$ – Paul Uszak Oct 12 '17 at 0:06
  • 1
    $\begingroup$ Another issue is how the user securely moves his/her private key as s/he hops from one machine to another, including machines that could be rigged. Even a Smart Card and a standard card reader is not a perfect solution, because the card's authority can be abused when connected to a rigged machine. We need a card with a PIN keyboard for confirmation; and a way to display what's at stakes, like "log on Twitbook" or "pay $1000 to swift J4RFPQ9". $\endgroup$ – fgrieu Oct 12 '17 at 6:21
  • 1
    $\begingroup$ I think you are looking for something like U2F? $\endgroup$ – SEJPM Oct 12 '17 at 13:22
  • 1
    $\begingroup$ If you broaden your view beyond signatures, what you describe is exactly the idea behind the Feige-Fiat-Shamir identification scheme. Another example would be the Schnorr protocol. Authentication with proofs of knowledge is well-known for a long time - and not used widely. Reasons might be that compared to salted and iterated hashes (or password hashing schemes directly) it's more complex / easier to get wrong / not a part of common crypto libraries. $\endgroup$ – tylo Oct 13 '17 at 13:05
1
$\begingroup$

The WebAuthn standard sounds similar to what you are describing.

$\endgroup$
0
$\begingroup$

The FIDO UAF protocol provides authentication through the private keys protected by a dedicated hardware called FIDO authenticator, where no password is transfered or stored. The user can unlock his private keys through fingerprints or face authentication.

The client authentication provided by TLS commonly requires a client certificate issued by a CA. The application layer can also approach to the authentication information contained in the certificate by the functions provided by the implementations such as OpenSSL.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.