Фонетически запоминающиеся алгоритмы генерации паролей - PullRequest
48 голосов
/ 09 марта 2009

Фон

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

Вопрос

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

Критерии

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

Ресурсы

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

Обновление

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

буквы * +1036 * A - C * +1039 * - C - L * тысяча сорок три * - * +1044 * I - M - O - P «поток», и они оказываются два обычные слова вместе взятые ( Акклимат и Швабра ). В дальнейшем, когда пользователь произносит эти буквы, или говорит их как слово, это актуально слово для них. Легко запомнить, но трудно взломать (атака по словарю, очевидно).

Этот вопрос состоит из двух частей:

  1. Создание паролей из букв, которые звучат одинаково (с использованием аллитерации) или
  2. Создайте пароли, которые объединяют общие слова аналогичным образом, чтобы создать третий набор букв, которого нет в словаре.

Ответы [ 17 ]

30 голосов
/ 09 марта 2009

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

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

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

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

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

11 голосов
/ 11 марта 2009

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

ahmouryleg
thasylecta
tronicatic
terstabble

Я также перенес код на python: http://pastebin.com/f6a10de7b

11 голосов
/ 09 марта 2009

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

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

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

8 голосов
/ 09 марта 2009

Через много лет я решил использовать первую букву слов в парольной фразе. Взломать невозможно, универсален по длине и ограничениям типа «у вас должна быть цифра», и трудно ошибиться.

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

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

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

6 голосов
/ 11 марта 2009

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

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

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

5 голосов
/ 09 марта 2009

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

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

4 голосов
/ 09 марта 2009

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

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

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

3 голосов
/ 09 марта 2009

Идея «ключевой фразы» состоит в том, чтобы взять фразу и написать первые буквы каждого слова в фразе. Э.Г.

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

Становится

asihe-tsoc

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

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


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

3 голосов
/ 09 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...