Один из способов создать пароли, которые звучат как слова, - использовать цепочку Маркова. Цепочка Маркова с n-степенями - это в основном большой набор n-кортежей, которые появляются в вашем входном корпусе вместе с их частотой. Например, «aardvark» с цепью Маркова 2-й степени будет генерировать кортежи (a, a, 1), (a, r, 2), (r, d, 1), (d, v, 1) , (v, a, 1), (r, k, 1). При желании вы также можете включить «виртуальные» маркеры начальных и конечных слов.
Чтобы создать полезную цепочку markov для ваших целей, вы должны добавить большой массив данных на английском языке - их много, в том числе, например, Project Gutenburg, - для генерации набора записей, как описано выше. Для создания слов или предложений на естественном языке, которые, по крайней мере, в основном следуют правилам грамматики или композиции, обычно достаточно цепочки Маркова 3-й степени.
Затем, чтобы сгенерировать пароль, вы выбираете случайный «начальный» кортеж из набора, взвешенный по его частоте, и выводите первую букву. Затем многократно выбирайте случайным образом (снова взвешенный по частоте) «следующий» кортеж, то есть тот, который начинается с тех же букв, которыми заканчивается ваш текущий, и имеет только одну другую букву. Используя приведенный выше пример, предположим, что я начинаю с (a, a, 1) и выводю «a». Мой единственный следующий выбор - (a, r, 2), поэтому я вывожу еще один «a». Теперь я могу выбрать либо (r, d, 1), либо (r, k, 1), поэтому я выбираю один случайным образом в зависимости от частоты их появления. Предположим, я выбрал (r, k, 1) - я вывел 'r'. Этот процесс продолжается до тех пор, пока вы не достигнете маркера конца слова или не решите остановиться самостоятельно (поскольку большинство цепей Маркова образуют циклический граф, вы потенциально можете никогда не закончить генерацию, если не применяете искусственное ограничение длины).
На уровне слова (например, каждый элемент кортежа является словом), эта техника используется некоторыми «разговорными роботами» для генерации осмысленных бессмысленных предложений. Это также используется спаммерами, чтобы попытаться избежать спам-фильтров. На уровне букв, как указано выше, его можно использовать для создания бессмысленных слов, в данном случае для паролей.
Один недостаток: если ваш входной корпус не содержит ничего, кроме букв, и ваших выходных фраз, то они не будут соответствовать большинству требований «безопасного» пароля. Возможно, вы захотите применить некоторую постобработку, чтобы заменить некоторые символы числами или символами.