The MtGox incident showed that people writing password crackers are much more clever than most people think, so these kinds of passwords are likely to be cracked. 8-9 bytes of random chars is better than fairly long strings of words, even if they are obfuscated.
No it didn't. Show me one example of someone with a 20+ char password that was brute forced. It is computationally infeasible with current technology.
There exists databases of know COMMON passwords taken from prior online hacks (hotmail was one of the largest). The most popular one contains roughly 14.1 million known passwords and substitutions of known passwords. So one can hash every password in the database and compare it against stolen password hash file looking for matches.
Remember in an attack like Mt Gox, 90%+ of accounts WEREN'T hacked. If an attacker gets hash file they don't need to hack every account. Just the 1% that are the weakest. Mt Gox was a combination of rookie mistakes by Mt. Gox combined with weak passwords combined with people who didn't update their password.
Still password databases don't contain long complex pass-phrases because as password length increases the likelihood the password is used decreases and it isn't cost effective to selectively attempt those less likely pass-phrases. Brute forcing 20+ characters is beyond our computational ability even IF you told the attacker it is all lowercase assuming some key-strengthening was done.
That remind me I should check if bitcoin client does any key-strengthening to reduce the number of attacks per second (i.e. PBKDF2)
http://en.wikipedia.org/wiki/PBKDF2On edit: Looks like bitcoin wallet does some dynamic key strenghening. Nice feature. Now if they just used OpenCL to generate key it would vastly reduce the ability to execute a brute force attack.
Technical details of wallet encryption
--------------------------------------
Wallet encryption uses AES-256-CBC to encrypt only the private keys
that are held in a wallet. The keys are encrypted with a master key
which is entirely random. This master key is then encrypted with
AES-256-CBC with a key derived from the passphrase using SHA512 and
OpenSSL's EVP_BytesToKey and a dynamic number of rounds determined by
the speed of the machine which does the initial encryption (and is
updated based on the speed of a computer which does a subsequent
passphrase change). Although the underlying code supports multiple
encrypted copies of the same master key (and thus multiple passphrases)
the client does not yet have a method to add additional passphrases.
At runtime, the client loads the wallet as it normally would, however
the keystore stores the keys in encrypted form. When the passphrase
is required (to top up keypool or send coins) it will either be queried
by a GUI prompt, or must first be entered with the walletpassphrase
RPC command. This will change the wallet to "unlocked" state where the
unencrypted master key is stored in memory (in the case of GUI, only for
long enough to complete the requested operation, in RPC, for as long as
is specified by the second parameter to walletpassphrase). The wallet is
then locked (or can be manually locked using the walletlock RPC command)
and the unencrypted master key is removed from memory.
8-9 bytes of random chars is better than fairly long strings of words
This is true. Nobody said otherwise. However most people tend to forget 9 random characters (and it must be purely random to have more entropy AND never be used on any other site/application. As a result most people don't use purely random single use passwords and figure an easier substitution password (as indicated in the cartoon) is good enough. The reality is despite it being harder to remember they lack any useful entropy and can be brute forced relatively easily.
So yes if you:
a) use 9 random digit (containing upper, lower, number & punctuation).
b) always generate them randomly.
c) never re-use them (password re-use kills any security you have).
d) never store a backup copy digitally.
then nothing is safer. It is impossible to brute force or use a lookup table assuming the implementation is secure. You still need to worry about social engineering attacks, fraud, trojans, keyloggers, etc.
Most people don't do that. Hell I would wager that you likely don't do that.