> Then why let users choose a password at all? Why not just assign them one that they have to write down?
Because then anyone who reads what is written down gains full access to the user's data. A password (kept in human memory) plus passphrase (written down) is more secure. I would agree this comes at the cost of convenience, but I think the trade-off is worth it.
> Why not generate a 20 character random string?
Because it would be a real pain to type each time the user logs in. In this case I don't think the security/convenience trade-off is worth it.
> As Colin points out in the top comment, hashing with scrypt will make even mediocre passwords uncrackable.
True, but what percentage of users choose poor passwords - not mediocre ones? Scrypt will not be much good if the user chooses a password from the dictionary, or a word that appears in a list of the top 10,000 most common passwords. (Edit: According to Mark Burnett [2] such passwords are chosen by 99.8% of users)
> And high-speed cracking is only a problem if the bad guys get your password table.
The password + passphrase model also protects users who choose the same password for different online systems. A weakness in some other website (or something more evil [1]) will not compromise the security of my online system.
Edit: Low-speed cracking might also be a problem. Mark Burnett says 14% of users have a password from the top 10 password list [2].
[1] http://xkcd.com/792/
[2] http://xato.net/passwords/more-top-worst-passwords