Answers to common questions about remote password hashes, delegated verification, JWT validation, and decisions that would make a normal auth team ask for a meeting.
It is an authentication system that does not store your password hash locally. Instead, it stores your email address and a URL where your Argon2 password hash can be fetched on demand during login. Yes, that is weird. That is the point.
Bad Passwords fetches the hash from the URL you registered, checks the password you submitted against that hash, and if it matches, issues a signed JWT. If it does not match, login fails. On logout, the current token version is revoked, so older tokens stop validating too.
Probably. More precisely: it is not automatically catastrophic, but it is definitely not something you should do casually. Argon2 is a one-way, salted, memory-hard password hash, so someone who sees the hash cannot simply decrypt it and recover the password. The problem is offline guessing: if the hash is public, an attacker can keep trying password guesses locally until one matches. A strong random password makes that expensive and annoying; a weak password makes it a hobby.
Because if you are going to do something questionable, you should at least use a respectable password hashing algorithm. Argon2 is built for password hashing, not encryption. It is salted, tunable, and expensive enough in CPU and memory to make large-scale guessing attacks hurt more, especially on GPUs. That does not make it magic. It just means failure takes more effort.
Very back-of-the-envelope math, but useful back-of-the-envelope math:
That is illustrative, not a promise. The point is that strong passwords plus aggressive memory settings force the attacker to spend real time, real hardware, and real money on a deeply embarrassing project.