01
Approach
Python analysis of generated samples using zxcvbn estimates and descriptive character-frequency statistics, aggregated by generator, character policy and length.
02
What the results establish
The saved aggregate dataset contains 45 comparison groups totalling 450,000 samples. Length dominated: every generator and policy scored about 2 of 4 at 8 characters and 4 of 4 from 12 characters. One detail stood out. zxcvbn raised warnings on 10.4% of Bitwarden's 8-character symbols-and-digits samples, against under 0.5% for the other generators. The analysis explores estimated strength and recurring patterns, rather than measuring real-world password cracking.
03
Limitations and lessons
Reviewing my own work surfaced a discrepancy. The report names secrets.choice, while the saved custom generator uses Python's random module, which is not designed for cryptographic use. A correct build uses secrets. The comparison also does not establish that a custom generator is safer than a password manager.