privileged.id

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.

Reviewed 7 min read 4 primary sources

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

#RuleStrengthSection
1Passwords are either chosen by the subscriber or assigned randomly by the CSP.SHALL3.1.1.1
2Passwords used as a single-factor authentication mechanism are at least 15 characters.SHALL3.1.1.2 (1)
3Passwords used only as part of multi-factor authentication may be shorter, but must be at least 8 characters.MAY be shorter; SHALL be ≥ 83.1.1.2 (1)
4Permit a maximum password length of at least 64 characters.SHOULD3.1.1.2 (2)
5Accept all printing ASCII characters and the space character.SHOULD3.1.1.2 (3)
6Accept Unicode characters.SHOULD3.1.1.2 (4)
7Count each Unicode code point as one character when evaluating length.SHALL3.1.1.2 (4)
8If Unicode is accepted, apply NFC normalization before hashing.SHOULD3.1.1.2
9Do not impose other composition rules (for example, requiring mixtures of character types).SHALL NOT3.1.1.1, 3.1.1.2 (5)
10Do not require subscribers to change passwords periodically.SHALL NOT3.1.1.2 (6)
11Force a change if there is evidence the authenticator has been compromised.SHALL3.1.1.2 (6)
12Do not let subscribers store a hint that an unauthenticated claimant can see.SHALL NOT3.1.1.2 (7)
13Do not prompt subscribers to use knowledge-based authentication or security questions when choosing passwords.SHALL NOT3.1.1.2 (8)
14Request the full password (not a subset of it) and verify the entire submitted password, with no truncation.SHALL3.1.1.2 (9)
15When a password is set or changed, compare it against a blocklist of commonly used, expected or compromised passwords.SHALL3.1.1.2
16Compare the entire password against the blocklist, not substrings or words within it.SHALL3.1.1.2
17If the password is on the blocklist, require a different one and give the reason for rejection.SHALL3.1.1.1, 3.1.1.2
18Make the blocklist large enough to stop passwords attackers would likely guess before reaching the attempt limit.SHOULD3.1.1.2
19Offer guidance to help the subscriber choose a strong password.SHALL3.1.1.2
20Implement rate limiting of failed attempts on the account. Unless otherwise specified, no more than 100 consecutive failures per authenticator, then disable it.SHALL3.1.1.2, 3.2.2
21Allow password managers and autofill.SHALL3.1.1.2
22Permit paste when entering a password.SHOULD3.1.1.2
23Offer an option to display the password while it is typed.SHOULD3.1.1.2
24Make limited allowances for mistyping (trimming leading and trailing whitespace, case of the first character), if minimum length and complexity are preserved.MAY3.1.1.2
25Use approved encryption and an authenticated protected channel when requesting passwords.SHALL3.1.1.2
26Store passwords in a form resistant to offline attacks: salted and hashed with a suitable password hashing scheme.SHALL3.1.1.2
27Set the hashing cost factor as high as practical, and increase it over time.SHOULD3.1.1.2
28Use an approved password hashing scheme from the latest SP 800-132 or updated NIST guidance.SHOULD3.1.1.2
29Salt is at least 32 bits, chosen to minimize collisions. Store both salt and hash for each password.SHALL3.1.1.2
30Store a reference to the hashing scheme and cost factor with each password, to allow migration.SHOULD3.1.1.2
31Add an extra iteration of keyed hashing or encryption with a secret key known only to the verifier.SHOULD3.1.1.2
32If that key is used, generate it with an approved random bit generator and store it separately from the hashed passwords.SHALL3.1.1.2
33Keep that key in a hardware-protected area such as an HSM, TEE or TPM.SHOULD3.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 set or change flow: accept input including paste, normalize, check length, check the blocklist, then salt, hash with cost and optionally apply a keyed hash before storing. New password paste and autofill work NFC normalize if Unicode accepted Length check 15+ (8+ if MFA only) Blocklist check whole password Reject say why, give guidance Hash with salt salt 32+ bits, high cost Keyed hash secret key in HSM Store salt, hash, scheme fail pass No composition rules, no hints, no security questions, no expiry date. The keyed-hash step is SHOULD. If used, the key is stored apart from the hashes. Change only on evidence of compromise (SHALL), never on a schedule (SHALL NOT).
What a conforming set-or-change path looks like. Rate limiting (rule 20) applies on the verification side, not shown here.

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

TopicSP 800-63B (2017)SP 800-63B-4 (2025)
NameMemorized secretPassword (local PINs split out as activation secrets)
Minimum length8 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 rulesSHOULD NOTSHALL NOT
Periodic changeSHOULD NOT require arbitrary (e.g., periodic) changesSHALL NOT require periodic changes
Strength guidance to userSHOULD (for example, a strength meter)SHALL
Password managersPaste SHOULD be permittedPassword managers and autofill SHALL be allowed; paste SHOULD
Unicode normalizationNFKC or NFKD (SHOULD)NFC (SHOULD)
BlocklistExamples included repetitive or sequential charactersThat example dropped; entire password compared, not substrings (SHALL)
Typing allowancesMAY collapse repeated spacesMAY trim leading and trailing whitespace and ignore the case of the first character
TruncationSHALL NOT truncateSHALL request the full password and verify all of it
HashingOne-way key derivation function (PBKDF2, Balloon named); memory-hard SHOULD; PBKDF2 at least 10,000 iterations suggestedSuitable 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

  1. NIST SP 800-63B-4: Authentication and Authenticator Management, NIST. Public domain (U.S. government work).
  2. NIST SP 800-63B (2017): Authentication and Lifecycle Management (superseded), NIST. Public domain (U.S. government work).
  3. NIST SP 800-53 Rev. 5: Security and Privacy Controls for Information Systems and Organizations, NIST. Public domain (U.S. government work).
  4. 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).