Didn't we have this discussion about password hashing already a few weeks ago?
If someone's snooping on your email, I think you've got bigger problems than a lost password, tbh.
As for hashing, again, if someone can get on the server and download the whole database, you've got bigger problems than password hashing.
I'm not saying this is a good practice, but I just don't think it's as big a problem as this guy is making it out.
Also, there's a balance between security and usability. For some kinds of users, not being able to tell them their password is actually a problem. Sites that are able to do that will have a competitive edge in getting those users. So the question is one of balance between usability and security, not just one of security.
I disagree that not being able to tell someone their password is a usability problem. Having a password reset system is just as usable and significantly more secure than having to store passwords in plain text.
And both of your arguments about having bigger problems are fundamentally flawed. Sure, if someone does get your db, you have a big problem, but that doesn't mean you shouldn't take precautions so that if it somehow happens they can't read it like a book. It's kind of like you're saying cars shouldn't have airbags because it's harder to honk the horn and if you do get in an accident, you've got bigger problems.
And someone snooping on your email is as easy as you accessing your webmail on an unencrypted wifi connection. Do you think everyone in the world makes sure they use the ssl version of their webmail in public? Because if not, sniffing packets is trivially easy.
My point is that the situations you mentioned only become bigger problems when you make no effort to protect these things.
I didn't realize until recently, but GMail now has an option to automatically use https. It is under https://mail.google.com/mail/#settings at the bottom, and is turned off by default.
True, two way hashing is better than nothing, but it's still less secure than one way hashing (with a per-user salt) for passwords. All you need if one rogue employee and they can decrypt everyone's password. It's just difficult to justify the added risk when there usually isn't a need to retrieve the original password.
Edit: by "two way hashing" I meant encryption, not hashing. not sure where my brain was on that one...
As a practitioner in this space, I'm going to tell you that I don't know what this "two-way hashing" is that you speak of. There's a right way to store passwords and there's a wrong way. The right way is bcrypt. The wrong way is anything other than bcrypt.
Are you making a distinction between storing for verification and storing for use? The right way to store passwords when you use them to verify authentication is to hash (twitter verifying a login). The right way to store passwords when you need to use them to gain access on behalf of a user is to encrypt them (any third party "twitter application"). I ask because the first google result for "bcrypt" is http://bcrypt.sourceforge.net/ which is distinctly not hashing, where as the second one is for a ruby library interface to bcrypt hashing.
Yes, I was able to determine that bcrypt is a one-way hash algorithm. But part of my point is that the name is ambiguous because there are multiple things using that name. Even the wikipedia entry for bcrypt is for the encryption software ( http://en.wikipedia.org/wiki/Bcrypt ), not the hashing algorithm, so I was having a hard time finding out more about the algorithm other than that there is a ruby binding for it. Thankfully, the ruby docs contain references.
Consider this codinghorror posting, http://www.codinghorror.com/blog/archives/000953.html , where Atwood confuses the reasons why third-party websites would need to obscure passwords in the first paragraph and quoted section (a third party needs the plaintext of the password in order to offer integration services (assuming things like remote keys and oauth are not provided), so storing a hash of the password is meaningless in that context).
And I only used twitter and twitter applications as an example of a ecosystem that has, up until their oauth deployment, multiple consumers of passwords for different purposes (twitter for authentication, apps for integration), as a way to point out the confusion.
If you lose your whole database to an attacker, you have a big problem.
If you lose your whole database to an attacker, and you stored recoverable passwords in it, everyone has a big problem.
There'd be something to debate here if fixing this problem wasn't 5-10 lines of code. But that's what it is. 5-10 lines of code to keep yourself from compromising tens of thousands of (email, password) pairs. There is no debate to have here.
I agree that storing passwords in plaintext is an anti pattern. But with a one-way-password-encryption setup you need a password resetting system, which is more than 5-10 lines of code.
I don't think hacking the evite account is the problem. With many people using the same password across multiple accounts, getting their evite password may also be giving the password to countless other systems. So they are essentially sacrificing the security of their users, not just their own application.
I agree that people do that, and that ideally a website would would not email someone their password for the simple reason that people do recycle passwords.
But, the onus here should really be on the user. If they are careless enough to use the same password for everything, they are indicating that they are willing to trade some security for convenience. In my opinion, emailing users their password is just another security/convenience trade-off. I'd be upset to get my password sent in plantext from my bank, but not an invite website.
You're absolutely correct, but in evite's case they are storing them permanently. That's actually the reason I posted this was that I forgot my password and requested a reset (~5 years after signup) and they sent it to me in plain text.
If someone's snooping on your email, I think you've got bigger problems than a lost password, tbh.
As for hashing, again, if someone can get on the server and download the whole database, you've got bigger problems than password hashing.
I'm not saying this is a good practice, but I just don't think it's as big a problem as this guy is making it out.
Also, there's a balance between security and usability. For some kinds of users, not being able to tell them their password is actually a problem. Sites that are able to do that will have a competitive edge in getting those users. So the question is one of balance between usability and security, not just one of security.