The Dirty Truth About Web Passwords
codinghorror.com
codinghorror.com
This analysis is roughly 165 degrees misguided. Yes, the archaic password hash Gawker used prevented Gawker users from taking advantage of long passphrases on Gawker properties. But Gawker's properties were completely compromised anyways, so even an uncrackable passphrase wouldn't have helped you.
Meanwhile, that same archaic hash mitigated the compromise of all their password hashes, such that if you actually used a passphrase, it can't definitively be cracked from those hashes (there are obviously infinitely many passphrases that could hash to a given crypt(3) hash, only one of which would be your phrase).
Even if they were to use multiple blocks, I think most simple ways of doing that would only add linear difficulty to cracking rather than exponential.
People are very confused by this whole "Gawker is using DES" narrative. But Gawker isn't "using DES"; they're using DES crypt(3), which is a construction derived from DES internals. That's not at all the same thing.
In this specific case, because DES crypt(3) is in fact a crappy hash, passphrases are irrelevant; crypt(3) truncates them to fit a DES key. The rest of the data for your passphrase is never even hitting the hash, so a stolen hash can't possibly disclose the whole passphrase.
What? No... Gawker stored hashes.
EDIT
It really galls me that Jeff can make an entire post around such an easily verified and debunked lie. Was he too lazy to check? Does he know what DES3 crypt is/does? Or did he think it would simply look good as the first of his three points in order to make a sensational story?
Gawker really doesn't deserve the trash talk they're getting, their db architecture was far more sound than a lot of others out there... and, as Thomas points out, their use of "archaic" hashing techniques is in some ways a blessing. Their db designers definitely get a "PASS" even if they didn't use something like bcrypt which would have given them an A++ on this assignment.
Let me see if I understand this logic correctly: password reuse is a critical internet problem because it puts all of your sensitive stuff into one key, your re-used password.
And the way to address this problem is to put all of your sensitive stuff into one third party whom we trust more, for purposes of our conversation we can just call them "the monopolist".
I don't think so. How about a distributed password system where I personally own the code and it kicks off a unique key for me for every web site I sign up to? After all, I've gotten pretty good about carrying around important things in my life. I use something called a wallet. The concept has been working fine for thousands of years. Whereas the idea of having somebody else keep secrets for folks really doesn't have that great of a sterling track record, as the Gawker situation shows.
This was a great article in that it's starting to show people how screwed up things are. But the conclusions (to me) seem all out of whack.
Isn't that the way it's already supposed to work? The sites only store the salted hash (unique key)
What I meant was that I own the process for making my own key, including salting, hashing, random-number generation, or any damn other thing I choose. Instead of me just having to c come up with semi-plaintext passwords or passphrases that I can remember, I can just carry around something that can provide me all the keys I could ever want. Perhaps I could keep a backup of this device somewhere in the cloud. Perhaps not.
But with a true distributed, non-predictable password generating system, there is no one crack that can effectively get to all the plaintext passwords. Big benefit there, and keeping something like a dongle in my wallet matches very well with the usual way things of value are already being kept. I'm perfectly happy with taking responsibility for salting, obscuring, and otherwise encrypting my passwords for various sites. In fact, I'd rather do it than have the site owner do it (or not).
The site owner can continue using the password as a check for access, it works the same as before, he's just not responsible for taking something easy for me to do (like remembering some kind of passphrase) and storing that somewhere. Or, in other words, instead of traditional mostly-English passwords each of us will just have our own system of generating rather large impenetrable blobs, which will then be used for authentication. If you crack Gawker the only thing you get of mine is some huge random pile of bytes which I only use for Gawker, not potentially the keys to every other site I use on the internet. I will personally assume responsibility for distributing passwords to tens of thousands of internet sites. This is simple crypto. I do not need to put all of my eggs into one basket, no matter how large, secure, warm, and fuzzy that basket is.
You're missing the point. Giving out your password to a number of sites is as secure as the least secure of those sites. Giving it to a single third party still poses its problems, but is a much safer bet statistically.
You can designate any OpenID provider, including yourself. In such case DNS and optionally Certificate Authorities are only 3rd parties that have to be trusted (and if you can't trust these, you shouldn't be using the Web).
Would I even trust Google to handle Authentication? Maybe, but remind me again how I contact Google Tech Support when my authentication mysteriously stops working?
On the other hand, I had left comments on Gizmodo using Facebook Connect, so from a user perspective it worked out well for me.
Government bailout. Too big to fail.
A great reason to use a password manager, like LastPass. I started using it ~1 year ago, and now each of my web logins has a different password. It's just one key combo to generate a new random password and insert it into the password field when signing up at a new site.
Advantages? I guess I should try out LastPass. Free or $1/month premium is a good price.
LastPass fit all these, but it might not fit your usage requirements. However, I would urge you to investigate it and all other options (KeePass seems popular, as are some other Firefox extensions) if you don't currently have a good password solution, as any of these is better than using the same password multiple places.
PassPack doesn't have this issue. Even they can't read your passwords.
- I have a text file encrypted with GPG that contains my list of passwords.
- I open it in Emacs like any normal file.
- GPG is integrated to Gnome so I get a nice askpass dialog even from inside Emacs.
- I've configured Gnome to store the decrypted key for a few hours (or until suspend) and ask me anytime the cached passphrase will be reused, to avoid typing my long passphrase everytime I need to look up a password.
- Emacs also knows how to encrypt the file transparently when I've made changes and just save the buffer in Emacs.
- My swap partition is encrypted via TrueCrypt and so is my /home.
Currently I'm using it on chrome, safari and iOS 4.2 using dropbox sync.
It works like a charme!
I had a weak password like 99beers that I've used for many years for the 90% of sites that don't matter. I started to transition to something like adding the first letter of the site name plus one to the beginning, so ycombinator.com would be z99beers. Still not strong, but I thought it reduced the risk if one site was compromised.
But since this compromise has been so large and well-publicized, I've gotten locked out of several sites that do matter, apparently just based on being in the Gawker dump. Since my email has never been compromised, this isn't a big deal, but it's a hassle.
Now I'm making a serious effort to apply LastPass and random passwords to everything.
echo "strong_pass:sitename:strong_pass" | sha1sum
Note: if you are using mac os x use "shasum" instead of "sha1sum".Make sure to don't expose your secure password of course. It's also a good idea to use a completely different strong password just for email.
p.s. it's worth to note that since there are tons fo SHA implementations for Javascript it's possible to build all this as a web application where all the business happens in the client.
The web app will just allow you to add a number of site names so that you don't have to type the site name by hand all the times.
Btw the world would be a better place with all the auth cookies set to expire on 2036...
That said, I've been using SGP/SCP for all my passwords for about a year now, and I have only come across a single site that wouldn't work with the default, 10 character password scheme: ConsumerReports.com
All in all, I would definitely recommend this to everyone because it means you don't have to keep track of an encrypted password database or have any software installed on computers you use. If your computer crashes and you lose all your data, you just put SGP back on your bookmarks bar and carry on with life...
cat /dev/urandom | openssl base64 | head -c 12; echo;
Which can give you a nice random string. openssl rand -hex 6
will give you 6 random bytes hex-encoded. Your specific command line can be done with: openssl rand -base64 9 | cut -c-12
Note, I think you wanted -c-12, not -c12.A basic property of a password manager system should be that the loss of any password doesn't give attackers any information about other passwords; yours potentially concedes the "master secret" that animates all of them.
Gretchen: That is so fetch!
Regina: Gretchen, stop trying to make fetch happen! It's not going to happen!
http://www.quora.com/What-s-wrong-with-OpenID
"The short answer is that OpenID is the worst possible 'solution' I have ever seen in my entire life to a problem that most people don't really have. That's what's 'wrong' with it."
You're right, most people don't have a problem with passwords. They use "password" everywhere and it's never a problem!
Uh, no? They did save the hashed+salted version. The only problem is that they used crypt, from 20 years ago, instead of something like bcrypt.
I would assume they had more, faster computers. And the passwords they broke were only the simple ones -- I would assume your password is not password1.
Rainbow tables? No. That's the purpose of a salt. The table needs to be several orders of magnitude bigger.
Rock Solid Security + Developer Friendly API = Win?
There are probably adoption issues and centralized authority fear. It seems though that other things have consolidated nicely (a ton of comments use Disqus now), maybe its time for someone to create a startup that solves this very real problem.
If you have to develop a secure solution you make some research and choose what you think is a good solution (and if it is something outside your field you study/ask).
In 2001 I've to implement a secure solution for a mobile platform, I choose Rijndael (them picked by NIST for AES). My previous knowledge of encryption algorithm was near zero.
And then if you make the wrong decision, on something important as security for a public website, over the years you iterate (come on, till 2003 nobody internally thought it was a must to fix this mess?).
If everyone did this we wouldn't have these discussions so often. The problem is that people think they know about crypto, and think they know what they're doing, and probably won't believe otherwise until they get smashed wide open like this. This applies to almost all areas of knowledge, it's just particularly damaging in crypto as it's arcane and very sensitive to changes, often in very subtle ways.
So when it comes to implementing a password storage system I read up a bit, get confused, ask a couple of people and get different answers back.
It's the "get confused" bit that's dangerous. As you say, the differences are quite subtle and (for me at least) when they are being explained make perfect sense, but ten minutes later have become an uncrackable cipher all of their own.
At the moment I use Authlogic in Rails, which uses SHA512 by default (SHA512 is built into the Ruby core libs).
But I also notice that it's quite easy to switch to bcrypt (using the bcrypt gem).
Is it worth switching? Or at least using that as my default on new apps?
Bcrypt is slower than SHA512, in fact it can be made to be very slow. This is actually ideal for password hashes, it doesn't matter if it takes your server 50 milliseconds to calculate a password hash but that would severely slow down an attack.
It is important however that they are being used correctly. Either would be a good solution if properly salted.
At the time they implemented this (~5 years ago) most PHP tutorials just pointed to either crypt or md5. The other cyphers and functions were either added later, were not in stable PHP branches at the time, and/or most common tutorials had not picked up on them.
It is also a pain to port your password storage method
PSA: PwdHash FTW. It solves exactly this problem.
Firefox: https://www.pwdhash.com/ Chrome: https://chrome.google.com/extensions/search?itemlang=&hl... iPhone has several apps that do this (I use Keygrinder).