The man who wrote the book on password management regrets the error
wsj.com
wsj.com
Ars Technica did a long look at password cracking techniques[1] that covered stuff like this. The tl;dr is that any strategy short of full randomness is wrong. Either use a password manager, or use a set of dice, just make sure that your own human predictability cannot meaningfully affect the outcome.
[1] https://arstechnica.com/information-technology/2013/05/how-c...
>>> log2(2048 ** 4)
44.0
Even if somebody knows the pattern they have 17 592 186 044 416 passwords to try. You can further increase number of passwords to try by increasing number of words. Probably with advances of technology 4 words may be somewhat unsecure in the future, but 5 words is 2048 times harder to crack than 4 words password, so it should be still secure.The article in question shows three word passwords being cracked, but please note that three words is 2048 times easier to crack than 4 words, and probably very feasible to crack using graphics cards (provided poor choice of algorithms like MD5).
I think you may have missed the point that the XKCD cartoon was making. The question here is NOT how to generate passwords that are hard for computers to guess. That's a solved problem: simply generate a 128-bit string with a secure random number generator, and that's your secure password that computers can't guess easily.
The PROBLEM is to generate a password where the ratio of ease-for-humans-to-remember to ease-for-computers-to-guess is maximized. Using words from a language other than your own is NOT a good way to maximize this. Introducing just one more randomly-generated word from your own language will be far more effective by this criterion.
Just for completeness, your strategy assumes the attackers are assuming a particular language - which I would guess is probably the right thing for them to do, if they are looking for low-hanging fruit.
Like, say, every 3rd letter of the words you choose will be upper. hoRse or baTtery etc...
You've doubled the character set so it's not negligable.
There are infinitely many non dictionary words.
I also didn't say to use _strictly_ non dictionary words.
A large KDF helps, but damages user experience and again starts to become fragile if your threat model includes ASICs (a $3m expense or so for an attacker. That's a practical sum for many applications).
To put things in perspective, a CPU can do about 2^20 hashes per second. A $3m ASIC cluster (made entirely from scratch) can do about 2^52 hashes per second. It's obscenely asymmetric.
For high security accounts, you really want like 64 bits of entropy in your password plus a KDF, or you want 80 bits without a KDF.
KDFs have another major problem. If you forget a word in your password, and you also have a KDF, you have to fight your own KDF to discover that last word. You don't want that barrier.
edit: was off by a factor of 1000 in my ASIC math. $3m in ASICs can do about 2^52 hashes per second, not 2^42
The strategy itself still works, even if the particular details of implementation change.
> 1000 Guesses/Sec (Plausible attack on a weak remote web service. Yes, cracking a stolen hash is faster, but it's not what the average user should worry about.)
I think we should work on an opensource gem or plugin for cakephp that does this and hope a website uses it. It would be very good data for research into the psychology of choosing passwords.
Just imagine all the potential findings!
I think you mean 64 bits and 80 bits!
You pretty much want it. Why would you make your password easy to brute force so that you can recover it in case you forget it? This makes no sense.
A 6 word phrase reaches your 64 bits target (on the GP's 2-48 word dictionary). It is still easier to remember than a base64 dump of a 64 bits random number. I still fail to see anything wrong with passphrases.
Being able to brute Force your own password is a good thing if you can at least depend on knowing most of it.
Edit: Realised Google exists, currently reading https://stackoverflow.com/questions/16891729/best-practices-...
They should salt. They should do many things. But we know some sites don't, we suspect many sites don't. Unless you know otherwise never assume a site is handling your data, including your login credentials, securely.
Unless the hash is 'broken' but then your options are fairly limited anyway.
Yes, if you go below that I'd say it's insecure. It's a conservative estimate, I admit. An entropy of 60 might be okay, too, but there is no harm in making passwords more secure.
Well, it makes them harder to remember and slower to type (and increases the chance of making an error and having to type it again). I hesitate slightly to do things that require me to type my long password. :-)
It isn't quite right to treat each word as a symbol either from the information theoretic standpoint. If an attacker /knows/ your password is xkcd style words there is still cracking cost to choosing to crack using only that strategy.
To achieve similar entropy for a classic password you would need say, 8 characters A-Za-z (~7.71 characters required to achieve 44 bits of entropy) (https://en.wikipedia.org/wiki/Password_strength)
But now the cracker has to run two strategies (word based, and classic character based). Granted it is only "times two" and not an exponential increase you get by increasing your number of available symbols or better yet total number of symbols.
In a "readable words dictionary" with say 75000 words you can achieve ~64 bits of entropy. This is also completely ignoring some facets of password storage and hashing. For example, ASICs are good, but not great against scrypt since it is memory hard. So storage format matters a lot. In an offline attack of the worst case known scenario (MD5) lets just call it 25,000-100,000 MH/s in your house without a crazy amount of expense.
That works out to a (on the shortest end of things for 'desktop cracking') about 5 - 6 years. That password is safe for some time against password dumps and such. No one but a high resource attacker that wants your specific password is going to crack it in the near future if a password like that was leaked as an md5 hash. No cute articles about 90% success rates of cracking, etc.
So, the security always comes down to the needed security. Right now 5 years is pretty good. You hopefully change your passwords every 5 years. Add in a 5th symbol in word based passwords and you hit 80 bits of entropy though. That takes the crack time up to about 383,000 years. It is such a vast difference it isn't even funny.
So: 5 or 6 years vs 383,000 years. Basically, use a 5th word. This is all for a desktop cracker, but even someone with 10000 times the desktop crackers resources (e.g. ~50000 GPU, or at least several hundred ASICS) would still be working on a scale of decades.
Using non-alphabet padding symbols (even if they are all the same and as trivial as 111 or !!! at both ends) will improve entropy by a decent amount while being just as easy to remember.
However the password itself is still only 1 aspect of security. There are many cases where there are far easier attack vectors that don't including cracking hashes.
ruby -e 'puts File.read("/usr/share/dict/words").lines.sample(3).map(&:chomp).join(" ")'
"applewife holographic intercommonage"Easier to remember than `rand(254)` => 16495714355860079
As I can't be bothered to even check which ones to delete, I will definitely not be updating any of those.
So like, Abzysbej@10netflix and Abzysbej@10hulu
google: mojko2if6bibe78
youtube: mojku2if6bibe78
yahoo: mojkh2if6bibe78
Note that I don't advocate this strategy for high-security applications, but for throwaway accounts that you might want to access when not having access to your password manager it might be useful.
I think I remember just these passwords: my 2 banks (that keep my savings), stock broker, primary email a/c, AppleID, personal VPS. For these too I keep very personal hints (no one else can guess) in KeePass (just in case).
Master passwords for LastPass and KeePass are quite difficult and I don't keep its hint or anything anywhere. It's a risk I decided to take. On the downside I have not changed these two passwords in a long time.
Rest goes to LastPass (100s of them).
> ruby -e 'puts File.read("/usr/share/dict/words").lines.sample(3).map(&:chomp).join(" ")'
xanthopsin pollenite aquascutum
$ wc -l /usr/share/dict/words
99156 /usr/share/dict/words
Sticking with Ruby: > Math.log(99156,2)*3
=> 49.79223735944021
That's some ways off from 54-bits, but you can bump it over 66 bits by using four words.Second, from what I gather from [1],[2] and [3] - you should probably use SecureRandom for cryptographic/security purposes:
$ ruby -e 'require "securerandom"; puts \
File.read("/usr/share/dict/words").lines.sample(4, \
random:SecureRandom).map(&:chomp).join(" ")'
remorse's mountaineers said arrival's
[1] https://ruby-doc.org/core-2.4.1/Array.html#method-i-sample[2] https://ruby-doc.org/core-2.4.1/Random.html
[3] https://ruby-doc.org/stdlib-2.4.1/libdoc/securerandom/rdoc/S...
I'd argue that when targeting the same number of bits of entropy the XKCD method is still easier to remember than a bunch of fully random characters.
I thought the point was that a increasing the length typically does more for you in terms of entropy than increasing the size of the alphabet.
> The tl;dr is that any strategy short of full randomness is wrong.
I don't know. You might want to have a password with some regularity to make it easier to remember (at the expense of being longer for a given entropy).
If they flip to using words as part of their alphabet and I'm using 4 unique words, they still have a large search space because the English language has so many more words than the alphabet has letters.
So do they just do both? Seems like a huge expansion in computational work.
Took me a long time to come up with a password.
Some of this is from memory, so it might not be exact, but the requirements were:
1. Passwords must be exactly 14 characters long
2. Passwords must contain all 4 character classes (upper case, lower case, numbers, symbols)
3. Symbols must be from the set (! , . : ; " $ % & *) -- This wasn't specified, I had to figure it out from trial and error.
4. No more than two characters from any one class in a row (so aaBB is ok, aaaB is bad)
5. Passwords must be reset every 3 months
6. Passwords can not be similar to any previous passwords (it's vague what "similar" means)
7. Passwords must not be stored externally (IE, no copy/paste, no password managers)
Luckily I don't have to use that system anymore, because it was just completely awful. To be fair, they also had smartcards that didn't require this password nonsense, so I think the requirements were partially to encourage people to use the smartcards instead.
Run Firefox
Change this about:config option "dom.event.clipboardevents.enabled" to "false".
No more blocking of pasting into password fields by any site.
[0] https://security.stackexchange.com/questions/68013/facebook-...
Really I should be thanking Apple though for helping me save money.
Lately citing the NSA's change in position has been convincing enough and we don't get nearly as much push back.
A sample password might be: "Zapagar, lightning chomper"
Or maybe: "plodding! Sloimo can't 3lap"
It's much easier to remember a password if it forms a little story in your head.
Too many people try to optimize the "hard to guess" part of a password requirement without considering the "easy to remember" requirement. Typing long passwords isn't nearly as much of a hassle if it is full of normal words instead of insane garbage like L1ghtn1nG that computers can easily guess anyway. Length is the best defense.
Just use a proper password manager, then you can have proper randomly generated passwords that do not each need to be remembered (and their association to a site remembered as well).
Also, my password manager protects me against phishing attacks such as being sent a password reset for my iCloud account, and clicking on the link to icloud.malicious.com. if my PW manager doesn't fill it in automatically, I don't give it my credentials as there's something wrong.
You also imply that value is a fixed cost. For instance, in 2008 when I signed up to facebook, it was a low value account, now it's a high value account.
For certain people (myself included) that's a much bigger risk factor than getting your password manager db compromised.
If I lose my keychain authenticator or what have you, I don't want to be stuck not being able to use any of my websites until a new one arrives.
I'd love to be in a world where I click the website login button, I then type a simple pin into a key fob, then I plug the fob into a USB port, and it authenticates me. No password other than the pin. I'd also love it to just be a 'thing', not a way to just hack filling in a password field on a form.
So if I have a hashed password, and I start a hashing a dictionary, will I know that I have, say, the [whatever the word is for iterations or depth of hashing] correct, before seeing exact matches with the hashed database? Is there, I don't know, some convergence of some statistical property of the output as I get closer?
In general, that depends on the hash function. Some hash functions have that property (e.g. you might want to use such a function for some internal data structure), but cryptographic hash functions must not. If you'd find some property where you could check if you're "getting close", then that would be a major flaw in that function - i.e., it's possible that SHA-3 has some way to do that, but as far as we know (and we've tried) it does not, and if it would be the case then that would be a good enough reason to stop using SHA-3 anywhere.
Not trolling, I guess for people that don't know how it works it can be confusing.
Your comment just make me thought of that, and how it makes me laugh each time I see that on a movie/show. And also realize that there is surely a (big) part of non-tech people that may think it's how it works.
If an encrypting method "tells" you you're getting close, it will be a bad one.
(and sorry if you took it personaly. Next time I'll check the poster profile first :)
The above is just one of the subtle things you need to worry about when trying to design a password checker. If you get it right the answer is NO, the attacker doesn't know when he is getting close.
However, for plaintext passwords using the default string comparison routines, a timing attack becomes possible since it will take slightly longer to compare a partially right password than a completely wrong password. The timing discrepancies would give the attacker clues about how close he is to succeeding.
I assume they're hashing all the passwords anyway.
Bad assumption. And many that do hash are using MD5 and don't bother salting.
This is often an external code smell of not hashing the passwords but instead storing them as plaintext in a CHAR(8) field in a SQL database somewhere.
That is, a site were we would search for "gmail.com" and it would say "minimum 8 characters. 1 letter, 1 digit and 1 symbol mandatory" (made up example).
Then of course there could also be Firefox/Chrome extensions that would query this site and show the rules near login prompts.
I'd make it myself were it not for the lack of time... but if anyone wants to pick up the idea, there it is. I just ask for 10% of ad revenue :)
One is that rotation and complexity rules lead to password spreadsheets and postit notes, a different kind of security issue.
Another is that forcing someone to constantly defend and explain why something is the way it is, leads to that persona eventually implementing something that (even is worse), will attract fewer questions.
It seems reasonable to distinguish between identity and device. If I lose some device, I can publish its revocation.
Serious internet users will have dozens, if not hundreds, of accounts. How do we handle revocations and key rotation?
It can be extremely frustrating to do everything right and then have your knees cut off by some script reader in a cube farm somewhere.
Also, if you do email verification for accounts, whenever someone changes their email send one to the old account saying 'Hey, this is being changed, are you OK with it?" and if they say no, revert the email and reset the password on the spot.
Those are great against key-loggers, not so against people that have insider info.
When you allow any part of your password to be chosen by a human, i.e. yourself, you have to assume that the human-chosen part is known to an attacker. The solution is to generate passwords with enough random bits to satisfy current demands. And by generate I of course mean to allow a real number generator (either a computer, or dice, or anything really random; i.e. something a casino would accept) to choose the password for you. Without any restrictions except a desire to minimize length, you get the classic unmemorable 0vT2GVlncZ4pZ0Ps-style passwords. If you add the restriction “must be a sequence of english words”, you get xkcd-style “correct horse battery staple” passwords. Both are fine, since they contain enough randomness not generated by a human.
But if you yourself choose, either old-style “Tr0ub4dor&3” or passphrase “now is the time for all good men”-style, you have utterly lost, since nothing has been randomly chosen, and “What one man can invent, another can discover.”.
Note: this also applies if you run a password generator and choose a generated one that you like. Since you have introduced choice, you have tainted the process, and your password now follows an unknown number of intuitive rules (for instance, there was a story here on HN the other day about how people prefer the letters in their own name over other letters of the alphabet), and these rules can be exploited by an attacker.
or
b) use the "forgot my password" option every time
Screw Gizmodo.
But regarding the article itself, seems to be a nothing-burger. Once upon a time, we favored shorter complex passwords. Now, we favor longer intuitive passwords. The end.
EDIT: I see the link in OP is now a WSJ link. It was a Gizmodo link at first. Hence my comment.
http://www.dailymail.co.uk/sciencetech/article-4771194/The-m...
I now predict an uptick in people using 'correctbatteryhorsestaple' as their password...
At least that's slightly better than "correcthorsebatterystaple" which appeared in the XKCD. The really funny part is that I automatically noticed this when reading your comment because I have "correcthorsebatterystaple" so fully committed to memory that I noticed when you deviated.
For me it was the opposite. My brain automatically read it as "correcthorsebatterystaple" despite what was written, just as it would with a small typo in a word.
What goes to show something, because most people discussing passphrases do not care to point that it's about mental images, not text. It's either so obvious that it doesn't have to be said, or so non-obvious that nobody gets it, even after reading the XKCD.
It always is.