Authentication
NIST password rules
SP 800-63B-4 turned several 2017 recommendations into requirements. Each rule with its exact strength word and section, how to store passwords, and what changed.
NIST SP 800-63B-4 (July 2025) replaced the 2017 SP 800-63B as the US federal guideline for passwords, and it is widely used outside government as a reference. It tightened several 2017 recommendations into requirements. Composition rules and forced periodic changes moved from "should not" to "shall not", and the minimum length for a password used on its own rose to 15 characters. This page lists every password rule in sections 3.1.1.1 and 3.1.1.2, plus the rate-limiting rule in 3.2.2, with its exact strength word. The password policy checker is built on this table.
The rules, with strength and section
| # | Rule | Strength | Section |
|---|---|---|---|
| 1 | Passwords are either chosen by the subscriber or assigned randomly by the CSP. | SHALL | 3.1.1.1 |
| 2 | Passwords used as a single-factor authentication mechanism are at least 15 characters. | SHALL | 3.1.1.2 (1) |
| 3 | Passwords used only as part of multi-factor authentication may be shorter, but must be at least 8 characters. | MAY be shorter; SHALL be ≥ 8 | 3.1.1.2 (1) |
| 4 | Permit a maximum password length of at least 64 characters. | SHOULD | 3.1.1.2 (2) |
| 5 | Accept all printing ASCII characters and the space character. | SHOULD | 3.1.1.2 (3) |
| 6 | Accept Unicode characters. | SHOULD | 3.1.1.2 (4) |
| 7 | Count each Unicode code point as one character when evaluating length. | SHALL | 3.1.1.2 (4) |
| 8 | If Unicode is accepted, apply NFC normalization before hashing. | SHOULD | 3.1.1.2 |
| 9 | Do not impose other composition rules (for example, requiring mixtures of character types). | SHALL NOT | 3.1.1.1, 3.1.1.2 (5) |
| 10 | Do not require subscribers to change passwords periodically. | SHALL NOT | 3.1.1.2 (6) |
| 11 | Force a change if there is evidence the authenticator has been compromised. | SHALL | 3.1.1.2 (6) |
| 12 | Do not let subscribers store a hint that an unauthenticated claimant can see. | SHALL NOT | 3.1.1.2 (7) |
| 13 | Do not prompt subscribers to use knowledge-based authentication or security questions when choosing passwords. | SHALL NOT | 3.1.1.2 (8) |
| 14 | Request the full password (not a subset of it) and verify the entire submitted password, with no truncation. | SHALL | 3.1.1.2 (9) |
| 15 | When a password is set or changed, compare it against a blocklist of commonly used, expected or compromised passwords. | SHALL | 3.1.1.2 |
| 16 | Compare the entire password against the blocklist, not substrings or words within it. | SHALL | 3.1.1.2 |
| 17 | If the password is on the blocklist, require a different one and give the reason for rejection. | SHALL | 3.1.1.1, 3.1.1.2 |
| 18 | Make the blocklist large enough to stop passwords attackers would likely guess before reaching the attempt limit. | SHOULD | 3.1.1.2 |
| 19 | Offer guidance to help the subscriber choose a strong password. | SHALL | 3.1.1.2 |
| 20 | Implement rate limiting of failed attempts on the account. Unless otherwise specified, no more than 100 consecutive failures per authenticator, then disable it. | SHALL | 3.1.1.2, 3.2.2 |
| 21 | Allow password managers and autofill. | SHALL | 3.1.1.2 |
| 22 | Permit paste when entering a password. | SHOULD | 3.1.1.2 |
| 23 | Offer an option to display the password while it is typed. | SHOULD | 3.1.1.2 |
| 24 | Make limited allowances for mistyping (trimming leading and trailing whitespace, case of the first character), if minimum length and complexity are preserved. | MAY | 3.1.1.2 |
| 25 | Use approved encryption and an authenticated protected channel when requesting passwords. | SHALL | 3.1.1.2 |
| 26 | Store passwords in a form resistant to offline attacks: salted and hashed with a suitable password hashing scheme. | SHALL | 3.1.1.2 |
| 27 | Set the hashing cost factor as high as practical, and increase it over time. | SHOULD | 3.1.1.2 |
| 28 | Use an approved password hashing scheme from the latest SP 800-132 or updated NIST guidance. | SHOULD | 3.1.1.2 |
| 29 | Salt is at least 32 bits, chosen to minimize collisions. Store both salt and hash for each password. | SHALL | 3.1.1.2 |
| 30 | Store a reference to the hashing scheme and cost factor with each password, to allow migration. | SHOULD | 3.1.1.2 |
| 31 | Add an extra iteration of keyed hashing or encryption with a secret key known only to the verifier. | SHOULD | 3.1.1.2 |
| 32 | If that key is used, generate it with an approved random bit generator and store it separately from the hashed passwords. | SHALL | 3.1.1.2 |
| 33 | Keep that key in a hardware-protected area such as an HSM, TEE or TPM. | SHOULD | 3.1.1.2 |
Wording is condensed. Read the text of section 3.1.1.2 before writing policy. SP 800-63B-4 also states that passwords are not phishing-resistant (3.1.1) and not replay-resistant (3.2.7).
Setting and storing a password, as a flow
Password storage, precisely
SP 800-63B-4 asks for a "suitable password hashing scheme": a function that takes a password, a salt and a cost factor and is deliberately expensive, so each guess costs an attacker who steals the hash file. Its normative points are rules 26 to 33 above. Three details are often misquoted:
- It does not name algorithms. It points to "an approved password hashing scheme published in the latest revision of SP 800-132 or updated NIST guidelines" (SHOULD). The 2017 edition named PBKDF2 and Balloon as examples, said a memory-hard function SHOULD be used, and suggested at least 10,000 PBKDF2 iterations. None of those three statements appears in SP 800-63B-4.
- The "pepper" is a SHOULD, but its handling is SHALL. The extra keyed iteration is recommended. If you use it, the key must come from an approved random bit generator and be stored separately from the hashes.
- Record the parameters. Storing the scheme and cost factor with each hash (SHOULD) is what lets you raise the cost later and rehash at the next sign-in.
Choosing a specific algorithm and parameters is outside what this page can state from SP 800-63B-4. Use current NIST guidance where it applies to you, and a widely reviewed password-hashing implementation.
Blocklists
SP 800-63B-4 gives three example sources: passwords from previous breach corpuses, dictionary words, and context-specific words such as the service name, the username and derivatives. Because the minimum length already rules out short passwords, the list only needs entries that meet the minimum (Appendix A). NIST also warns against overdoing it: "excessively large blocklists are of little incremental security benefit", because the blocklist targets online guessing, which rate limiting already bounds. Compare the whole password. Rejecting a password because it contains a dictionary word is a substring rule, and the text says the entire password is what gets compared.
Changes from the 2017 revision
| Topic | SP 800-63B (2017) | SP 800-63B-4 (2025) |
|---|---|---|
| Name | Memorized secret | Password (local PINs split out as activation secrets) |
| Minimum length | 8 if subscriber-chosen; 6 if chosen randomly by the CSP or verifier (SHALL) | 15 for single-factor use; 8 if used only within MFA (SHALL) |
| Composition rules | SHOULD NOT | SHALL NOT |
| Periodic change | SHOULD NOT require arbitrary (e.g., periodic) changes | SHALL NOT require periodic changes |
| Strength guidance to user | SHOULD (for example, a strength meter) | SHALL |
| Password managers | Paste SHOULD be permitted | Password managers and autofill SHALL be allowed; paste SHOULD |
| Unicode normalization | NFKC or NFKD (SHOULD) | NFC (SHOULD) |
| Blocklist | Examples included repetitive or sequential characters | That example dropped; entire password compared, not substrings (SHALL) |
| Typing allowances | MAY collapse repeated spaces | MAY trim leading and trailing whitespace and ignore the case of the first character |
| Truncation | SHALL NOT truncate | SHALL request the full password and verify all of it |
| Hashing | One-way key derivation function (PBKDF2, Balloon named); memory-hard SHOULD; PBKDF2 at least 10,000 iterations suggested | Suitable password hashing scheme; approved scheme per SP 800-132 SHOULD; cost as high as practical and increased over time; no algorithm, memory-hardness or iteration count named |
| Secret key (pepper) | SHOULD use an additional KDF iteration with a secret salt, stored separately (SHALL) | SHOULD use an additional keyed hash or encryption with a secret key; stored separately (SHALL), ideally in an HSM, TEE or TPM (SHOULD) |
OMB M-22-09 had already required US federal agencies to remove password policies requiring special characters and regular rotation within one year of January 2022.
Activation secrets (local PINs) are different
A PIN or password that unlocks an authenticator locally, and is never sent to the verifier, follows section 3.2.10:
- At least 4 characters (SHALL), and at least 6 is recommended (SHOULD). Entirely numeric PINs are allowed (MAY).
- A blocklist of common values such as
123456(SHOULD). - At most 10 consecutive failed attempts, then the authenticator is disabled (SHALL).
- For authenticators usable at AAL3, verification happens in a hardware-protected environment such as a secure element, TPM or TEE (SHALL).
A conforming policy, in plain words
Password policy (aligned to NIST SP 800-63B-4, sections 3.1.1 and 3.2.2)
Length: minimum 15 characters (8 if the password is only ever used with a
second factor); maximum at least 64. Each Unicode code point
counts as one character.
Characters: any printable ASCII, space and Unicode. No required character
classes. No other composition rules.
Screening: the full password is checked against a list of breached, common
and service-specific passwords. Rejected passwords get a reason.
Change: no scheduled expiry. Forced change on evidence of compromise.
Entry: paste and password managers allowed; "show password" offered.
Not used: password hints, security questions.
Attempts: at most 100 consecutive failures, then the password is disabled
and must be bound again (or the account recovered).
Storage: salted (32+ bit salt) hash using an approved password hashing
scheme at the highest practical cost, plus a keyed hash with a
key held in an HSM. Scheme and cost stored with each hash.
Test your own policy against these rules with the password policy checker.
Common mistakes
- Keeping "one uppercase, one digit, one symbol" alongside a long minimum. Under SP 800-63B-4 that is a SHALL NOT.
- Applying the 8-character minimum to a password that can also be used alone, for example on a legacy protocol that skips MFA. Then it is single-factor and needs 15.
- Blocking paste "for security". Autofill must work (SHALL), and paste should (SHOULD).
- A blocklist check that matches substrings and rejects good passphrases.
- Expiring passwords every 90 days. Rotate on evidence of compromise instead, and detect compromise (breach-corpus checks at sign-in are a common practice).
- Fast, unsalted or single-iteration hashes, or a "pepper" stored in the same database as the hashes.
Sources
- NIST SP 800-63B-4: Authentication and Authenticator Management, NIST. Public domain (U.S. government work).
- NIST SP 800-63B (2017): Authentication and Lifecycle Management (superseded), NIST. Public domain (U.S. government work).
- NIST SP 800-53 Rev. 5: Security and Privacy Controls for Information Systems and Organizations, NIST. Public domain (U.S. government work).
- OMB M-22-09: Moving the U.S. Government Toward Zero Trust Cybersecurity Principles, Office of Management and Budget. Public domain (U.S. government work).