I have a site on which I would like to prevent an unauthenticated attacker from knowing if an account exists. On the site, passwords are hashed using bcrypt, so login requests must do a bcrypt comparison (strength 12) – which takes CPU time.
My concern: the server response time varies depending on whether the user account was found or not. If the account was found, the bcrypt comparison runs to check the password; if not, the function can return immediately. On my local machine, I'm getting ~600ms response time when the account is found, while I'm getting ~30ms response time when it is not. In production, just add network latency to both.
In short, as a client, I could determine whether an account exists.
My question: Is this something I should be concerned about? And if so, what's the best solution – an artificial wait? A lower bcrypt strength? A faster hashing algorithm?