Tool · NIST SP 800-63B-4
Password policy checker
Describe your password policy and see, rule by rule, where it meets or breaks NIST SP 800-63B-4 (July 2025), with the exact requirement strength and section for each.
How long is this password, by NIST's count?
SP 800-63B-4 counts each Unicode code point as one character, and recommends normalizing to NFC first. Many systems count something else: JavaScript's .length counts UTF-16 units, databases often count bytes. Type here to compare (it stays on this page).
The rules, in full
Every rule the checker applies, from NIST SP 800-63B-4, Authentication and Authenticator Management (July 2025), section 3.1.1 unless noted. The text is paraphrased; the requirement word is exactly the publication's. These apply to passwords that are verified centrally and used as an authentication factor, not to the local PIN that unlocks a security key or phone (an “activation secret”, §3.2.10).
| Requirement | Rule | Section |
|---|---|---|
| SHALL | Minimum length of 15 characters when the password is the only factor; at least 8 when it is only ever used as part of multi-factor authentication. | 3.1.1.2 (1) |
| SHOULD | Permit passwords of at least 64 characters. | 3.1.1.2 (2) |
| SHOULD | Accept all printing ASCII characters and the space character. | 3.1.1.2 (3) |
| SHOULD | Accept Unicode characters. | 3.1.1.2 (4) |
| SHALL | Count each Unicode code point as one character when checking length. | 3.1.1.2 (4) |
| SHOULD | If Unicode is accepted, apply NFC normalization before hashing. | 3.1.1.2 |
| SHALL NOT | Impose composition rules, such as requiring a mix of character types. | 3.1.1.1, 3.1.1.2 (5) |
| SHALL NOT | Require passwords to be changed periodically. | 3.1.1.2 (6) |
| SHALL | Force a change when there is evidence the password has been compromised. | 3.1.1.2 (6) |
| SHALL NOT | Let users store a hint that an unauthenticated person can see. | 3.1.1.2 (7) |
| SHALL NOT | Prompt users to set knowledge-based questions (“name of your first pet”) when choosing a password. | 3.1.1.2 (8) |
| SHALL | Ask for the whole password (not selected characters) and verify all of it, without truncation. | 3.1.1.2 (9) |
| SHALL | Compare new passwords, whole, against a blocklist of commonly used, expected or compromised values (breach corpuses, dictionary words, context words such as the service name and username). | 3.1.1.2 |
| SHALL | When a password is on the blocklist, require a different one and tell the user why it was rejected. | 3.1.1.2 |
| SHALL | Offer guidance to help users choose a strong password. | 3.1.1.2 |
| SHALL | Rate-limit failed attempts: no more than 100 consecutive failures on one account before the authenticator is disabled. | 3.1.1.2, 3.2.2 |
| SHALL | Allow password managers and autofill. | 3.1.1.2 |
| SHOULD | Permit pasting into the password field. | 3.1.1.2 |
| SHOULD | Offer an option to display the password while it is typed. | 3.1.1.2 |
| SHALL | Request passwords only over an authenticated protected channel with approved encryption (TLS). | 3.1.1.2 |
| SHALL | Store passwords salted and hashed with a password hashing scheme that takes a cost factor; the salt is at least 32 bits. | 3.1.1.2 |
| SHOULD | Add a keyed hash or encryption step with a secret key stored apart from the hashes, ideally in a hardware-protected area. | 3.1.1.2 |
What changed from the 2017 edition
The 2017 SP 800-63B already told verifiers not to impose composition rules or periodic changes, but as SHOULD NOT. Revision 4 makes both SHALL NOT. It also raises the minimum for a password used on its own from 8 to 15 characters, while keeping 8 as the floor for a password that is only ever one factor of multi-factor authentication, and it makes allowing password managers and autofill a SHALL. Policies written to the 2017 text, or to older “complexity and 90-day expiry” habits, now fail mandatory requirements.
Reading the results
- Low lockout thresholds are allowed. 100 consecutive failures is an upper bound; agencies MAY set lower limits. But a limit of 3 or 5 makes it easy for anyone to lock a user out on purpose. §3.2.2 suggests alternatives such as bot challenges and growing delays between attempts.
- “Blocklist” means the whole password. The comparison is against entire values, not substrings, and the list need not be enormous: it exists to stop guesses an attacker would try before hitting the attempt limit.
- Passwords are never phishing-resistant. Meeting every rule here makes passwords harder to guess, not harder to steal. See phishing-resistant MFA.
Sources
- NIST SP 800-63B-4: Digital Identity Guidelines, Authentication and Authenticator Management (July 2025), NIST. Public domain (U.S. government work).
- NIST SP 800-63B (June 2017, superseded), NIST. Public domain (U.S. government work).
- Unicode Standard Annex #15: Unicode Normalization Forms, Unicode Consortium. Cited for facts; not reproduced.