Password Generator

Strong passwords and passphrases, made in your browser with an honest strength figure

Your password

    How it is made

    Drawn from a list of 2,347 short, common English words. Each one is worth11.2 bits, so five of them come to about what nine random characters would give you, and you have some hope of remembering it.

    Built one syllable at a time out of English sounds, so it can be read down a phone line without spelling every letter out.

    A few more to pick from

      Everything here happens in your browser. Nothing is sent anywhere, nothing is stored, and the password is gone the moment you close the tab. The settings are saved, because they are just settings, but what comes out of the generator never touches the address bar or your local storage.

      Where the randomness comes from

      A byte holds 0 to 255. Taking it modulo 62:
      
      0, 62, 124, 186, 248  ->  a    five ways
      1, 63, 125, 187, 249  ->  b    five ways
      ...
      8, 70, 132, 194       ->  i    four ways
      
      The first eight letters come up 25% more often
      than the rest. Throwing away anything above 247
      and asking again fixes it, and costs nothing.

      The browser has a proper cryptographic generator built in, and this uses it. The interesting part is what you do with the number it hands back. Squashing a random value into a range with a remainder is the obvious move and it is slightly wrong: unless the range divides the number of possible values exactly, some outcomes get one more chance than others.

      With a 32-bit value and 86 characters the bias is tiny, around one part in fifty million. It is still avoidable for free, so it is avoided. Values that would land in the uneven tail get thrown away and another one is drawn. The same picker does the shuffling, so the guaranteed digit does not always end up in the same place.

      What the bits mean

      20 characters, all four sets, at least one of each
      
      every string of 20      86^20    = 4.9e38  128.53 bits
      minus the ones with no digit       76^20 = 4.1e37
      minus the ones with no symbol      62^20 = 7.0e35
      minus the other two, then back again for
      every pair that got taken off twice
      
      what is left            4.5e38            128.39 bits
      
      The requirement cost 0.13 bits. It is not nothing,
      and it is not the point either.

      Entropy here measures the machine, not the string. Two passwords can look equally random and be worlds apart if one came out of a list of a thousand and the other out of a list of a trillion. The figure is the log of how many passwords this tool could have handed you with these settings, so it answers the only question that matters: how many would somebody have to try.

      Ticking "at least one of each" makes it go down, not up. Every string without a digit has been removed from what the generator could produce, so there are fewer of them for an attacker to search. The count above uses inclusion and exclusion to get the exact figure instead of pretending the requirement is free. The loss is small, and the reason to keep the box ticked is that sites demand it, not that it helps.

      The pronounceable mode goes further and counts the word in front of you. Two different sets of syllables can land on the same letters, so that word was more likely to appear than the multiplication suggests, and it gets scored lower to match.

      Length beats cleverness

      Tr0ub4dor&3                   28 bits
      correct-horse-battery-staple  44 bits
      
      One is unreadable and weaker. The other is four
      ordinary words. Randall Munroe made the point in
      2011 and it has not stopped being true.

      Substituting a 3 for an E and sticking an exclamation mark on the end is a transformation every cracking tool has known about for thirty years. It adds almost nothing to the search and a great deal to the difficulty of typing the thing on a phone.

      Four or five words picked at random beat it comfortably, and you can say them out loud. The catch is the two words "at random". A phrase you thought of is not random, because you thought of it, and so did other people.

      The rules that make things worse

      A site that demands one capital, one digit
      and one symbol in eight characters has
      narrowed the search, not widened it.
      
      The attacker knows the rule too.

      Composition rules were a reasonable idea in 1985 and have been harmful ever since, without anybody noticing. NIST dropped them from its guidance in 2017, along with forced expiry, and now recommends length, a check against known breached passwords, and otherwise leaving people alone.

      Forced rotation is the other one worth knowing about. Making people change a password every ninety days produces january2024, then april2024, and an attacker who has seen one has effectively seen them all.

      How long the times are worked out

      The figures assume an attacker who knows exactly how the password was made and searches that space and nothing else. Average time is half the space, because on average you find it halfway through. Four rates are shown because the answer changes by twelve orders of magnitude depending on who is asking.

      Guessing at a live login is slow and gets you locked out. A stolen database hashed with bcrypt or argon2 is thousands of guesses a second. The same database hashed with unsalted SHA-256 is hundreds of billions, which is why the choice of hash on the other end matters more than anything you can do at this one.

      What to actually do

      Use a password manager and let it hold long random strings you will never read. Keep two or three passphrases in your head for the things that unlock everything else: the manager itself, your laptop, your email. Turn on two factor authentication wherever it is offered, because it survives the password being wrong.

      And never reuse one. The most common way an account is lost has nothing to do with the strength of its password. It is that the same password was used somewhere that leaked.