Security & Privacy

What actually makes a password strong (it is not the special characters)

P@ssw0rd! satisfies every complexity rule ever written and is one of the first things any cracking tool tries. Here is what the maths actually says.

3 minute read

Password strength has a precise definition: how many guesses an attacker needs to try, on average, before finding yours. That number is usually expressed in bits of entropy, where each extra bit doubles the work.

The formula

For a password drawn randomly from a set of possible characters:

entropy = length × log₂(charset size)
  • Lowercase only (26 chars): 4.7 bits per character
  • Lowercase + uppercase + digits (62): 5.95 bits per character
  • Full printable ASCII (95): 6.55 bits per character

So a random 8-character password from the full ASCII set is about 52 bits. A random 16-character lowercase password is about 75 bits, dramatically stronger despite using a smaller alphabet, because length multiplies while charset size only adds logarithmically.

Length beats complexity, and it is not close.

The word "randomly" is doing all the work

That formula only applies if the password was chosen uniformly at random. Human-chosen passwords are nothing of the sort.

P@ssw0rd! has 9 characters from a 95-character set, nominally 59 bits. Its real strength is close to zero, because it is a dictionary word with the four most predictable substitutions applied, and every cracking tool applies exactly those rules first. Password crackers do not brute-force; they use wordlists from previous breaches, then apply mangling rules.

Similarly, the requirement to include one uppercase, one digit and one symbol reliably produces passwords of the shape Capital + word + digits + !. The rule intended to add unpredictability instead narrowed the search space.

Passphrases

Pick four words at random from a list of 7,776 (the standard Diceware wordlist):

7776⁴ ≈ 3.7 × 10¹⁵ combinations ≈ 51.7 bits

Five words gives about 64.6 bits, six about 77.5 bits. A six-word passphrase is stronger than most random 12-character passwords and is memorable.

The critical condition again: the words must be selected randomly, not chosen by you. A phrase you thought of is a phrase a language model can generate. Roll dice, or use a generator.

What the standards now say

NIST's SP 800-63B guidance, which most modern policy follows, reversed decades of conventional advice:

  • No mandatory periodic rotation. Forcing a change every 90 days produces Summer2024! → Summer2025!. Change passwords when there is evidence of compromise.
  • No composition rules. Do not require particular character classes.
  • Do require length, a minimum of 8, and support for at least 64 so passphrases are usable.
  • Do check against breach lists. Rejecting known-compromised passwords is far more effective than any complexity rule.
  • Allow paste. Blocking it actively breaks password managers, which are the single best thing a user can do.

Reuse is the real problem

The most likely way your account gets taken over is not brute force. It is credential stuffing: an attacker takes email/password pairs from a breach at one site and tries them everywhere else, automatically.

Which means a perfect 20-character password used on two sites is weaker in practice than two mediocre ones used on one site each. Uniqueness matters more than strength.

This is the argument for a password manager, and it is decisive: it is the only way to have a different high-entropy password on several hundred services without a heroic memory.

Sensible targets

Account type Target
Throwaway / low value 12+ random characters, manager-generated
Ordinary account 16+ random characters
Email, banking, password manager 20+ characters or a 6-word passphrase, plus 2FA

Your email account deserves the strongest password you have. Everything else can be reset through it, which makes it the master key to your online life whether you designed it that way or not.

Generating properly

A generator is only as good as its randomness source. Math.random() is not cryptographically secure, its output is predictable from a modest number of samples. A password generator should use the platform CSPRNG (crypto.getRandomValues).

That is what the password generator and passphrase generator here do, and because they run in your browser, the generated password is never transmitted to anyone, which is an obvious requirement that online generators do not all meet.

You can also check an existing password's entropy with the strength checker without sending it anywhere.

Further reading

Do it herePassword GeneratorGenerate cryptographically strong passwords with custom charset and entropy meterOpen

Written for NextTool. Every statement about a tool is checked against that tool's code, and corrections are dated above. How guides are written

passwordsentropyauthentication