A simple passphrase generator in bash
Published by Arun Isaac on
In other languages: தமிழ்
The Electronic Frontier Foundation has released a new set of wordlists with increased usability in mind. And, I can't be bothered to go get some real dice to generate a passphrase. So, I wrote myself a little bash script to randomly pick a passphrase.
The script obtains random numbers by reading /dev/random. The random-line function reads 2 random bytes (random numbers from 0 to 65535) and uses rejection sampling to produce random numbers uniformly distributed between 1 and the number of words in the word list. I am of course assuming that the word list does not have more than 65536 words.
Passphrases are much easier to remember than passwords. The only difficulty is that they can be very long to type out. I am still not sure how inconvenient this is going to be. But, let's see.
WORDLIST=~/eff_large_wordlist.txt NO_OF_WORDS=6 function random-line { NO_OF_LINES=$1 RANDOM_NO=$(od -An -N 2 -t u2 < /dev/random) if [[ $RANDOM_NO -lt $NO_OF_LINES ]] then echo $(expr $RANDOM_NO + 1) else random-line $NO_OF_LINES fi } NO_OF_LINES=$(wc -l < $WORDLIST) for i in $(seq 1 $NO_OF_WORDS) do RANDOM_LINE=$(random-line $NO_OF_LINES) RANDOM_WORD=$(sed -n ${RANDOM_LINE}p $WORDLIST | awk '{print $2}') printf "%s " $RANDOM_WORD done printf "\n"
Downloads
ppgen.sh – passphrase generator script