Я сгенерировал удобные для человека контрольные суммы, взяв биты из контрольной суммы MD5 и используя их в качестве индекса в списке слов. Например:
: nr@yorkie 7012 ; md5words /home/nr/.profile
overextend moonscape cucumbers outsmarting
Код - это около 40 строк Lua, не считая списка слов, который включен в скрипт для получения идентичных результатов в каждой системе.
EDIT:
В вашем приложении вы хотите сгенерировать 50 000 ключей. Вы можете сделать это примерно так:
for ((i=1; i<=50000; i++))
do
echo "this is my secret phrase $i" | md5words
done
Использование этой процедуры с другой секретной фразой дает следующие ключи:
Chisinau Phaethon customs Martina
commensurate freewill logical cambered
kamikazes Creighton Dobro's Alonzo
medallion's jesters goofy keystones
Anaxagoras martial Medina's Hon's
acclimatized chirping Cleopatra's mascaras
buoyant nuclear lumbering disagreements
dampens Philby cloak drollness
Эти ключи трудно подделать: список слов содержит почти 100 000 слов, поэтому имеется 10 ^ 20 возможных последовательностей из 4 слов. Если у вас есть 100 000 кодов, вероятность того, что кто-то сможет угадать код в случайном порядке, составляет один из 10 ^ 15. Если вы поставите газ на количество клавиш, которые разрешено использовать, скажем, одну клавишу каждые 0,3 секунды, у вас не возникнет проблем.
Если бы я развертывал эту идею в вашем приложении, я бы сократил список слов до чего-то более короткого, возможно, только до 10 000 слов, которые очень широко известны. Даже после потери коэффициента 10 ^ 4 цифры оказываются в вашу пользу - вероятность угадать ключ будет 1 на 100 млрд.
ОБНОВЛЕНИЕ : В августе 2011 года эта техника была предметом xkcd карикатуры .