InTouch Hub · Blue Isle Software

Leaked Password Scan

Check a list of your passwords against the Have I Been Pwned breach corpus (~14B exposed passwords) using privacy-preserving k-anonymity — the full password and full SHA-1 hash never leave the machine. Reports which passwords appear in known breaches, how many times, and masks them in the output so the report is safe to email.

Provided free and as is, without warranty of any kind — including merchantability, fitness for a particular purpose, and the accuracy or completeness of any result. See the licence. You are responsible for checking what this produces before relying on it.

breachcredentialsemailhaveibeenpwnedit-supportk-anonymitymessagenotificationpasswordspersonalreportruntimeenvscansecurity

Leaked Password Scan

Give it a list of passwords; it tells you which ones have already shown up in a data breach — and how many times — by checking them against Have I Been Pwned's corpus of ~14 billion exposed passwords.

Use it on the passwords that actually matter: service-account and shared credentials, admin logins, and your own personal passwords. A password that appears in the corpus is in attackers' wordlists today — it should be changed immediately, everywhere it's reused.

The catch you'd worry about — and why it isn't one

"Sending my passwords to a website to check if they leaked" sounds insane. It would be. This workflow never does that.

It uses k-anonymity, the same method HIBP's own password checker and 1Password/browser breach warnings use:

  1. The password is SHA-1 hashed locally.
  2. Only the first 5 hex characters of that hash are sent to the API.
  3. The API replies with every hash suffix sharing those 5 characters (~800 of them) and their breach counts.
  4. The match on the remaining 35 characters happens locally.

So the full password never leaves the machine — and neither does its full hash. The server can't tell which of the ~800 candidates you were asking about. The request also sends the Add-Padding header so the response size can't be used to fingerprint the query. No API key, no account, no cost.

What it does

  1. scan — a runtimeenv task runs a short Python script (stdlib only — hashlib + urllib, no curl/jq/pip). It reads your password file, checks each line via k-anonymity, and prints a report. Passwords are masked in the report — only line number and length are shown — so the output is safe to email and keep in logs.
  2. notify — the report is sent to you on your InTouch channel.

No AI, no per-run token cost — fully deterministic.

Example output

========================================================
  LEAKED PASSWORD SCAN  —  Have I Been Pwned
========================================================
Checked: 6   Pwned: 2   Clean: 4   Errors: 0

!! EXPOSED — these appear in known breaches. Change them now,
   and anywhere you reused them:

   line  length  times seen in breaches
   ----  ------  ----------------------
      3       8               3,861,493
      5      11                      17

   (passwords are masked — only line number and length shown)

Method: k-anonymity. Only the first 5 chars of each password's
SHA-1 hash were sent; the full password and hash stayed local.

Setup

1. Runtime environment

2. Placeholders in workflow.iml

Placeholder Replace with
<<PASSWORD_FILE>> Path to a plain text file, one password per line. Blank lines and # comments are ignored.
<<NOTIFY_USER>> The user/contact who receives the report (e.g. intouch).

3. Handle the password file safely

This file is the sensitive part — not the workflow. Lock it down and destroy it when you're done:

chmod 600 /path/to/passwords.txt   # owner read/write only
# ...run the workflow...
shred -u  /path/to/passwords.txt   # secure-delete (or 'rm -P' on macOS)

For ongoing monitoring of a stable set of service-account passwords, you can keep the file in place (mode 600) and schedule the workflow weekly.

Schedule

The workflow exits non-zero (code 2) when any password is found exposed, so you can branch alerting on the result if you wire it into a larger flow.

Notes & limits

Credits

Powered by Have I Been Pwned Pwned Passwords, by Troy Hunt. Data is licensed under the Open Data Commons Attribution License.