Подтвердить что ты не робот

Алгоритмы генерации паролей с использованием фонетически запоминающегося пароля

Фон

В то время как в спортзале я работал с моим кодовым замком и понял то, что было бы полезно для меня как программиста. Для этого моя комбинация состоит из трех отдельных наборов чисел, которые либо звучат одинаково, либо имеют какое-то другое отношение, которое облегчает их запоминание. Например, 5-15-25, 7-17-2, 6-24-5. Эти примеры легко запомнить.

Вопрос

Как мне реализовать что-то подобное для паролей? Да, они должны быть трудно взломать, но они также должны быть легко для конечного пользователя запомнить. Комбинированные замки делают это с сочетанием чисел, которые имеют похожие звуки, и с номерами, которые имеют сходные свойства (7-17-23: All Prime, 17 рулонов сразу после языка 7, а 23 - другое простое и (вне из этого набора), "жесткий", который нужно запомнить).

Критерии

  • Пароль должен быть легко запоминающимся. Dog!Wolf легко запомнить, но как только злоумышленник знает, что ваш сайт выдает эту комбинацию, он делает его бесконечно легче проверить.
  • Слова или буквы должны в основном следовать тем же звукам (по большей части).
  • Не менее 8 букв
  • Не использовать [email protected]#$%^&*();'{}_+<>?,./ Эти знаки препинания, в то время как подходят для "жестких" паролей, не имеют "легко запоминающегося" звука.

Ресурсы

Этот вопрос является агностиком языка, но если есть конкретная реализация для С#, я был бы рад услышать об этом.

Update

Несколько пользователей сказали, что "это плохая защита паролем". Не полагайте, что это для веб-сайта. Это может быть просто для меня сделать приложение для себя, которое генерирует пароли в соответствии с этими правилами. Вот пример.

Буквы А - С - С - L - I - M - O - P "поток", и они оказываются двумя регулярные слова, собранные (Акклиматировать и Mop). В дальнейшем, когда пользователь говорит эти письма, или говорит им как слово, это слово для них. Легко запомнить, но трудно взломать (словарная атака, очевидно).

Этот вопрос имеет две цели:

  • Построить пароли из букв, похожих на звук (с использованием аллитерации) или
  • Построить пароли, которые объединяют общие слова аналогично созданию третьего набора букв, который не находится в словаре.
4b9b3361

Ответ 1

Вы можете посмотреть:

  • Алгоритм генерации объявляемого пароля, используемый apg и объясняется в FIPS-181
  • Koremutake

Ответ 2

Прежде всего, убедитесь, что пароль длинный. Подумайте об использовании "pass-phrase" вместо одного "pass-word". Нарушающие фразы, такие как "Собаки и волки ненавидят друг друга". очень сложно, но их легко запомнить.

Некоторые сайты также могут дать вам совет, который может быть полезен, например Сильные пароли: как их создавать и использовать (связанный с Password checker, который является полезным инструментом сам по себе).

Кроме того, вместо того, чтобы пытаться создать легко запоминающийся пароль, в некоторых случаях гораздо лучшей альтернативой является избежание запоминания пароля вообще, используя (и обучая своих пользователей) хорошую утилиту для управления паролями (см. Каков ваш любимый инструмент для хранения паролей?) - при этом единственная часть - это создать жесткий пароль для взлома, что легко (любое достаточно длинное случайное предложение будет делать).

Ответ 3

Вы можете использовать Марковские цепи для генерации слов, которые звучат как английский (или любой другой язык, который вы хотите), но они не являются фактическими словами.

Вопрос о легко запоминаемом действительно субъективен, поэтому я не думаю, что вы можете написать такой алгоритм, который будет хорош для всех.

И зачем использовать короткие пароли на веб-сайтах/компьютерных приложениях вместо паролей? Их легко запомнить, но трудно взломать.

Ответ 4

Я удивлен, что никто не упомянул алгоритм Multics, описанный в http://www.multicians.org/thvv/gpw.html, который аналогичен алгоритму FIPS, но основан на триграфах а не орграфами. Он производит выходные данные, такие как

ahmouryleg
thasylecta
tronicatic
terstabble

Я портировал код на питон: http://pastebin.com/f6a10de7b

Ответ 5

Спустя много лет я решил использовать первую букву слов в ключевой фразе. Невозможно взломать, универсальный для длины и ограничений, таких как "у вас должна быть цифра", и трудно делать ошибки.

Это работает, создавая фразу. Полезная сумасшедшая веселая тема! "Переполнение стека инопланетянами высадилось без использования ракет или колес". Возьмите первую букву, ваш пароль "soalwurow"

