← All posts

Auditing Windows Hello for Business: Passwordless Posture Done Right

How to verify Windows Hello for Business is enforced, key-based, and not silently falling back to convenience PINs or passwords.

Windows Hello for Business (WHfB) is Microsoft's answer to the password: a phishing-resistant, hardware-bound credential that lives in the TPM and never travels the wire. On paper it's the single biggest lift you can give an endpoint's identity posture. In practice, a lot of "passwordless" deployments are passwordless in name only — the policy is configured but not enforced, keys land in software instead of the TPM, and the old password stays fully usable as a silent fallback. This post is about auditing the gap between "we turned Hello on" and "an attacker actually can't replay a stolen password."

Why WHfB is worth auditing

A traditional password is a shared secret: it can be phished, sprayed, relayed, and replayed from anywhere. WHfB replaces it with an asymmetric key pair. The private key is generated on the device, protected by the TPM, and released only after a local gesture (PIN or biometric). The gesture unlocks the key on that machine — it is not a password sent to a server. That's what makes WHfB phishing-resistant: there is no reusable secret to steal.

But three misconfigurations quietly erase most of that benefit:

Where the posture actually lives

WHfB policy is expressed as registry values under the PassportForWork key, pushed by GPO or MDM. The signal you want is not "is there a policy blob" but "do the effective values enforce hardware, disable the password, and set a sane PIN policy." The keys that matter:

HKLM\SOFTWARE\Policies\Microsoft\PassportForWork
  Enabled            = 1     ; WHfB provisioning is on
  RequireSecurityDevice = 1  ; TPM required, no software key fallback
  UsePassportForWork = 1

HKLM\SOFTWARE\Policies\Microsoft\PassportForWork\PINComplexity
  MinimumPINLength   >= 6
  Digits             = 1
  UppercaseLetters   = 2 (allowed) / lowercase / special as policy dictates
  History            >= 0

And the fallback you want gone — the password credential provider — is controlled separately (and via AllowDomainPINLogon / "Turn on convenience PIN sign-in" it can be re-enabled by accident). A real audit checks all three planes together, because any one of them left open reopens the phishable path.

Confirm the key is really in the TPM

Configuration says the TPM is required; attestation tells you whether it was actually used. On a provisioned device:

certutil -user -key -csp "Microsoft Passport Key Storage Provider"

A healthy result lists the WHfB key backed by the Passport KSP, which brokers to the TPM. If keys show up under a software KSP, hardware protection was skipped — treat that as a finding even when RequireSecurityDevice reads 1, because a machine may have been provisioned before the policy tightened. Pair this with TPM presence and readiness (2.0, owned, not in a reduced-functionality state) so you know the hardware root of trust is genuinely available.

The checklist WinSentinel runs

WinSentinel's identity and encryption audit modules roll these into concrete, single-machine findings so you don't have to eyeball registry values by hand:

Each finding maps to CIS and NIST identity controls and carries a remediation, so a "passwordless" rollout can be verified instead of assumed. Run it locally with:

winsentinel audit --module identity
winsentinel audit --module encryption

The takeaway

Passwordless is a posture, not a checkbox. The value of Windows Hello for Business comes entirely from three properties holding at once: the key is in hardware, the PIN that guards it is strong, and the old password is no longer a usable fallback. Miss any one and you've bought a friendlier login screen, not phishing resistance. Audit all three — on every machine, on a schedule — and treat a drift on any of them as the regression it is.

Free on a single machine, unlimited: WinSentinel audits WHfB, TPM, PIN policy, and password fallback locally and tells you exactly where the passwordless story breaks.