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