Engineering / ENG-1708
Refuse known-breached passwords when a password is set or reset
Description
After OPS-41: the lists used against us were email and password pairs leaked from other services. Lockout (ENG-1702) slows an attack; refusing passwords that are already on such lists stops the reuse.
Acceptance criteria
- On set or reset, the password is checked against a list of breached password hashes we download and keep locally. Nothing about the password leaves our servers.
- Refused with: "This password has appeared in a data breach elsewhere. Choose another."
- Existing passwords aren't checked (we don't have them).
Linked issues
- relates to OPS-41 Credential stuffing against password sign-in in the EU: about 1.9 million attempts Done
The full list is about 40 GB of hashes. A filter structure gets it to ~1.5 GB with a one-in-a-million false positive rate. Happy to take this when it's planned.