Despite this awkwardness, I think this approach is worth it. I only have to memorize one password, and yet I still have a different password for every website. And if the Chrome extension ever gets shut down (*), the algorithm is simple enough to recreate in 4 lines of Python:
bits = (domain + '/' + universal_password).encode()
for i in range(2 ** 16):
bits = hashlib.sha256(bits).digest()
generated_password = base64.b64encode(bits).decode()[:16]
(*) I am the author of that Chrome extension, so I personally am not worried about it being shut down. But it is perfectly valid for other people to have that concern, of course. generated_password = base64.b64encode(bits).decode()[:16] + '0@#Zz'I'm still considering it, but there would need to be a very slow, very careful rollout plan. Probably some transition period where users can opt into the new scheme, then eventually make the new scheme the default but still support the old scheme, and finally remove the old scheme to make things simple again.
Since this is a Chrome extension which collects no information from users, I have no way of contacting users about this. So I would need to wait long enough that users discover it themselves in the UI. All told, I'd guess it would take about a year for the full migration.
Anyone is welcome to discuss things like this with me via GitHub issues: https://github.com/stepchowfun/hashpass
Checkbox:
Append common required chars [ ]: @Zz1
The roll out is that this is unchecked by default initially with a warning that the default will be checked. Then eventually it defaults to checked.Note that regular password managers also have a master password people can try to brute force, so I actually think this algorithmic method is technically more secure since there's no need to trust a third party to manage the password store, while still having the other flaws that traditional PW managers have.
[1] https://chrome.google.com/webstore/detail/hashpass/gkmegkoip...