Limiting passwords to 12 characters is "secure enough"
forums.stardock.com
forums.stardock.com
Not to mention that a 30-char purely alphabetic passphrase such as xkcd.com/936 is so much easier to remember (i.e. less likely to be written on a post-it note) and type into today's mobile devices (i.e. more likely to log out properly, because it's easier to log in the next time) than a 12-char password with two numbers and one symbol in it. What I'm trying to say is that there is more to password strength than the time it takes for a botnet to brute-force it. Humans are the weakest link in most security systems. If you want strong security, you need to design your system so that humans can interact with it without too much mental strain.
Nowadays, anything less than [\x20-\xFE]{8,64} is just a lame excuse for storing passwords in a plain-text VARCHAR field without proper escaping. Therefore, if your password policy as any more restrictive than [\x20-\xFE]{8,64}, I'm going to assume that you store my passwords in a plain-text VARCHAR field without proper escaping.
The upper limit of 64 chars is just something that I copy-and-pasted from an actual web app that I wrote some time ago. It works in most cases, but if I were to write the same app now, I'd probably remove the upper limit or make it very large. (By the way, bcrypt only hashes the first 72 bytes of your password [1], so make sure to do something like bcrypt(sha256(password)) if you plan on using longer passwords.)
Alternative interpretation: the Website is neither UTF8-safe (or whatever charset you prefer) nor are prepared statements used. Otherwise VARCHAR is fine even without any escaping.
I just wanted to point out that it's possible to use VARCHAR even with weird characters.
http://vbuterin.blogspot.ca/2011/08/password-strength-rebutt...
I think some cryptographers and security people have given rebuttals as well but I can't find them at the moment.
Definitely true.
On the other hand, non-tech folks often don't even make an attempt to remember password an put them on sticky notes in front of the screen. (At it can still get worse...) I think for these people long alphanumeric passwords are the best.
But if a site rejects the password that my password manager generated (16 chars [a-zA-Z0-9]), then I have to work around it, make a password manually, and it's generally a pain in the ass that shouldn't be necessary. And since I'm doing it right and these sites doing it wrong, I'm not inclined to be forgiving.
A real random alpha-numeric password (what I get my password manager to generate, since I don't have to remember it) 12 characters long is more like 70 bits of entropy. You'd need 6 random words to match that. Essentially for every 2 random alphanumeric characters you need another random word.
http://arstechnica.com/security/2013/01/grammar-badness-make...
Legitimately randomly generated passwords still win, as long as the server uses a salt with bcrypt or iterated hashing like PBKDF1 or PBKDF2.
Most people cannot properly chose a pass phrase.
Use something like Diceware to generate a phrase.
I see where you are coming from, however this premise is fatally flawed.
If my password is stored in plain text then an attacker needs only to read just my password and they have access to my account.
If the site is susceptible to SQL injection attacks it is perfectly reasonable that they can extract my password without having access to any other part of the database or system.
No, that just means your password manager sucks and is out of touch with the real world. Any good password manager lets you quickly generate passwords of any length.
Banks are typically the worst. All sorts of gimmicky password requirements. 8-12 characters. Must have one capital letter. Must have one number. No special symbols.
So "I can't believe it's not butter!" won't work, yet that would probably be a pretty secure password, and be entirely rememberable. In fact I could come up with a silly pun-filled sentence for each site I visit and make passwords fun again.
https://eapis.cbp.dhs.gov/help.html#a7
Your password:
must start with a number and be between eight and twelve characters in length, and
must contain at least one of the following special characters:
Cannot include your Sender ID, and
Cannot repeat any character consecutively more than two times.It's funny that the descriptions of password requirements would make much stronger passwords than any password a reasonable person would ever use.
That said, I don't think Stardock gets a free pass just because a lot of banks suck at it.
Look, I get that there are other safety factors (I pray) in place to prevent someone from hacking my account (most commonly in the form of login-attempt limits), but that's absolutely no reason to stop me from making my password longer and more complex. If I want my door to have a deadbolt _and_ a chain lock I expect a damn good explanation if someone tells me I can't.
"12 characters is already hard enough to remember."
Sigh.
L0rd_ofthe$Ring5Forget your password? Once you reset via email, as soon as you get access to that encrypted file, get a new random password and reset it again. Save the new password in the encrypted file.
Password managers often connect to the internet to retrieve your passwords so if you lose your access, you're SOL. I also wouldn't trust a browser plugin as that may be prone to compromise. Backup to your laptop or something if you need to take it with you, but keep it encrypted until needed.
Forget the password to the encrypted text file? Throw your life away and start a new identity.
Edit: Pointed out below (and I agree whole-heartedly) use /dev/u(a)random
And idupree's points are spot on.
Singularity Amnesia?
I suggest /dev/random or /dev/urandom, as it doesn't involve a third-party. You can xor with data from random.org, if that makes you feel better.
> Forget the password to the encrypted text file? Throw your life away and start a new identity.
Just print out the plaintext of your password text file, and store the piece of paper somewhere reasonably secure. I say `reasonably' because if someone were to gain physical access to your computer, they could install a keyboard logger anyway.
Considering my aversion to using a stranger's computer to login to my accounts and the fact that I never use an open WiFi connection for anything without Tor, I'm much happier using a local copy of the encrypted file or at the very least a secure offline mirror(s) to download a copy of the encrypted file if I don't have it handy.
I've said it before: entropy estimates are a fiction. Ideally, /dev/random and /dev/urandom would both offer non-blocking access to an underlying Fortuna implementation (using a cryptographic hash function instead of a cipher, to avoid export/import restrictions).
Even though you generated a bunch (up to 100), what is to stop random.org from storing every one of those? Much better to just use pwgen or similar.
1Password allows you to sync the encrypted file via dropbox, so if you lose your access you'll still have the encrypted file, you just won't have any updates. And if you can't trust the browser plugin, you can't trust your browser either and no password scheme will help.
| And if you can't trust the browser plugin, you
| can't trust your browser either
Depends. Adding plugins extends the attack surface area. Also, the plugin author(s) may not be as diligent at stamping out bugs/security holes as the browser developer(s).Use /dev/urandom, not a website. Make sure you have configured your text editor not to automatically save any backup files, cut buffers, or the like, and never write it to disk in unencrypted form. (I use vim >= 7.3 and its blowfish encryption; see encryptedvimrc and random_alnum in my scripts https://github.com/idupree/scripts ) If you copy/paste passwords, make sure you don't have a clipboard manager that persists recent history to disk. Also, encrypt your filesystem in case you screw up on any of the above. If you have swap, make sure that's encrypted with a generated-per-boot-from-urandom key generated after loading last boot's stored entropy from the disk. (A dedicated password-managing program might do some of these things for you. I haven't looked into their security methods yet; have you?)
If you can, use an email provider for your acct-registrations that uses decent security practices; use a high-entropy password for it; use different email addresses for every site, to make it harder for social engineering attacks (someone calling, say, Amazon or Apple's call center pretending to be you). The latter is probably hard unless you use your own domain or think '+' addresses are sufficient. If you use your own domain, you're vulnerable to your registrar or your account with them or your DNS being compromised, but you should have rigorous passwords and good registrars here because losing your domain name stinks. If malware gets on your computer, it can watch you and steal your passwords, so keep your system and browser up-to-date with security updates, disable riskier parts of your system that you can live without, prefer OSes/systems that are more on top of their security, and don't make enemies.
I don't understand why password managers like OnePass store passwords online; everything else they're doing as browser plugins is fighting the good fight. (True, there are risks of giving the browser the ability to access your passwords at all; but they're probably less than the risks of password reuse and low password entropy, and greater convenience means more people will use the system for more sites. Firefox Sync is the only consumer-friendly online storage that I've seen and consider well-engineered-&-documented enough to consider trusting. Tarsnap and Tahoe-LAFS also meet everything but the "consumer-friendly" bit there, and have a somewhat different focus. It may be worth considering encrypted online mirrors legitimate (online mirrors, not sole copies) for the sake of people who don't do backups, have multiple devices, and/or have their disk fail or device stolen.).
Startup idea: the email equivalent of 1Password.
You give each site a completely unique, distinct yet valid email address. They forward to your real email address and vice versa.
This way if one email is compromised you know where the spam is coming from plus it reduces email tracking and correlation.
Here's the version I updated to Python 3 a year or three ago: http://pastebin.com/RusCWm5Q
Usage: create_pass [<username>] <email_address> <site_name>
Example: create_pass kmag kmag@example.com news.ycombinator.com
gpg -d ~/Crypto/Passwords/news.ycombinator.com.gpg
Edit: part of me hopes that someone is still grinding away at my 80-bit stolen Linkedin password hash. I of course generated a new 80-bit password.Unfortunately, it's missing some of the newer (and frankly, ignorant and cavalier) replies from their tech support guy.
I currently manage a web service that has about 1,000 registered users. I have taken the most restrictive path to storing password in database except I need to make sure user/password database is portable from one host to another. Reading the comments, I am getting the impression that such portability may not be a good thing. But then how can I migrate from one host to another or restore backups?
Are there documented good practices for storing passwords in database that also allow portability.
- never store plain text password - never store direct hash of password - use a salt (must be stored) and hash password and salt
Ideally salt and hash of password/salt are in different databases.
Avoiding MD5 is recommended, but if you are at the point of worrying about that, you have bigger issues.
The salt is just there to stop rainbow tables being generated, and if you're really evil to add computational overhead, it isn't meant to be used in a game of hide and seek.
I'm not sure what portability issue you're referring to.
OWASP has a draft on password storage https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet and also one on password complexity https://www.owasp.org/index.php/Password_length_%26_complexi... .
They have plenty more, like guides on common security vulnerabilities, etc.
For the longest time I was wondering why my bank would ONLY allow a 5 digit password, alphanumerical only and it MUST contain at least one letter as well as one number, while they let you choose your own username completely free of any restrictions, including special characters. After thinking about it for quite some time, I remembered all these sites where your password had to be as least 6 characters (now 8 seems to be a general minimum).
By forcing users to use EXACTLY 5 characters at least you cannot use the SAME password your already using for your mail and whatnot, except for the fact that there is nothing preventing your from simply dropping the last character (but you sure would NEVER do that, would you ;-), assuming of course you already have letters as well as numbers within the first 5 characters.
While 5 characters seems extremely weak, If you get it wrong 3 times, your account is locked. Locked as in "you have to call them and identify yourself with A LOT OF DETAILS about your account and transactions" to unlock it and reset your password.
I have no idea how they store passwords and it doesn't really matter to me, while it probably should. They are a BANK and if they get hacked and their customer password database gets compromised, I am sure they will have worse problems to take care of.
What I would really like to see is their evaluation of security versus added support work for locked accounts.
The result is that a customer of their service is annoyed. I think a login/signup procedure that makes people happy instead of annoy them should be worth a lot to any brand.
80% of the customers getting locked out of their bank accounts at 5 PM on a Friday only happens once before the bank changes policies to something that allows the attackers to perform a rate-limited attack on the 5-character passwords. The new lockout policy goes into effect before the bank can force everyone to upgrade their passwords.
GAME OVER
But of course we should be using pass-sentences by now.
Please read the article before commenting. The OP's concern is that all of the passwords are sitting in plaintext in a questionably-secure database somewhere.
http://www.youtube.com/watch?v=KRVRlhrLKkI [video, 22 min] http://web.cheswick.com/ches/talks/rethink.pdf [slides]
If you are logging failed password attempts anywhere, then you've got a security hole.
Here's the details on the breach I'm talking about http://ieeelog.com/
https://twitter.com/humbit/status/297417037989429248/photo/1
Unfortunately, it's missing some of the newer (and frankly, ignorant and cavalier) replies from the tech support guy.
Of course, there's no good reason to limit passwords to any length.
The source provides a hint:
/* Schneier specifies a maximum key length of 56 bytes.
* This ensures that every key bit affects every cipher
* bit. However, the subkeys can hold up to 72 bytes.
* Warning: For normal blowfish encryption only 56 bytes
* of the key affect all cipherbits.
*/
[1] http://bcrypt.sourceforge.net/[2] http://security.stackexchange.com/questions/21524/bcrypts-72...
Not that lolcats are bad. They are good. It's just they aren't fun anymore once your identity is stolen. Or your mom's.
I'm sure they could use your support :-)
We'll get you a seared flesh barcode, for your birthday, on your forehead. Hands-free Facebook logins for life! Are you excited?