TIME FOR A PROPER DISCUSSION ON PASSWORD COMPLEXITY
I'd like to put some real numbers to these figures across the board because I'm feeling particularly autistic right now. tried admirably but he used the very wrong assumption of 1Mhash/s for a decent GPU; that's absurdly conservative. Bitcoin miners are rated in Mhash/s but bitcoin uses double SHA-256 (i.e. they SHA-256 the input, then SHA-256 it again). We're only talking about doing that once, so the throughput for our purposes would be double the bitcoin miner Mhash/s rating.
Single GTX 1080 = 1,044.81 MHash/s = 2,089,000,000 SHA-256 hashes per second (per gpuboss.com/graphics-card/GeForce-GTX-1080), power usage at full tilt is about 300W
Fastest bitcoin ASIC miner I could easily find (AntMiner S9, not yet released apparently) = 14,000,000 MHash/s = 28,000,000,000,000 SHA-256 hashes per second (per en.bitcoin.it/wiki/Mining_hardware_comparison), power usage at full tilt is apparently 1,375W
>8 character password, only lowercase
>8 characters with lower and uppercase, numbers, and 32 common QWERTY symbols
>20 characters only lowercase
Mentioning dictionary attacks is a non-sequitur for a couple reasons. If your password is a single dictionary word you're fucking retarded. You only have to check the entire dictionary once in this case which is trivial even for gigantic dictionaries. However, there is nothing wrong with using multiple dictionary words in a passphrase, as long as you use enough of them, and as long as the attacker's dictionary has to be big in order for him to be certain it contains your words.
In other words, don't use simple words that would be found in a dictionary with only 5,000 entries if you can help it. If you do, use a lot of words to form your passphrase. Also, as long as the hashed passwords are individually salted with unique salts, the attacker can't pre-hash common phrases together and directly check against the hashed passwords, because the per-password salt prevents the pre-generation of that list. That's the basic reason why rainbow tables are defeated by per-password salts.
Why is using multiple dictionary words okay, and even advisable? In the same way a lowercase-only password has 26 possibilities for each character position, a dictionary-based password has dict size possibilities for each position occupied by a dictionary word. is incorrect in assuming each dictionary word counts only as a single character because he neglected the distinction between the complexity of the dictionary "character" and that of a numeric character.
>1M dict, just so attacker can guarantee certainty
>even if the dictionary only has 5,000 words…
>with 5k words in the dict and a passphrase of 10 words
Also, in theory you would be safe to use phrases from books for this if they're long enough. This is because the attacker can't trivially pre-compute hashes for phrases of the right length from known books. First, because the attacker probably doesn't know the length of the phrase in words to begin with. Second, because of the sliding window notion of doing this - you don't know where the phrase starts or ends so you have to pre-compute all possible 10 word runs in the entire book, for each book. Third, because pre-password salts negate the attacker's ability to pre-compute anything useful.