Simple solution to the password reuse problem
grisha.org
grisha.org
Imagine one of your hashes leaks. A cracker can notice your password was a hash of something and just run their normal attacks on it for leaked password + salt hashes. They don't know the salt exactly, but it will likely be part of the leaking site's url.
Now the cracker can generate your password for any account you have. Great.
Please use Keepass or another password safe to generate pseudo-random hashes. These were designed by experts.
Sure, they could assume every random-looking cracked password is a hash and try to crack each one, and conceivably discover your master password that way, but depending on your master password's entropy, that can be as unlikely as you need it to be. And the whole point of something like this is that you can use all your memory remembering an extremely high-entropy master password, rather than a large number of medium-entropy single-use passwords.
I'm also completely ignoring what would happen if that site were compromised. A little javascript snippet could just forward all passwords to the hacker's server. Even a browser extension could be compromised if it auto-updates. These are implementation details though that could be fixed/worked around.
Aside from the implementation details that you've raised, I'm not finding as many flaws as I expected in it.
I mean, using a password safe is no more inconvenient than having to go to a website. When set up, the safe can even be a one click auto-fill deal. I don't see any reason to take the added risk.
> I do something similar via a shell
> echo "masterpassword gmail" | md5
Please do not do this, md5 is not a cryptographic hash and is relatively trivial to reverse. Ie; is possible for someone to discover your 'masterpassword' given any one of your passwords generated via this method.
If one of your passwords is leaked then it is possible for an attacker to brute-force this to find out a list of possible 'masterpassword foo' combinations (although not knowing the length increases the search space).
If one of those foos is 'gmail' for your gmail password then it is game over.
Even if your foo is not similar to the service, if the attacker is able to get 2 of your passwords then the search-space is much smaller (looking only at the overlap of the reverse of both md5 functions).
This may not be relevant if you only take a 'random' sub-sequence from the generated md5, thus only disclosing part of the hash to the attacker.
This is still better than password reuse as the plaintext doesn't disclose your other identified without further effort, however the users should be under no illusion of bullet-proof security.
For a given length it is possible to find all the inputs that could generate a possible hash relatively easy (cheap compared to other one-way-hashes).
Either way, it is an interesting thing.
And just to play devil's advocate, there is the possibility that someone hosting this code theoretically could add an event handler to surreptitiously send them the content of the text fields by ajax, so there is the issue of implicitly trusting the host even if the passwords aren't stored anywhere.
Of course, you'll still need to trust that the machine you are using isn't logging your keystrokes. You face that problem in any case, but it's worse if all your passwords are exposed instead of only one or two.
You probably should have two or three pass-phrases. E.g, one for banking and brokerage, one for other business use, and a third for fora, social networking, etc.
Edit: A recent Ars Technica article[1] suggests an 11-character minimum. Ending with 0 or ! like this doesn't really add a whole character to the search space.
[1] http://arstechnica.com/security/2013/05/how-crackers-make-mi...
I can instantly generate passwords of arbitrary length and complexity and I do so for each new account I create.
Because realistically, I'm still going to copy and paste the end result.
Sure, it sends data over the internet, but data is 256-bit AES encrypted on your local machine, and then is sent via SSL on top of that. So even if someone could get a hold of the data you're sending, they couldn't do anything with it.
I finally started using LP a few months back after having it on my to-do list for a year, and I only wish I'd made the leap sooner.
In the end, it was fun to build and a cool proof of concept, but the problem it solves is solved more robustly and just as securely by existing solutions.
[1] http://mawud.com
"pretty long passphrase I use for everything" + "bank" | bcrypt | only numbers | length 4
There are (Cross) Browser Extensions running the algo on your computer so can log in directly with your passphrase. You can have the JS code offline or in a Dropbox. There are apps using the algorithm on iPhone and Android. No need to rely on a single website. No need to type/copy'n'paste cryptic passwords. No need to rely on the Browser's password storage. So much better.
(The "new" version is a few in-browser algorithms instead of my original PHP backend) It's a pretty decent scheme, I think, for most people who are unlikely to be the specific, individual target of some crafty password thief. The technical details of my implementation are described on the about page:
The disadvantage of this approach is that your more restricted on where you can login to services (since you'll need your password manager there, and a trusted computer to run it on).
Condolences to your server though...