2017 update
Turns out gpw is an available package in Debian Linux, including Raspbian which runs on Raspberry Pi. Who knew? A simple sudo apt-get install gpw will provide it. So I guess the source wasn’t lost at all.
Intro
15 years ago I worked for a company that wanted to require authentication in order to browse to the Internet. I searched around for something.
What I came up with is gpw – generate pronounceable passwords.
The details
I think this approach to secure passwords is no longer best practice, but I still think it has a place for some applications. What it does is analyze a dictionary that you’ve fed it. It then determines the frequency of occurrence of what it calls trigraphs – I guess that’s three consecutive letter combinations. Then it generates random, non-dictionary passwords using those trigraphs, which are presumably wholly or partially pronounceable.
Cute, huh? I’d say one problem is that if the bad guys got wind of this approach, the numbers of combinations they’d have to use to do password cracking is severely restricted.
Sophos has a recommendation for forming good strong passwords. See their blog post about the 50 worse passwords which contains a link to a video on how to choose a good password.
But I still have a soft spot for this old approach, and I think it’s OK to use it, get your password such as inglogri, add a few non-alpha-numeric characters and come up with a reasonably good, memorable password. Every site you use should really get a different password, and this tool might make that actually feasible.
I run it as:
$ gpw
which produces:
seminour shnopoos alespige olpidest hastrewe nsivelys shaphtra bratorid melexseu sheaditi |
Its output changes every time, of course.
I mostly run it this way:
$ gpw 1
which produces only a single password, for instance:
ojavishd |
You see how these passwords are sort of like words, but not words? Much more memorable than those completely random ones you are sometimes forced to type and which are impossible to remember?
I noted the location where I pulled it from the web 15 years ago as is my custom, but it is no longer available. So I have decided to make it available. I tweaked it to compile on CentOS with a C++ compiler.
Here is the CentOS v 6 binary for x86_64 architecture and README file.
Here is the tar file with the sources and the binary mentioned above. Run a make clean first to begin building it.
Enjoy!
Potential Problems
I know when we originally used it to assign 15,000 unique passwords, the randomness algorithm was so bad that I believe some people received identical passwords! So the the total number of generatable passwords might be severely limited. Please check this before using it in any meaningful way. I would naively expect and hope that it could generate about two- to three-times the number of words in my dictionary (/usr/share/dict/linux.words, with 479,829 words). But I never verified this.
2017 update
I ran it, 100 passwords at a time, on my Rsapberry Pi for a couple minutes. I created 275,900 passwords, of which 269,407 were unique. Strange. So you get some repeats but you motly get new passwords.
Further, I was going to tweak the code to generate 9-letter passwords which would presumably be more secure. But they just didn’t look as good to me, and I’ve only ever used it with 8 letters. So I just decided to keep it at 8 letters. You can experiment with that if you want.
More fun with the Linux dictionary
For another fun example using the Linux dictionary see how I solved the NPR weekend puzzle using it, described here.
A note for Debian Linux users (Ubuntu, Raspberry Pi, …)
The dictionary there is /usr/share/dictd/wn.index. You’ll need to update the Makefile to reflect this. This post about Words with Friends explains the packages I used to provide that dictionary.
Conclusion
An old pronounceable password generating program has been dusted off and given back to the open source community. It may not be state-of-the-art, but it has a role for some usages.
References and related
Want truly random passwords? I want to call your attention to random.org’s password generator: https://www.random.org/passwords/
Most people are becoming familiar with the idea of not reusing passwords but I don’t know if everyone realizes why. This article is a comprehensive review of the topic, plus review of password vaults like Lastpass, etc which you may have heard of: https://pixelprivacy.com/resources/reusing-passwords/
7 replies on “Generate Pronounceable Passwords”
I’m getting an error trying to compile gpw.C saying that sigma and tris aren’t declared in this scope. They are declared in loadtris.C, but I don’t know enough about C and C++ to get the external declarations working.
Ok, I think I got it working by adding a .h file, but apparently there is a `main` in both `loadtris.C` and `gpw.C`. How did this thing ever work?
Okay, nvm, I misunderstood the make process. The loadtris line in the Makefile needs to have `./` prepended to it in order to successfully compile.
I put a modified version up on GitHub that generates some stronger passwords. https://github.com/LightningStalker/stronger-gpw
Oh. That’s a timely improvement. Thanks for keeping this useful program alive.
Yw it’s always a great feeling to help others while helping myself.
FYI, the download link no longer points to a valid tarball. The Ubuntu source package can still be used by others to download the tarball, until it is fixed in this website:
https://launchpad.net/ubuntu/+source/gpw/0.0.19940601-9build1