Вы можете набрать быстро и точно, так как вы не помните букву, вы просто говорите предложение в своей голове.

Мне также нравится, когда слова чередуются с левой и правой стороны клавиатуры, это дает вам более низкую скорость ввода и более приятный ритм. Обратите внимание, что в моем примере ваши руки чередуются влево-вправо-влево-вправо.

Ответ 6

Я несколько раз использовал следующий алгоритм:

  • Поместите все строчные гласные (из a-z) в массив. Гласные
  • Поместите все нижние согласные (от a-z) в другой массив Согласные
  • Создайте третий массив Пары двух букв таким образом, чтобы вы создали все возможные пары букв между гласными и согласными ( "ab", "ba", "ac" и т.д.).
  • Случайно выберите 3-5 элементов из пар и соедините их вместе как строку Пароль
  • Случайно выберите true или false
    • Если true, удалите последнюю букву из пароля
    • Если false, ничего не делайте
  • Замените 2-4 случайно выбранных символа в Password с его эквивалентом в верхнем регистре
  • Замените 2-4 случайно выбранных символа в Password с произвольно выбранным целым числом 0-9

Voilá - теперь у вас должен быть пароль длиной от 5 до 10 символов, с буквенно-цифровыми символами верхнего и нижнего регистра. Наличие гласных и согласных по очереди часто делает их полуразрешимыми и, следовательно, легче запомнить.

Ответ 7

FWIW Мне очень нравятся сплетни слоговых слов для простого, но по существу случайного пароля. Возьмите "Бонго", например, как случайное слово. Поменяйте слоги, которые вы получите "Gobong". Перемените o для нулей сверху (или некоторую другую общую замену), и у вас есть по существу случайная последовательность символов с некоторой дорожкой, которая поможет вам запомнить ее.

Теперь, как вы программным образом выбираете слоги - это еще один вопрос!

Ответ 8

Когда вы создаете пароль для пользователя и отправляете его по электронной почте, первое, что вам нужно сделать, когда они впервые войдут в систему, если заставят их изменить свой пароль. Пароли, созданные системой, не обязательно должны запоминаться, потому что они должны быть нужны только один раз.

С легкостью запоминать, трудно угадать пароли - это полезная концепция для ваших пользователей, но не та, которую система должна каким-то образом применять. Предположим, вы отправили пароль в учетную запись пользователя gmail и пользователь не изменил пароль после входа в систему. Если пароль для учетной записи gmail взломан, пароль для вашей системы скомпрометирован.

Таким образом, создание легко запоминаемых паролей для ваших пользователей не помогает, если они должны немедленно изменить пароль. И если они не меняют его немедленно, у вас есть другие проблемы.

Ответ 9

Я предпочитаю давать пользователям "жесткий" пароль, требуя, чтобы они меняли его при первом использовании и давали им указания о том, как создать хорошую длинную фразу. Я бы также связал это с разумными требованиями к сложности пароля (8+ символов, сочетание верхнего и нижнего регистра, пунктуация или цифры). Мое обоснование для этого состоит в том, что люди с большей вероятностью запоминают то, что они сами выбирают, и с меньшей вероятностью записывают его где-то, если они могут его запомнить.

Ответ 10

Спин по идее "фразовой фразы" заключается в том, чтобы взять фразу и написать первые буквы каждого слова во фразе. Например.

"A specter is haunting Europe - the specter of communism."

становится

asihe-tsoc

Если фраза имеет точную точку, такую ​​как!,? и т.д., может также засунуть ее туда. То же самое касается чисел или просто заменяет буквы или добавляет соответствующие номера в конец. Например. Карл Маркс (который сказал эту цитату) умер в 1883 году, так почему бы не "asihe-tsoc83"?

Я уверен, что атака с использованием грубой силы может использовать статистические свойства такого пароля, но она по-прежнему на порядок более безопасна, чем атака словаря.


Еще один отличный подход - просто сделать смешные слова, например. 'Barangamop. После использования его несколько раз вы передадите его в память, но это трудно для грубой силы. Добавляйте некоторые цифры или знаки препинания для дополнительной безопасности, например. '386Barangamop!

Ответ 11

Здесь часть 2 вашей идеи прототипирована в оболочку script. Это займет 4, 5 и 6 буквенных слов (примерно 50 000) из файла словаря Unix на вашем компьютере и соедините эти слова с первым символом.

#! /bin/bash

