Что'хороший один-лайнер, чтобы создать легко запоминающийся пароль, как xkcd'ы верно лошадь батарея скрепка или биткоин семян?
Редактировать 1:
Это не то же самое как создание случайной строки поскольку случайные строки не запоминающимся. Сравниваем с обязательный xkcd...
Во-первых, установить словарь языка вы're с помощью:
sudo apt-get install <language-package>
Чтобы увидеть все доступные пакеты:
apt-cache search wordlist | grep ^w
Примечание: все инструкции по установке предположим, что вы'вновь, основанный на Debian, ОС.
После того, как вы'вэ установлен словарь выполнить:
WORDS=5; LC_ALL=C grep -x '[a-z]*' /usr/share/dict/words | shuf --random-source=/dev/urandom -n ${WORDS} | paste -sd "-"
Который будет выводить экс:
blasphemous-commandos-vasts-suitability-arbor
Чтобы разбить его вниз:
** — выбрать только те слова, содержащие алфавит строчные буквы (исключая слова с
'в них или непонятные символы, как в
éКлер).
Значение lc_all=C, который гарантирует, что
[а-я]` в регулярное выражение выиграл'письмо-как матч t символы, кроме строчных букв без диакритики.Шуфа --случайных-источник=из/dev/urandom -Н ${слова}
— выбирали столько WORDS, как вы'вэ просил. --случайных-источник=из/dev/urandom
обеспечивает Шуфа
семена свой генератор случайных надежно; без него, Шуфа
по умолчанию защищенный семян, но может вернуться к незащищенной семя на некоторых системах, таких как Unix и эмуляции некоторых слоев на Windows.паста -СД " на-на"
— присоединяюсь ко всем слова с помощью -
(не стесняйтесь, чтобы изменить символ на что-то другое).Кроме того, вы можете обернуть его в функцию:
#!/bin/bash
function memorable_password() {
words="${1:-5}"
sep="${2:--}"
LC_ALL=C grep -x '[a-z]*' /usr/share/dict/words | shuf --random-source=/dev/urandom -n ${words} | paste -sd "$sep"
}
или
#!/bin/sh
memorable_password() {
words="$1"
if [ -z "${words}" ]; then
words=5
fi
sep="$2"
if [ -z "${sep}" ]; then
sep="-"
fi
LC_ALL=C grep -x '[a-z]*' /usr/share/dict/words | shuf --random-source=/dev/urandom -n ${words} | paste -sd "$sep"
}
Оба из которых можно назвать такие:
memorable_password 7 _
memorable_password 4
memorable_password
Возвращение:
skipped_cavity_entertainments_gangway_seaports_spread_communique
evaporated-clashes-bold-presuming
excelling-thoughtless-pardonable-promulgated-forbearing
Для ботаников и весело, но не очень надежный пароль, который не'т требует установки словаря, вы можете использовать (любезность @СПД):
WORDS=5; man git | \
tr ' ' '\n' | \
egrep '^[a-z]{4,}$' | \
sort | uniq | \
shuf --random-source=/dev/urandom -n ${WORDS} | \
paste -sd "-"
Я Дон'т сделать это с помощью стандартной утилиты, которые не предназначены с шифрования использования в виду. Нет никаких оснований полагать, что они're с помощью ГПСЧ или что они'повторно раздачу правильно, а кто-то, кто знает ваш способ сможет воспроизвести ваши ключевые фразы. Аналогичным образом ведут себя многофункциональных утилит, если вы еще'т знаете, как правильно их использовать.
pwqgen
у passwdqc
.
Вам нужен словник словаря, поскольку вы упомянули биткоины, скорее всего, вы хотите этого:
https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt
Если ваш родной язык не является английским, есть словари для других языков, доступных в том же хранилище.
Учитывая этот файл english.txt можно сделать случайный выбор с Шуфа
:
$ shuf -n 4 english.txt
anchor
neck
trumpet
response
Обратите внимание, что вы'll необходимо намного больше, чем просто 4 слова для действительно безопасный пароль. 4 слов для онлайн-сервисов, где количество попыток злоумышленник может сделать очень ограничен. Я думаю, что биткоин рекомендация 16 слов, не уверен.
Также в этом примере, каждое слово может появляться только один раз. Если вы хотите, чтобы повторяющиеся слова, добавить опцию --повторить
:
$ shuf -n 4 -r english.txt
Что позволит каждому слово появляется более чем один раз.
Если вы хотите, чтобы вывод в одну строку, вы можете просто добавить команды xargs Эхо
:
$ shuf -n 4 english.txt | xargs echo
math easily cube daughter
Или, если вы предпочитаете команда подстановки:
$ echo $(shuf -n 4 -r english.txt)
photo milk roast ozone
На заметка на полях, я не'т найти этот стиль пароль должен быть легко запоминающимся.
Ну, на самом деле мне очень повезло с математикой легко куб дочери, так что просто происходит, чтобы сделать его легко придумать историю, где ваша дочь может легко сделать математику с кубиками или любой другой. Это's что-то люди могут относиться к, как лошадь в XKCD'ы например.
Но что же такое якорь ответ раструб шеи
? Я'м не является автором комиксов с творчеством в свободное придумать мнемоническое за это. Поэтому он будет забыт в кратчайшие сроки.
Даже если вы можете вспомнить слова, она's жесткий, чтобы помнить их правильном порядке. Это было в математике легко кубик дочь " или " дочь легко математический куб` или что-то еще?
И пароль должен быть случайным, вы'вновь не позволили забрать и изменить его.
Что касается биткоин семена, вы'повторно не должен помнить их. Это просто способ быть в состоянии написать это легко. Кто-нибудь может написать 16 слов на листке бумаги и прочитать их правильно обратно; с случайных букв это'ы гораздо чаще ошибаться.
Если у вас есть вопросы о случайности Шуфа
, добавить --случайных-источник=параметр устройства/dev/urandom
для команды Шуфа
.
См. также https://www.gnu.org/software/coreutils/manual/html_node/Random-sources.html#Random-sources
У меня есть это:
xkcd_password () {
command grep "^[[:alpha:]]\{5,8\}$" "${1-/usr/share/dict/words}" | sort --random-source=/dev/urandom -R | head -4
}
Попробуйте это,
shuf --random-source=/dev/urandom -n5 /usr/share/dict/words | sed 's/[^[:alnum:]]//g' | paste -sd_
Вывод:
Quayles_knockwursts_scrotums_Barrie_hauler
Объяснение:
sed 'ы/[^[:alnum:]]//Г'
удалить не буквенно-цифровые символыпаста -sd_
, соединить слова с подчеркивания (_
)Вы можете использовать любой файл wordlist из интернета вместо `/usr/доли/дикт/слов.
Установите словник, если вы не'т иметь его. Это может быть в вашем репозитории дистрибутивов, например https://packages.debian.org/sid/wordlist:
sudo apt install wamerican
Как предложил @р.. но для машин с RHEL/CentOS в (есть в EPEL РЕПО):
pwgen
Обратите внимание на этот отрывок из pwgen's на странице (выделено мной):
программа pwgen создает пароли, которые разработаны, чтобы быть легко запоминаются людей, в то же время максимально безопасным. Человека-памятные пароли никогда не будет так надежен, как полностью случайные пароли.
Если вы хотите, чтобы это было еще проще запомнить, можно также использовать подход хэширования пароля (запомнить один пароль, чтобы создать много других фраз из). Вместо того чтобы запоминать сотни паролей, вы просто запомните способ их создания.
Используя Шуфа " С " в OpenSSL для обеспечения а раздал случайным Источник, Вы можете повторно генерировать пароли по мере необходимости. Пожалуйста, обратите внимание, что безопасность такого подхода зависит от силы только ваш пароль, так что сделать это рассчитывать.
В следующем примере, случайный семян зависит от
пользователь@узел
, кошелек#количество
и т. д.)Изменение любого из этих, и вы получите другой результат.
get_seeded_random() {
seed=$(printf "%s:" "$@")
openssl enc -aes-256-ctr -pass pass:"$seed" -nosalt \
< /dev/zero 2>/dev/null
}
get_random_words() {
dictionary=$1
number=$2
passphrase=$3
purpose=$4
dictionary_hash=$(sha1sum < "$dictionary")
shuf -n "$number" \
--random-source=<(get_seeded_random
"$passphrase" "$purpose" "$dictionary_hash" "$number") \
"$dictionary" \
| xargs echo
}
Так что, если мой пароль был WienerSchnitzel
(не подходит по понятным причинам), и если я воспользуюсь стиле XKCD паролей везде:
$ get_random_words english.txt 4 WienerSchnitzel wallet:1
robust lottery ugly stone
$ get_random_words english.txt 4 WienerSchnitzel wallet:2
vapor comfort various bitter
$ get_random_words english.txt 4 WienerSchnitzel [email protected]
any actor tobacco tattoo
И вы можете выполнить его несколько раз, всегда дает тот же результат:
$ get_random_words english.txt 4 WienerSchnitzel wallet:1
robust lottery ugly stone
$ get_random_words english.txt 4 WienerSchnitzel wallet:1
robust lottery ugly stone
Но запросить еще одно слово-это совершенно другой результат (как бы с помощью разных словарей и т. д.):
$ get_random_words english.txt 5 WienerSchnitzel wallet:1
crash category extra hollow cloud
Недостаток этого подхода заключается в том, что если кто-то знает, что вы're, используя этот метод, они могут попытаться перебрать свою секретную фразу, а затем перейти к созданию всех остальных фраз.
В этом примере, это не'т займет много времени, чтобы догадаться WienerSchnitzel. Чтобы улучшить это, вы'd нужен, чтобы применять дорогой (но повторяющиеся) хэш самого пароля.
# poor man's expensive hash replacement
seed=$( (echo "$seed" ; head -c 1G /dev/zero) | sha1sum)
И просто использовать намного лучше фразу на первом месте.
Вы также можете жестко закодировать по-настоящему случайные высокой энтропии пароля, но полностью теряется "и легко запоминающийся фильм" аспект вещей.
Кроме того, эта реализация зависит от Шуфа
всегда подбирая слова таким же образом, который не может быть случаем для будущих версий в долгосрочной перспективе.
Для полноты:
git clone [email protected]:victor-engmark/xkcd-passphrase-generator.git
cd xkcd-passphrase-generator
./generate.sh
В двух словах:
random.sample(open("/usr/share/dict/words").readlines(), 4)
Производит например:
['controverts\n', "Queensland's\n", 'plaids\n', 'aback\n']
Полный код будет немного дольше, что-то вроде,
import random; print("".join(random.sample(open("/usr/share/dict/words").readlines(), 4)))
Weyden
Geronimo's
Jidda
enumerate
С другой стороны, вы иногда получить Перлз такой:
polyamory
replicates
unmarried
diseases
С другой стороны, вы могли бы сделать слова, которые трудно выговорить или даже типа:
fezzes
Lumière's
tercentenary's
Liliuokalani
И конечно, если вы должны были выбрать один выход из нескольких вариантов, сузить пространство поиска резко, поэтому вы должны придерживаться первого (т. е. истинно случайным) набором слов.
xkcdpass - это простой способ сделать это без написания острот.
$ xkcdpass
optimal mycology Kumamoto thorny chrism unsavoury
Есть возможность задать количество слов и т. д.
Для того чтобы установить:
установить xkcdpass
(вы можете судо
).питон
и питон-Пип
, для Python 2 или 3.