The script below has been improved upon and can be found here: http://blog.0x10.co.uk/2013/04/passphrase-generators-part-ii.html
Passwords are dead. Long live passphrases. Or something like that anyway. As perfectly summarized by XKCD here http://xkcd.com/936/, passwords are hard to remember and easy to guess. Passphrases on the other hand are easy to remember and hard to guess.
To help generate passphrases, I've put together a little bash script.
Firstly, download the dictionary containing 10000 most common English words. If you have a 4 word passphrase, thats 10^16 possible combinations.
$ wget http://wortschatz.uni-leipzig.de/Papers/top10000en.txtNow save the following script:
#!/bin/bash dict=$1 script=$2 chars="a-zA-Z0-9 " size=$(cat $dict | wc -l) echo "#!/bin/bash" > $script ( echo -n "dict=( "; i=0; cat $dict | while read word; do echo -n "$word " | tr -c -d "$chars"; if [ "$i" -eq "10" ]; then i=1; echo ""; fi; ((i++)); done; echo ")" ) >> $script echo "size=$size" >> $script echo 'count=${1:-10} words=${2:-4} for i in $(seq 1 $count); do first=1 for j in $(seq 1 $words); do r=$RANDOM let "r %= $size" word=${dict[$r]} if [ "$first" == "0" ]; then echo -n " " fi echo -n "$word" first=0 done echo "" done ' >> $script chmod +x $scriptUsing modulo on a random number? tut tut tut. Anyway, I've called this script make.sh.
Now run it, giving it the dictionary file and an output script name:
$ ./make.sh top10000en.txt ppgen.shWhat it basically does is embed an array of words into ppgen.sh plus the code necessary to show passphrases.
It will look something like:
#!/bin/bash dict=( the of to and a in for is The that on said with be was by as are at from it has an have will or its he not were which this but can more his been would ... definite fragile rewards antiabortion respects careers backers seize inefficient conceptual densities EPS Me Sparc spirits experimentally shallow ) size=10000 count=${1:-10} words=${2:-4} for i in $(seq 1 $count); do first=1 for j in $(seq 1 $words); do r=$RANDOM let "r %= $size" word=${dict[$r]} if [ "$first" == "0" ]; then echo -n " " fi echo -n "$word" first=0 done echo "" doneWe can now run it:
$ ./ppgen.sh Does Brazil quotas message amount losers sing Oregon patient misleading rebels smoking refuse subordinated clerk wrote have handle Rockwell strong Committee Insurance consumer else tariffs Unit mouth loved V singled graduate kidney uranium Hungary scientists Mar fined Hercules Kemp IndianOr, if we wanted to create just one 5 word phrase:
$ ./ppgen.sh 1 5 Commodity dioxide Boris unit drop