RANDOM=$$
WORDSFILE=./simple-words
DICTFILE=/usr/share/dict/words
grep -ve '[^a-z]' ${DICTFILE} | grep -Ee '^.{4,6}$' > ${WORDSFILE}
N_WORDS=$(wc -l < ${WORDSFILE})
for i in $(seq 1 20); do
    password=""
    while [ ! "${#password}" -ge 8 ] || grep -qe"^${password}$" ${DICTFILE}; do
        while [ -z "${password}" ]; do
            password="$(sed -ne "$(( (150 * $RANDOM) % $N_WORDS + 1))p" ${WORDSFILE})"
            builtfrom="${password}"
        done
        word="$(sort -R ${WORDSFILE} | grep -m 1 -e "^..*${password:0:1}")"
        builtfrom="${word} ${builtfrom}"
        password="${word%${password:0:1}*}${password}"
    done
    echo "${password} (${builtfrom})"
done

Как и большинство генераторов паролей, я обманываю, выставляя их в наборах двадцатых. Это часто защищается с точки зрения "безопасности" (кто-то смотрит через плечо), но на самом деле его просто взломать, чтобы пользователь просто подобрал самый дружелюбный пароль.

Я нашел слова из 4 слова в словаре, все еще содержащие неясные слова.

Лучшим источником слов будет письменный документ. Я скопировал все слова на этой странице и вложил их в текстовый документ, а затем выполнил следующий набор команд, чтобы получить фактические английские слова.

perl -pe 's/[^a-z]+/\n/gi' ./624425.txt | tr A-Z a-z | sort -u > ./words
ispell -l ./words | grep -Fvf - ./words > ./simple-words

Затем я использовал эти 500 или около того очень простых слов с этой страницы, чтобы генерировать следующие пароли с оболочкой script - script в скобки показывает слова, которые составляют пароль.

backgroundied (background died)
soundecrazy (sounding decided crazy)
aboupper (about upper)
commusers (community users)
reprogrammer (replacing programmer)
alliterafter (alliteration after)
actualetter (actual letter)
statisticrhythm (statistical crazy rhythm)
othereplacing (other replacing)
enjumbling (enjoying jumbling)
feedbacombination (feedback combination)
rinstead (right instead)
unbelievabut (unbelievably but)
createdogso (created dogs so)
apphours (applications phrase hours)
chainsoftwas (chains software was)
compupper (computer upper)
withomepage (without homepage)
welcomputer (welcome computer)
choosome (choose some)

Некоторые из результатов там есть победители.

Прототип показывает, что это, вероятно, возможно, но интеллект, который вам нужен для информации о аллитерации или слоге, требует лучшего источника данных, чем просто слов. Вам нужна информация о произношении. Кроме того, я показал, что вы, вероятно, хотите, чтобы база данных простых простых слов выбирала, а не все слова, чтобы лучше удовлетворить ваши требования к запоминающему паролю.

Создание единого пароля в первый раз и каждый раз - что-то, что вам нужно для Интернета - приведет к лучшему источнику данных и более изощренности. Использование лучшего языка программирования, чем Bash с текстовыми файлами, и использование базы данных может заставить это работать мгновенно. Используя систему базы данных, вы можете использовать алгоритм SOUNDEX или некоторые из них.

Утонченная идея. Удачи.

Ответ 12

Я полностью с rjh. Преимущество использования начальных букв парольной фразы заключается в том, что она выглядит случайной, что заставляет задуматься, если вы не знаете фразу, стоящую за ней, в случае, если Ева оглянется через плечо при вводе пароля.
OTOH, если она увидит, что вы набираете около 8 символов, среди которых "дважды", а затем "o" и "r" она может догадаться об этом в первый раз.
Принуждение к использованию хотя бы одной цифры действительно не помогает; вы просто знаете, что это будет "pa55word" или "passw0rd".

Тексты песен - неисчерпаемый источник паролей.

"But I should have known this right from the start"

становится "bishktrfts". 10 букв, даже только строчные буквы дают вам 10 ^ 15 комбинаций, что очень много, тем более, что нет ярлыка для его взлома. (При 1 миллион комбинаций в секунду требуется 30 лет для тестирования всех комбинаций 10 ^ 15.)
В качестве дополнительного (в случае, если Ева знает, что вы фанат полиции), вы можете поменять, например. 2-й и 3-й буквы, или взять вторую букву третьего слова. Бесконечные возможности.

Ответ 13

Посмотрите на инструмент gpw. Пакет также доступен в репозиториях Debian/Ubuntu.

Ответ 14

Сгенерированные системой пароли - плохая идея для чего-либо, кроме внутренних учетных записей службы или временных сбрасываний (и т.д.).

