Password Breach Checks

Password Breach Check Policy

Purpose

DigitVA rejects user-chosen passwords that appear in known breach corpora. The goal is to reduce credential-stuffing risk without adding login-time friction.

Scope

This policy applies to any flow where an operator or user sets a password that will be used for authentication:

  • self-service password reset
  • forced password change
  • profile password update
  • admin password edit
  • CLI password reset / create flows that accept a user-entered password

Login verification itself is unchanged. Since 2026-10-03 passwords are server-generated (account-onboarding-and-passwords.md); every generated password is checked the same way and regenerated on a hit. The one exception is a public-demo account, whose user chooses the password at sign-up (public-demo.md); it is breach-checked the same way and refused on a hit.

Baseline Rules

  • password strength is a property of the server generator; there is no strength validator for chosen passwords, since nobody chooses one
  • breached passwords must be rejected using the Have I Been Pwned password range API and k-anonymity lookup
  • the application must not transmit the full password to the breach service
  • the application must not use breach checking as a login challenge or substitute for rate limiting
  • if the breach service cannot be reached, the password change should fail with a retryable validation error rather than silently bypassing the check

Privacy Rules

  • only the SHA-1 prefix required by the k-anonymity API may leave the application
  • no raw password, full hash, or account identity should be included in the breach lookup request

Operational Notes

  • breach checks are a defense-in-depth layer, not the primary authentication defense
  • login rate limiting and account protection controls remain required
  • the check may be disabled only in non-production test scaffolding or controlled operational exceptions