It certainly needs a rule for putting spaces between the words. "correct horse battery staple" and "correcthorsebatterystable" should be treated as being approximately equal in strength.
horsebattery -- 3 minutes
h orsebattery -- 8 years
ho rsebattery -- centuries
horseb attery -- 85 years
horsebat tery -- 54 years
Which at the very least is a little odd, even if the reason (breaking up the words into less word-like structures) is clear.Also:
abcde -- instant
a b c d e -- centurieshorsebattery vs 'h orsebattery', on the other hand, shows a clear flaw -- it doesn't tolerate misspellings up to a given edit distance. edit distance is tricky because efficient word segmentation gets much harder, especially w/ support for l33t substitutions.
'abcde' vs 'a b c d e' is tricky too. i could add special case for spaces only that would allow zxcvbn to recognize 'a b c d e' as a sequence, but it wouldn't cover 'a-b-c-d-e', 'a8b8c8d8e' etc.
pas sw ord
Will apparently take centuries to crack. I see the reasoning, but can this be correct?46,000 options for 15.5 bits of entropy, only. Even if we assume that there are thousands of different "strategies" by which passwords might be chosen, that only adds ~10ish bits or so, and doesn't bring it under the useful thresholds.