| I have an interesting idea. How about make the login process more resource intensive on the browser side, by running some intensive javascript code before sending it to the server? The trick would be to make this much more intensive on the client side (say 1s of CPU time), while keeping this relatively easy for the server (say 1ms). We're trying to waste their resources, not ours. One way I can think of: 1. server sends a random seed to the client 2. client calculates 1000 hashes based an random numbers generated from the seed, something like hash(rand() + password) and sends them to the server 3. server picks a one of those and validates it. In case the hash isn't valid, you'll respond with an invalid password, so the client won't be able to distinguish between a failed authentication because of hash validation or because of a wrong password. |
Do exactly what bitcoin does: You send a random prefix and require the client to find a random suffix so that hash(prefix+suffix) ends with, say 4 zeros.