I'm getting better
It could be argued that Steve seemed to dismiss the idea of Padding with the episode titled
The Death of Clever and, in my mind, that episode serves as a bookend to that period as the following year Steve would have the SQRL revelation and would no longer focus on improving human password generation. 2011's
Off The Grid would be his final project related to human-generated passwords.
Even the phrase "death of clever" suggests that Steve was moving on to think more about the larger authentication problem and less about human password generation, which could not be solved with clever tricks. The eventual result of this shift was, of course, SQRL, which would consume nearly a decade of of his life.
Leo even brought up padding specifically during the
Clever episode and though Steve would not state outright that "padding is dead", he repeatedly steered the conversation back towards "clever" no longer being valuable and, to my knowledge (and search abilities), the phrase "password padding" has never again been mentioned on the show in this context. At the time "Clever" aired, Steve was obviously thinking differently than he was during the "Haystacks" days. However...
Padding was never a solution to entropy, which Steve consistently acknowledged. I felt that password padding was neither as novel as Steve initially believed nor as powerless as he seemed to later suggest. It is what it is: a
tool. If used properly, tools can be quite useful. Many people were already "padding" in practice (i.e. for WiFi passwords) before it became a
Security Now topic, but Steve named, fleshed out, and popularized the concept and deserves credit for doing so.
Mathematical effectiveness
I will absolutely pad WiFi passwords
if it helps users to type it into their device. I tend to use words for WiFi passcodes as I think people are comfortable with typing them, even in password fields where auto-type is disabled. Random words can even be thought of as "pre-padded entropy" as they are not worth the entropy of an equal-length string of random characters, but are worth more than a single character. We can use repeated characters for padding where convenient, but I do not
count repeated characters in my strength calculations.
If I take the passphrase:
1steed2shining3sea4food
I choose to count the
effective characters as:
1st2shsefo
which is 10 characters from the
decmial+lowercase set with a dictionary size of 36. I consider this to be 51 bits of entropy and offer a haystack size of 3.7x10^15 guesses. This is
not strong enough and the words aren't
random, but it should suffice for this example.
I count each word as equivalent to 2 characters out of convenience as there was some agreement long ago in the newsgroups that each
random dictionary word offered entropy similar to 2 random ASCII characters. 2 ASCII characters totals 13 bits and Diceware has a dictionary size of 7776 or ~13 bits per word; other dictionaries are larger, but there are diminishing returns to dictionary size beyond this magnitude. For example, a dictionary size of 100,000 only gets us 16.6 bits per word and most people are not using obscure words anyway.
I do not count the characters as full ASCII in this example because the password contains only
decimal+lowercase and I err on the side of weakest-case when estimating strength. This is also why I only count the first 2 decimals as they are in a simple counting pattern of 1-2-3-4; I should not get full credit for
random decimals when I've instead use ordered decimals as padding.
We could pad the password further, perhaps like:
@start----1steed2shining3sea4food----end@
I would consider the
effective character string for calculations to be something like:
@s-1st2shsefo-e
which is 15 characters from the
decimal+lowercase+ascii_symbol set with a dictionary size of 69. I consider this to be 91 bits of entropy and offer a haystack size of 3.8x10^27 guesses. I don't count the repeated "-"'s or the last "@" as they are part of simple patterns, but calculated complexity still went up substantially. I'm also counting the words as only 1 character each rather than 2 because they are simple words and part of a simple pattern. Again, I err on the side of
weaker when calculating.
By my methodology, the padded password is substantially stronger than bare, but this is simply because the password is longer, not because the padding itself is strong. So long as we include substantial entropy in the password, preferably a random-generated string, the padding still serves the same purpose that it always did; adding length while potentially making the password convenient to type.
Lengthening random strings
I should also show an example with better entropy. If we generate a truly random 14-character ASCII string, such as:
zX7V9_0xdH4lG7
and then add padding, such as:
123456------zX7V9_0xdH4lG7-------890
(6 dashes after the number 6 and 7 dashes after the number 7)
then we have produced a substantially longer password while using only a 14-character sequence of random, hard-to-type gibberish. I don't like counting repeated characters, but simple forms of padding are still perfectly valid so long as you understand that some minimum amount of entropy is required as a baseline. No "clever" attack can reduce this example password to less than 14 random characters of strength and in reality it will be stronger than that. How strong isn't worth debating as we can know for certain that it's "equal to or greater than" 92 bits.
Repeated symbols can be
harder to type than non-repeated symbols as you can lose count of how many dashes or periods you've entered, especially as most password fields are protected by asterisks as you type. I tend to avoid them for this reason, favoring words instead.
Passphrases
I make an effort to create WiFi passwords that are easy for human beings to type even without seeing them and find that words are easier to type than long strings of repeated characters. I use words as
implicit, or integrated, padding. I try to use words that people can understand when spoken and I currently tend to use numbers between the words as that creates a sort of ordered list. My method is not better or worse than any other, so long as total entropy is sufficient for the application. I only bother with padding when making passwords that must be typed by hand.
I do recommend using truly random words where practical. There are websites that will generate random words, such as
this one and
this one. You can even get more obscure words, albeit one at a time, from
here and generate structured sentences (i.e. noun-verb-adjective-noun)
here. I don't use full sentence generators as the sentences tend to make sense and thus are not very random; I want nonsense and nonsense can even
help with memorization, if necessary. Everyone should learn at least a little about mnemonics, in my opinion.
As some will point out that it isn't "secure" to obtain randomness from the web, rest assured that you can generate a sequence of words by choosing every 3rd one in the list after every page refresh or something like that; you can even combine words from multiple generators. Be creative. If you have a paper dictionary, feel free to use it, but I don't bother. I do tend to avoid complex, unknown words if friends and family will need to type them, however.
And so...
Feel free to pad your passwords; just make sure that they contain some minimum amount of entropy overall. Simple padding sequences like "____" or "===" should not be counted towards your entropy goal even though attackers will have to guess those sequences; be
harsh when estimating strength. It is so incredibly easy to make passcodes that cannot be guessed with a trillion dollars worth of electricity that there's no reason to be generous when estimating strength; assume the worst and prepare accordingly.
It's easy to get caught up in the minutia here and I hope to encourage readers to step back a bit and simplify things. We don't need to debate "where" the padding should go or be the hardest to guess.
It doesn't matter. Simply:
- Use padding only where humans will need to memorize and type a passcode
- Ensure that a minimal level of randomness exists
92 bits or 14 random ASCII characters worth is a good starting point, though I prefer even more for WiFi passwords. If you ensure a minimum level of randomness, padding can only make that password stronger, no matter how you use it. It's not possible for padding to be stronger or weaker at the beginning, end, or in any particular location; padding is just low-entropy junk that makes a passcode longer.
So, there is no best way to use padding. You add enough randomness to resist best-case guessing attacks and integrate padding as desired. To estimate strength, either ignore the padding altogether or assume that it adds only a few characters of brute force strength. Padding can either be
explicit as with repeated characters or sequences or
implicit as with dictionary words. Either way, it is a useful tool and is certainly
not dead. It feels happy and thinks it will go for a walk

.