There's a diary on the rec list now, providing advice on how to construct good passwords. While well intentioned and theoretically sound, I have to disagree with the most basic foundation of the approach taken here. Similarly, I think the ever popular XKCD comic about passwords is horrifically misleading.
Allow me to tell you why, quickly and succinctly.
Yahoo hack steals 400,000 passwords. Is yours on the list?
6.5 Million Encrypted LinkedIn Passwords Leaked Online [REPORT]
EHarmony Passwords Stolen By LinkedIn Hackers
The aforementioned diary contains one key piece of advice, though.
Never use the same password twice, always have different passwords for different websites/computers.And it's that line I'm going to talk about beyond the squiggly, because in my opinion it's the ONLY advice relevant to computer security for the every-man. And it turns out that once you solve this problem properly, the issue of choosing good passwords becomes largely irrelevant.
Let's back up and talk quickly about how passwords work. A server for some website has a database which stores your user credentials, including "something" that can be used to check that you entered the correct password. IT professionals will start talking about hashes and brute force attacks and all kinds of other scary technical terms. They'll tell you that some password will take two million years to crack. The truth is, that's not how it works and hasn't been for many years. That's because the "something" used to validate your password can vary widely. Maybe they do a sophisticated encryption with salted hashes run through a GPU-resistant multi-iteration bcrypt. Or maybe they just save your password verbatim without doing anything at all. I've seen both, on major sites who advertise their security. And guess what? You have no way of knowing who's doing what.
You'd expect a company like LinkedIn to be fairly savvy when it comes to security, but that was clearly not the case. I'm referring not to the security breach, but the files that were leaked as a result. The passwords weren't stored in open text, but the format wasn't far off. (Simple unsalted SHA-1 hash.) Modern password decryption tools are much, much more powerful than most public descriptions would have you believe. In short, you must assume that by providing a password for any website, that password has immediately been compromised. The more sites get the same password, the more likely that password is to be exposed and all of the shared sites attacked. And this is a risk no matter how cryptic your passwords are.
How many passwords do you have? Most people can't keep track of more than half a dozen or so, maybe with some variations. Password decrypters can generate variations faster than you can think of them, so those variations aren't getting you as much mileage as you think. Now -- how many account logins do you have? Do you even know? I have a database of mine, and the number is north of 130 distinct sites with usernames and passwords. I can't keep 130 discrete non-variation passwords in my head, and I suspect most of you will confess that your passwords are shared widely. Except for a few savants, you cannot variation yourself out of the problems.
You really think password cracking software is not smart enough to try replacing 'a' with "@" or 'l' with "1"? Really? Take this paragraph from the original diary:
Remember, the best pass phrases make no sense and are easy to remember. "[ 0bfuscating 0ffisaur ]" sounds like Obfuscating Officer, and is easy to remember. It's also excessively hard to crack. Hell, "Obfuscating Officer" by itself is a pretty secure passphrase.You're in for a nasty shock if you think any of those are secure passwords. Dictionary words with O->0 substitution? That will be cracked in minutes. The brackets might give you a fighting chance...for a while. On the LinkedIn database, I can test 2.3 billion passwords per second at home. I can recruit Amazon servers to run it a hundred times faster, at trivial expense. One hour of that comes to 828 trillion passwords tested.
Hopefully I've made my point. Practical password security has nothing to do with choosing smart passwords. That doesn't mean "Password1" is a safe password. It means we have to overhaul our approach completely. We need:
* A completely different password for every website.
* A reliable mechanism for creating safe passwords.
* A safe approach to storage and retrieval of passwords.
In short, we need software. Luckily, there are many great options. Here are the ones I'm aware of:
LassPass (my choice, cloud service)
KeePass (open source)
1Password (favored by a security professional friend of mine)
PasswordSafe (by security professional Bruce Schneier)
All of these applications do essentially the same thing: they remember your passwords in a safe, secure way. (Browsers can remember passwords, but they aren't secure. Don't use this feature.) They include browser plugins to automatically fill logins, generate new logins, etc. And they make it possible to safely share your passwords across computers. All you have to do is encrypt the data with a single good password, and let the manager generate ultra-long unique gibberish for every website you want. Mine just spit out "9#S!P3FW@b4X^5Bw6CF!$zu@qq&A&v". A real challenge to decode at that length, with all kinds of special symbols and no dictionary words or suffixes. And even if it is decoded, I can change the password any time with minimal effort -- and no human memory required.
I changed my Yahoo password yesterday. I have no idea what it was before, and I have no idea what it is now. But Yahoo's passwords were stolen, so I changed it. It took about a minute to do. I can access the password and Yahoo's site any time I want. Simple, direct, no wacky schemes and pass phrases and randomly placed brackets. No passwords written down anywhere to be found. And because it's mindless, I can do it consistently for every single site without fail.
Of course there is one caveat left: my LastPass login password is now one monstrous gaping hole. If someone steals that password, everything goes very badly wrong. This is a calculated risk; I am assuming that LastPass is able to keep my data adequately safe as a dedicated security company. My vulnerability is only one site wide, though, and my account is shielded by two factor authentication as an added step. It's a risk I chose to take on because of the convenience of a cloud service; KeePass requires no such faith or calculated risks, just a good backup service for the file.
For that one file or service, feel free to use something like "[ 0bfuscating 0ffisaur ]". It's a good idea there. Just don't think you can compete with dedicated hackers by tacking 1776 onto the end of your passwords here and there.