Вы всегда должны использовать свои "кодовые фразы", ​​которые вам легко запомнить, но это почти невозможно угадать или грубой силой. Например, пароль для моей старой учетной записи университета был.

Here to study again!

Это 20 символов, используя верхний и нижний регистр с пунктуацией. Это невероятно сильный пароль, и нет никакого программного обеспечения, которое могло бы создать более безопасный, который легче запомнить для меня.

Ответ 15

Один из способов генерации паролей, которые "звучат как", - использовать цепочку марков. Цепочка марков n-степени - это в основном большой набор n-кортежей, которые появляются в вашем корпусе ввода, а также их частота. Например, "аардварк" со цепью марков 2-й степени будет генерировать кортежи (a, a, 1), (a, r, 2), (r, d, 1), (d, v, 1), (v, a, 1), (r, k, 1). При желании вы также можете включить "виртуальные" токены начального слова и конечного слова.

Чтобы создать полезную цепочку марков для ваших целей, вы будете кормить большим количеством данных на английском языке - есть много доступных, в том числе, например, Project Gutenburg - для создания набора записей, как описано выше. Для генерации слов или предложений естественного языка, которые, по крайней мере, в основном следуют правилам грамматики или композиции, обычно достаточна цепочка марков третьей степени.

Затем, чтобы сгенерировать пароль, вы выбираете случайный "исходный" кортеж из набора, взвешенный по его частоте, и выводите первую букву. Затем многократно выбирайте случайным образом (снова взвешенный по частоте) "следующий" кортеж, то есть тот, который начинается с тех же букв, что и ваш текущий, и имеет только одну букву. Используя вышеприведенный пример, предположим, что я начинаю с (a, a, 1) и выводим 'a'. Мой единственный следующий выбор - (a, r, 2), поэтому я выводил еще один "a". Теперь я могу выбрать либо (r, d, 1), либо (r, k, 1), поэтому я выбираю один случайным образом в зависимости от их частоты появления. Предположим, что я выбираю (r, k, 1) - я вывод 'r'. Этот процесс продолжается до тех пор, пока вы не достигнете маркера конца слова или не решите останавливаться независимо (поскольку большинство цепочек марков образуют циклический граф, вы не можете прекратить генерировать, если вы не применяете ограничение на искусственную длину).

На уровне слов (например, каждый элемент кортежа - это слово), этот метод используется некоторыми "ботами беседы" для создания разумно-кажущихся бессмысленных предложений. Он также используется спамерами, чтобы попытаться уклониться от спам-фильтров. На уровне письма, как описано выше, его можно использовать для генерации бессмысленных слов, в данном случае для паролей.

Один недостаток: если ваш корпус ввода не содержит ничего, кроме букв, и ваши выходные фразы, поэтому они не будут передавать большинство "безопасных" требований к паролю. Возможно, вы захотите применить некоторую пост-обработку, чтобы подставить некоторые символы для чисел или символов.

Ответ 16

edit: После ответа я понял, что это никоим образом не является фонетически незабываемым. В любом случае, оставляя ответ, я нахожу это интересным./Изменить

Старая нить, я знаю... но это стоит того.

1) Я бы, наверное, создал самый большой словарь, который вы можете использовать. Расположите их в ведра по части речи.

2) Затем создайте грамматику, которая может создавать несколько типов предложений. "Тип" предложения определяется перестановками частей речи.

3) Случайно (или как можно ближе к случайному) выберите тип предложения. Возвращается шаблон с заполнителями для частей речи (n-v-n будет существительным-существительным-существительным)

3) Выберите слова произвольно в каждой части речевого ковша, чтобы встать на место заполнителей. Заполните их. (Пример выше может стать чем-то вроде автомобильного велосипеда.)

4) произвольно сканируйте каждый символ, решив, хотите ли вы заменить его либо похожим звучащим символом (или набором символов), либо похожим на него. Это самый сложный шаг в этой проблеме.

5) результирующий пароль будет похож на kaR @tebyCICle

6) смеются над юмористическими результатами, такими как выше, которые выглядят как "каратэ-велосипед"

Ответ 17

Я действительно люблю, чтобы увидеть, как кто-то реализует пароли с управляющими символами типа "<Ctrl>+N" или даже комбинированные символы, такие как "A+C" одновременно. Преобразование этого в некоторый бинарный эквивалент, IMHO, делает требования к паролю намного легче запоминать, быстрее набирать и сложнее взломать (МНОГИЕ другие комбинации для проверки).