Существует множество генераторов паролей, но поскольку во многих случаях предпочтительнее использовать случайно сгенерированные парольные фразы , я специально ищу генератор случайных и безопасных парольных фраз . Я хотел бы иметь возможность использовать его в автономном режиме (из соображений безопасности) под Linux.
Должно:
И, опционально, было бы неплохо, если бы он мог:
Я также хотел генератор случайных слов для создания паролей и ничего не мог найти, поэтому я создал Ipsum . Это bash-скрипт (предназначен для использования с терминала). Ipsum удовлетворяет следующим критериям:
/dev/urandom
, которое, по-видимому, является «криптографическим PRNG».Вот несколько примеров, иллюстрирующих, как работает Ipsum. Также важно знать, что при переводе Ipsum отображает английское слово под переведенным словом, и не все случайные слова будут переведены. Как только Ipsum сгенерирует список слов (на любом языке, который вы хотите), просто выберите подмножество для использования в качестве пароля.
По умолчанию
$ ipsum
unbalanced
Укажите номер
$ ipsum 12
tramp
cutoff
scoured
sundowns
indigence
pellagra
offs
heaping
peevishly
judiciary
unmerciful
haul
Альтернативный язык [немецкий]
$ ipsum --lang de 5
enormousness
^ enormousness
Tonsuren
^ tonsures
Harfenist
^ harpist
Oligarchie
^ oligarchy
nachlassen
^ letup
Альтернативный язык [японский]
$ ipsum -l ja 5
再要求
^ reclaims
喫水線
^ waterline
同意しません
^ disagree
皮質
^ cortex
リクルーター
^ recruiter
Биты энтропии
$ ipsum --entropy 4
4 word(s) from 1 language(s) produces 65.36 bits of entropy.
happening
commander
parred
woodland
Это довольно длинно, но я подумал, что предоставлю его для вашего удовольствия от просмотра. Вот в чем суть.
#!/bin/bash
function ipsum
{
# Random Word Generator
# Inspired by:
# - https://linuxconfig.org/random-word-generator
# - http://stackoverflow.com/a/14203146/4769802
# - http://www.unix.com/shell-programming-and-scripting/156551-check-whether-string-begin-uppercase-lowercase-digit.html
#
# Depends on:
# - translate-shell: https://github.com/soimort/translate-shell
# - This ^ thing is awesome. Seriously, try it out!
#-----------------------------------------------------------------Constants
X=0
COUNT=1
MAX_INT=16777216
LANGUAGE=false
LANGUAGES="en"
NUM_LANGUAGES=1
ENTROPY=false
ALL_NON_RANDOM_WORDS=/usr/share/dict/words # dictionary file
non_random_words=`cat $ALL_NON_RANDOM_WORDS | wc -l` # total # of words
proper_nouns=`cat $ALL_NON_RANDOM_WORDS | grep [A-Z].* | wc -l` # apprx # of proper nouns
total_options=$((non_random_words - proper_nouns)) # apprx # of options
#-----------------------------------------------------------------Handle Flags w. Params
while [[ $# -gt 1 ]]
do
key="$1"
case $key in
-e|--entropy)
# print the entropy
ENTROPY=true
;;
-l|--lang)
# Get the specifed languages!
LANGUAGE=true
LANGUAGES=(${2//+/ })
NUM_LANGUAGES=${#LANGUAGES[@]}
shift # past argument
;;
--lang-all)
# Use top 10 languages at once!
LANGUAGE=true
LANGUAGES=(zh pt es bn en ru hi ja ar pa)
NUM_LANGUAGES=${#LANGUAGES[@]}
;;
*)
echo "Unrecognized argument: try 'ipsum --help'"
exit
;;
esac
shift # past argument or value
done
#-----------------------------------------------------------------Handle Main Param
if [[ -n $1 ]]; then
case $1 in
-a|--about)
# Give a description of self
echo "Ipsum is a minimalist random word generator"
echo "with several notable features:"
echo " - Off-line: uses local dictionary so"
echo " no internet is needed"
echo " - Languages: can generate non-English words"
echo " - Note: this requires the internet"
echo " - Random: uses '/dev/urandom' which is a CSPRNG"
echo " - Entropy: calculates entropy of requested word combo"
echo ""
exit
;;
-h|--help)
# Show some examples
echo ""
echo "Example Usage: ipsum"
echo " ipsum 12"
echo " ipsum -lang fr 12"
echo " ipsum -l fr 12"
echo " ipsum -l fr+ru 12"
echo " ipsum --entropy 12"
echo " ipsum -e 12"
echo " ipsum -l fr+ru -e 12"
echo ""
echo "Language Options:"
echo " - Found here :: https://github.com/soimort/translate-shell"
echo ""
exit
;;
-i|--info)
# Show information about numbers and such
echo ""
echo "Dictionary Location: $ALL_NON_RANDOM_WORDS"
echo "Dictionary Size: $non_random_words"
echo "Proper Nouns: $proper_nouns"
echo "Usable Words: $total_options"
echo "Default Language: $LANGUAGES"
echo "Possible Languages: 124"
echo " _________________________________ "
echo " | Top Ten Most Common Languages |"
echo " |----------------|----------------|"
echo " | Chinese - zh | Portuguese - pt|"
echo " | Spanish - es | Bengali - bn |"
echo " | English - en | Russian - ru |"
echo " | Hindi - hi | Japanese - ja |"
echo " | Arabic - ar | Punjabi - pa |"
echo " |________________|________________|"
echo ""
exit
;;
[0-9]*)
# It is probably a number, so work normally
COUNT="$1"
;;
*)
echo "Unrecognized argument: try 'ipsum --help'"
exit
;;
esac
fi
#-----------------------------------------------------------------Calculate Entrophy
if [ "$ENTROPY" = true ]; then
# Equation = log_2( #_of_options * #_of_languages ) * #_of_words
log_base_2=`echo "l($total_options*$NUM_LANGUAGES)/l(2)" | bc -l` # log base 2 of options
entropy_bits=`printf "%.*f\n" 2 $log_base_2` # bits of entropy per word
total_entropy=$(echo "$entropy_bits * $COUNT" | bc)
echo "$COUNT word(s) from $NUM_LANGUAGES language(s) produces $total_entropy bits of entropy."
echo ""
fi
#-----------------------------------------------------------------Make $COUNT Random Words
while [[ "$X" -lt "$COUNT" ]]; do
random_number=`echo "$(od -N3 -An -i /dev/urandom)*$non_random_words/$MAX_INT" | bc`
WORD=$(sed `echo $random_number`"q;d" $ALL_NON_RANDOM_WORDS)
# Clean and Format
DEL="'s"
WORD=${WORD%$DEL}
DEL="'"
WORD=${WORD%$DEL}
# Clean out 'funny' words (ie proper nouns)
case ${WORD:0:1} in
[[:lower:]])
# Lowercase indicates a common noun
if [ "$LANGUAGE" = true ]; then # If lang was specified use trans
random_index=`echo "$(od -N3 -An -i /dev/urandom)*$NUM_LANGUAGES/$MAX_INT" | bc`
LANG=${LANGUAGES[random_index]}
trans -b :$LANG $WORD 2> /dev/null
echo " ^ $LANG for $WORD"
else # else just given normal word
echo "$WORD"
fi
let "X = X + 1"
;;
*)
# Don't use whatever $WORD was
;;
esac
done
}
ipsum "$@"
Название Ipsum происходит от Lorem Ipsum — названия текста-заполнителя для графических элементов визуальной презентации.
ipsum.sh
, несмотря на то, что его .sh
расширение в настоящее время является просто функцией оболочки, в нем отсутствуют первая #!/bin/bash
и последняя строки ipsum "$@"
..sh
расширение для подсветки синтаксиса. Я импортирую свои функции из моего, .bashrc
чтобы ими было легко управлять.ipsum()
это функция, которую необходимо загрузить в первую очередь, . ipsum.sh ; impsum -h
т.е. Кроме того, пожалуйста, поправьте меня, если я ошибаюсь, но не .bashrc
выделяет собственную память окружения для каждого экземпляра bash
? Если это так, то запуск нескольких оболочек (на разных вкладках эмулятора терминала с графическим интерфейсом) загрузит несколько избыточных экземпляров ipsum()
.Есть несколько ресурсов, которые помогут вам генерировать случайные фразы-пароли, хотя вам, возможно, придется предпринять несколько дополнительных шагов, чтобы объединить словари или визуализировать энтропию.
Этот простой bash-скрипт извлечет ваш каталог /usr/share/dict/words как совокупность подходящих слов. Вы можете указать, сколько случайных слов и использовать свой собственный файл слов. http://linuxconfig.org/генератор случайных слов
Взгляните также на этот скрипт, который предоставляет несколько более легко настраиваемых параметров, таких как минимальная и максимальная длина слова: http://stackoverflow.org/wiki/Dictionary-based_random_password_generator
Черт возьми, для дальнейшего вдохновения ознакомьтесь с этим кратким обсуждением SO о написании такого скрипта на Python: https://stackoverflow.com/questions/18834636/random-word-generator-python
Надеюсь, это поможет!
Редактировать: обратите внимание, что я не разбираюсь в том, какие псевдослучайные процессы могут использоваться за кулисами в Python или Linux, поэтому я не могу комментировать любые возможные уязвимости на этом конце.
Кен Герберт
Зерофлюкс
ландрони
Зерофлюкс
ландрони
Дэвид