I'd like to avoid sending user passwords over the wire. Would the following challenge response protocol be secure (served over TLS)? I know this is similar to SRP.
Sign-up
- Client takes password and randomly generated salt and inputs them into scrypt.
- Client takes scrypt output and uses it to create a signing keypair using nacl.sign.keyPair.fromSeed
- Client sends salt and public key for later authentication
Authentication
- Client calls challenge endpoint to get salt and challenge token.
- Client regenerates keypair using method above.
Client signs challenge token and sends it the verification endpoint.
- The challenge token would only be used once per attempt
- A fake salt and token would be returned if the user wasn't found
- Verification endpoint would be rate limited