32-Character Passwords
Thirty-two characters is a machine credential, not a human one. It is the right length for database users, service accounts, admin panels and anything stored in a secret manager and never typed.
At this length the password is no longer the weak point in any realistic threat model — how it is stored, who can read the secret store, and whether it appears in a log file are the questions that matter.
The Entropy of This Setting
Drawing 32 characters from an alphabet of 92 — upper case, lower case, digits and punctuation — gives about 209 bits of entropy. At a trillion guesses a second, which is what a well-funded attacker with GPUs achieves against a fast hash, exhausting half that space takes 1.3 × 10^43 years.
| Length | Entropy | Time to crack at 10¹² guesses/sec |
|---|---|---|
| 8 characters | 52 bits | 38 minutes |
| 12 characters | 78 bits | 4,789 years |
| 16 characters | 104 bits | 3.2 × 10^11 years |
| 20 characters | 130 bits | 2.2 × 10^19 years |
| 24 characters | 157 bits | 2.9 × 10^27 years |
| 32 characters | 209 bits | 1.3 × 10^43 years |
Symbols Add Less Than People Think
Moving from 62 characters to 92 adds about 0.6 bits per character. On a 16-character password that is roughly 9 bits — real, but worth less than adding two more letters. Symbols matter mainly because they defeat dictionary and pattern attacks, not because of the arithmetic.
Some systems still reject particular symbols, or silently truncate at a length you cannot see. If a password fails to work after being accepted, that is usually why.
Generated in Your Browser
The generator uses crypto.getRandomValues(), the platform's cryptographically secure
random source, not Math.random() — which is fast, predictable and unfit for this purpose.
Nothing is transmitted and nothing is logged; the value exists only in your tab.
This Is a Machine Credential
At 32 characters nobody is typing this, which changes what the risks are. The password itself is no longer attackable; how it is stored and handled is:
- Never in source control. Once committed it is in the history permanently — rotating is
- In a secret manager, not an environment variable pasted into a dashboard and forgotten.
- Rotatable without downtime, which means the system must accept two valid values at once.
- Out of logs. Error reporters routinely dump the whole environment, and that dump is
Where Passwords Actually Leak
| Cause | Share of breaches | Mitigation |
|---|---|---|
| Reuse after another site's breach | Largest single cause | A unique password per site |
| Phishing | Large | A password manager (it will not autofill on the wrong domain) |
| Weak or guessable | Moderate | Length and real randomness |
| Server-side breach | Moderate | Not yours to control; 2FA limits the damage |
Storing Them, If You Are the Server
``javascript
// Argon2id is the current recommendation
const hash = await argon2.hash(password, {
type: argon2.argon2id,
memoryCost: 19456, // 19 MiB
timeCost: 2,
parallelism: 1,
});
`
Never store plaintext, never store a fast hash, never encrypt reversibly. Salt is per
password and generated by the library. Peppering — a secret added outside the database —
helps only if the pepper lives somewhere the database dump does not.
Rules Worth Dropping
NIST SP 800-63B now advises against several long-standing practices:
Forced periodic rotation. It producesPassword1,Password2` and nothing else.- Composition rules. They shrink the search space by making the pattern predictable.
- Password hints and security questions. Both are usually easier to guess than the
- Truncating length. Accept at least 64 characters; a passphrase should fit.