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

Я был взволнован, увидев выпуск вордлиста RockYou2021, но после загрузки 100 ГБ паролей я понял, что это слишком много для вордлиста, используемого для взлома одного пароля. Было бы разумно выполнить какие-то задачи предварительной обработки, т.е. удалить дубликаты или отсортировать их по вероятности использования. Попытка удалить дубликаты с помощью ядра Linux, например sort -u utils, заняла так много времени, что я решил прекратить это. Даже команде Instant wc -l требуется несколько секунд, чтобы подсчитать количество строк. Задача Big Data была принята! И правильным инструментом для решения этой проблемы стал Apache Spark.

Первая часть преобразований включает в себя следующие шаги (код для любопытных):

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

Вторая часть включала в себя обучение классификатора паролей «вероятно русский» по следующим этапам:

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

3. Вывод вероятности пароля был сделан по файлу, полученному из первой части.

4. Пароли отсортированы по вероятности (опять же проблема больших данных, код).

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

Давайте посмотрим на результаты.

Здесь мы видим крошечную часть нашего словаря с общеупотребительным русским именем — Влад (неофициально Владик). Или вот примеры с названием «jktymrf» «Оленька», формой слова «Ольга», набранной на непереключаемой клавиатуре. Список выглядит довольно скучно, но, похоже, мы достигли цели — сконцентрировали русские пароли в 100 ГБ всевозможных паролей.

Вот так, народ! Пожалуйста, обращайтесь с любыми вопросами в комментарии. Спасибо за внимание!