Can you trust Paul Graham with your password?
jgc.org
jgc.org
Throw-away password: "ex@mpl3"
Email password: "ex@mpl3p@55"
Finance password: "ex@mpl3p@55w0rd!"
That tool backs up its (encrypted) password db to my Dropbox folder. It also backs up to an iPhone app. So I think the chances of losing all my passwords are pretty slim. And, now, I don't care whether one site loses my password, since all my passwords are unique.
Also, my dropbox is set up on my mac mini too.
In order to lose my passwords, I need to lose, at the same time:
1) my mac mini
2) my macbook pro
3) my iphone
Even then I would be able to recover things somehow, because my email goes through a third-party gateway, and I know the guy who runs it, so if I really do lose everything, I can contact him and ask him to reset my password on that gateway, and then log in to my email via that gateway.
I think the chances of losing my passwords are fairly slim.
For important passwords that I might forget, I apply another easily rememberable transformation, and write them down.
On a more serious note, only one of the two websites compared in these articles is a multi-million dollar business. Also, I'd say HN users are far more likely to use throw away passwords. The "enterprise" clients of 37signals probably subscribe to the philosophy in my satire above.
One final note. I don't think you can log into this site over SSL, so a discussion about password security for HN accounts is just silly. What's the point in worrying about how secure the vault is if the front door is unlocked.
This is the key. You're an idiot if your Hacker News password is the same as that of your email.
Hmm. No, I don't. I only 'cry about it' (in your words) if the passwords are not adequately secured.
They rely on the Scheme random number generator which is seeded using the milliseconds of Unix epoch. Since PG regularly restarts the server it should be possible to get a window of time in which to test a succession of random number seeds. If you could hang around until the server was dead (say test every few seconds), then login and obtain a cookie you'd have enough to do a prediction of the server seed. You could then run the random number generator forward predicting cookie values and then run them by the server to see which ones are valid.
As people log in you'd be able to impersonate them. Assuming that an admin logged in while you were testing you'd be able to impersonate an administrator and have some fun on the site.
use Authen::Passphrase;
my $pw = Authen::Passphrase::SaltedDigest->new(
algorithm => "SHA-1",
passphrase => "passphrase",
);
If I instead wanted to be secure, and use bcrypt (which I always do, even for the most trivial sites), I would just write: my $pw = Authen::Passphrase::BlowfishCrypt->new(
cost => 8,
salt_random => 1,
passphrase => "passphrase",
);
Notice how I get better security without any extra effort? That is the joy of not being the only user of your programming language, and that's how you ensure that people do the Right Thing with your data -- make it easy for them.(I'll also mention that it gets better; with Moose type coercions, I can basically treat the password as cleartext -- the type coercion converts a Str into a Passphrase. To set it, I supply the cleartext password as an initarg when instantiating a user; when changing it, the writer accessor handles the coerciion; when checking it, I delegate to the passphrase's check_passphrase method. A great API with great security, involving almost no effort on my part. <3.)
Notice how I get better security without any extra effort? That is the joy of using an operating system.
Under Linux, fork() is implemented using copy-on-write pages, so the only penalty that it incurs is the time and memory required to duplicate the parent's page tables, and to create a unique task structure for the child.
(from fork(1) man pages)
Performance penalty is fairly significant ( unless it's done up front, i.e. to setup a pool of processes, like Apache's prefork mpm ). So doing a fork() per each request is actually a really bad idea (as is creating a new thread, but that's a whole other rant I have reserved) -- I'd say it's an anti-pattern (in Java world it's the "one thread per connection" Enterprise(TM)(R) idiocy lot of servlet containers do/users to do disregarding ThreadPools and NIO).
Memory penalty really depends on your language and its VM (and it's assuming no memory leaks). I haven't looked at arc + mzscheme, but it's actually a big issue for me at work with Perl right now at my present work (too much functionality was implement as cronjobs invoking Perl scripts which do system() after system() -- vs. doing it as daemons doing xs calls into C libraries).
I'll grant mzscheme and arc are likely lighter weight than Perl and its JIT, but unless you're doing pure C it's only a matter of degree.
Of course, everything is compromise between performance, ease of use, features etc. I'm not arguing with this.
As was mentioned last time if someone is downloading your passwords you have bigger problems to worry about than the way you store your passwords.
Pity no one has pointed out that HN logins are not encrypted.
[Welcome to reddit puns]
Yet, here we have a recent, real example of a moderator account on a popular site cracked because a different site wasn't salting:
EDIT: I guess the biggest reason would be that you likely haven't discovered the awesomeness that is 1Password yet. http://agilewebsolutions.com/products/1Password . There are probably free alternatives. (EDIT Again: Mac only. There are Windows alternatives too :) )
1. The password generator is a little difficult to get at, but can be accessed in the Keychain Access application.
2. I don't think it works across multiple browsers. This seems to be the main advantage of 1Passwd.
3. Syncs with MobileMe, or you can just backup your keychains.
4. Safari can autofill nearly any form.
5. Multiple logins are stored. If you start typing the first few letters of the username it will autofill the correct data.
A standard, or even a rationally conservative, approach seems more fit for Innocuous News.
"Real Security" would require personal acquaintance with an operator or someone they have trusted. To go down that trust chain, they would sign your GPG key. After that, posting by signing would be only done. And as per due course, you would be expected to have a HN_only GPG key for 'security reasons'.
But security for securitys sake is just wasting resources when it's just a news site, unless you're a crypto-fiend.
For a news site accounts are used for identification and not for protection of goods or information so it doesn't matter that much anyway. If the admin of the site finds out that the system is compromised, it's pretty easy to just reset all passwords.
I expect it involves checking users' passwords two different ways (with salt, without) for the foreseeable future.
i.e. basically none.
I suggest that the pawn shop I've just described employs someone with considerably more advanced cracking skills: they receive several stolen phones and computers a day and have a tidy business on the side selling data and stolen passwords to identity thieves.
I made this scenario up to illustrate that if there is valuable data that can be cracked open, the "market" will organize itself in such a way to get ahold of it.
and you could update the database for that easily.
My point was that if you already have a lot hashed passwords then you need a way to transition to salted ones and this was a method to do that.
I salt MY hashes.
Complex Answer: It depends. If it's compromised, what do I lose? If the answer is an email account, then it's an 'Aww shucks'. That's why I have backups of my address books.
However, if it's "Bank Account Numbers", it's a bit more critical. I do shield myself from that eventuality by using 'more public accounts' with limited funds. PayPal has its own bank, and a whole 5$ more than my balance needs for them. I simply and deliver the money I want them to have.
And sometimes, I could care less if somebody "hacked my account". I'm thinking about news sites and other sites that demand logins to read or post or download files (phpbb).
Think password resets for pretty much every other account of yours. Whether that is HN, Your Registrar, amazon or your bank. I never used to care about my web based email account - but now it's a big deal.
(Or even some lisp hackers to beat pg with their own patch!)
Three main issues: 1) improper use of hashing. No salt used. 2) sha1 is not the best hash to be using. 3) passwords are not encrypted in the browser. So are sent clear text.
Fixes for issues one and two, are covered in the article...
For issue 3), you can do the hash+salt client side (with js) if SSL isn't feasible.
cu.
What you didn't say but might have implied is: If you have the server challenge the client with a different salt each time it would fix the problem.
Of course SSL also tells you the you are talking to the real server, challenge response doesn't really help that, nor does it stop some stealing your session id and posting as you.