While reading this question, it got me to thinking.
Let's say an attacker has some way to make all of their login attempts appear legitimate - enough IP addresses to never reuse them, different valid browser UA strings on each request matching the spread of browsers usually seen, what have you.
Would a strong hashing function that guarantees things like memory or time complexity (for instance, Argon2) not aid a DDoS on a service by way of amplification?
I'm imagining a service that doesn't fail fast on non-existant usernames to avoid leaking information about their existence through timing side channels, or that the attackers have a list of all valid usernames already and is only attempting those.
Would something like requiring CAPTCHA for every attempt completely neuter the problem? If not, is there a way of shifting some of the work of validating the password on the user's end without revealing the hash or being vulnerable to the user being able to send whatever they like back, thus flipping the amplification around?