Neural Network and Password Cracking

Discussion in 'Беспроводные технологии/Wi-Fi/Wardriving' started by Petr Sitkin, 20 May 2020.

  1. Petr Sitkin

    Petr Sitkin Well-Known Member

    Joined:
    17 Dec 2015
    Messages:
    185
    Likes Received:
    1,638
    Reputations:
    3
    Нейросети в разрезе взлома паролей.

    Тема нейросетей небъятная. Постараюсь осветить моменты, которые можно применить ко всеми любимому делу.

    План действий (под отдельно взятое решение некоторые пункты могут быть изменены):
    1. Берем готовое решение (github..)
    2. В общем плане описываю работу нейронной сети которая используется в решении.
    3. Общий разбор решения.
    4. Параметры для тренировки модели.
    5. Анализ данных на выходе. Проверка на тестовом наборе хешей, добавление в статистику.
    6. Выходные данные + правила, статистика.
    7. Сравнение выходного словаря со словарем базовым+правила.
    8. Выводы, плюсы, минусы. Может для словарей проще использовать правила?
    9. Попытка улучшить решение путем добавления дополнительных слоев.

    Решил создать тему, и по мере возможности наполнять, а то так никогда не начну. Буду есть слона понемногу.

    Начнем с наиболее оптимального (на мой взгляд) решения: PassGAN

    1. PassGAN

    2. Как видно из названия, в основе решения лежит сеть GAN (Generative adversarial networks. Генеративно состязательная сеть)

    Генеративно-состязательная сеть (GAN)— алгоритм машинного обучения без учителя, построенный на комбинации из двух нейронных сетей, одна из которых (сеть G) генерирует образцы, а другая (сеть D) старается отличить правильные («подлинные») образцы от неправильных. Так как сети G и D имеют противоположные цели — создать образцы и отбраковать образцы — между ними возникает Антагонистическая игра. (Антагонистической игрой называется игра, в которой участвуют два или более игроков, выигрыши которых противоположны.)

    Принцип состязательности в сети GAN нередко описывается через метафоры. Например, генеративная сеть уподобляется фальшивомонетчику или подделывателю картин, а дискриминативная — эксперту который стремится распознать подделку.

    Обзор структуры GAN

    GAN состоит из двух частей:
    • Генератор учится генерировать правдоподобные данные.
    • Дискриминатор учится различать данные подделанные генератором от реальных данных. Дискриминатор наказывает генератор за получение неправдоподобных результатов.
    Когда начинается обучение, генератор выдает явно фальшивые данные, и дискриминатор быстро учится говорить, что это фальшивая информация:

    upload_2020-5-21_17-46-51.png

    В процессе обучения генератор становится ближе к получению выходных данных, которые могут обмануть дискриминатор:

    upload_2020-5-21_17-47-47.png

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

    upload_2020-5-21_17-49-30.png

    Вот картина всей системы:

    upload_2020-5-21_17-50-40.png

    И генератор, и дискриминатор являются нейронными сетями. Выход генератора подключен непосредственно к входу дискриминатора.

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

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


    Подробней:
    Дискриминатор

    Дискриминатор в GAN - это просто классификатор. Он пытается отличить реальные данные от данных, созданных генератором. Он может использовать любую сетевую архитектуру, соответствующую типу данных, которые он классифицирует.

    upload_2020-5-21_17-59-24.png
    Обратное распространение в обучении дискриминатора.

    Учебные данные дискриминатора

    Данные обучения дискриминатора получены из двух источников:

    1. Реальные экземпляры данных, такие как реальные изображения людей (в наше случае реально слитая бд пользователей). Дискриминатор использует эти примеры в качестве положительных примеров во время обучения.
    2. Ложные экземпляры данных, созданные генератором. Дискриминатор использует эти примеры в качестве негативных примеров во время обучения.

    На рисунке два поля «Sample» представляют эти два источника данных (real, fake), поступающих в дискриминатор. Во время обучения дискриминатора генератор не тренируется. Его веса остаются постоянными, в то время как он дает примеры для обучения дискриминатора.


    Обучение Дискриминатора

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

    Во время обучения дискриминатора:
    1. Дискриминатор классифицирует как реальные данные, так и ложные данные из генератора.
    2. Потеря дискриминатора (discriminator loss) наказывает дискриминатор (discriminator) за неправильную классификацию реального экземпляра как поддельного или поддельного экземпляра как реального.
    3. Дискриминатор обновляет свои веса посредством обратного распространения от потери дискриминатора через сеть дискриминатора.
    Функция обратного распространения корректирует каждый вес в правильном направлении, рассчитывая влияние веса на результат - как изменится результат при изменении веса

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

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

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

    Обучение генератора требует более тесной интеграции между генератором и дискриминатором, чем требует обучение дискриминатора. Часть GAN, которая обучает генератор, включает в себя:

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

    upload_2020-5-22_14-39-3.png
    Обратное распространение в обучении генератора

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

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

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


    Примечание: некоторые GAN используют неслучайный ввод для формирования вывода.


    Использование дискриминатора для обучения генератора

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

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

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

    Итак, мы тренируем генератор по следующей процедуре:

    1. Образец случайного шума.
    2. Создайте выходной сигнал генератора из дискретного случайного шума.
    3. Получить дискриминатором «Реальная» или «Поддельная» классификацию для выхода генератора.
    4. Рассчитать потери из классификации дискриминатора.
    5. Обратный путь через дискриминатор и генератор для получения градиентов.
    6. Используем градиенты, чтобы изменить только вес генератора.

    Это одна итерация обучения генератора.
    GAN Обучение

    Поскольку GAN содержит две отдельно обученные сети, ее алгоритм обучения должен учитывать две сложности:

    1. GAN должен манипулировать двумя различными типами обучения (генератор и дискриминатор).
    2. Конвергенцию GAN трудно определить.

    Переменная тренировка

    Генератор и дискриминатор имеют разные процессы обучения. Так, как же мы обучаем GAN в целом?

    Обучение ГАН проходит в чередующихся периодах:

    1. Дискриминатор тренируется в течение одной или нескольких эпох.
    2. Генератор тренируется в течение одной или нескольких эпох.
    3. Повторите шаги 1 и 2, чтобы продолжить обучение сетей генератора и дискриминатора.

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

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

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

    Конвергенция

    По мере того как генератор улучшается с обучением, производительность дискриминатора ухудшается, потому что дискриминатор не может легко определить разницу между реальным и фальшивым. Если генератор успешно работает, то дискриминатор имеет точность 50%. По сути, дискриминатор подбрасывает монету, чтобы сделать свой прогноз.

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

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

    Как вы фиксируете разницу между двумя распределениями в функциях потерь GAN?
    Этот вопрос является областью активных исследований, и было предложено много подходов. Примеры функии потерь minimax loss, Wasserstein loss, здесь я об этом упоминать не буду, можно ознакомиться самому.


    Одна функция потери или две?

    GAN может иметь две функции потерь: одну для обучения генератора и одну для обучения дискриминатора. Как две функции потерь могут работать вместе, чтобы отразить меру расстояния между распределениями вероятностей?

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

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

    3. Общий разбор решения PassGAN

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

    Инструменты угадывания паролей предоставляют ценный инструмент для выявления слабых паролей, особенно когда они хранятся в хешированном виде. Эффективность программного обеспечения для подбора паролей зависит от возможности быстрого тестирования большого количества наиболее вероятных паролей для каждого хэша пароля. Вместо исчерпывающей проверки всех возможных комбинаций символов, инструменты угадывания паролей используют слова из словарей и предыдущих утечек паролей в качестве возможных паролей. Современные инструменты для подбора пароля, такие как HashCat, John the Ripper и тд.

    Можно сделать этот подход еще на шаг вперед, определив эвристику для преобразования пароля, которая включает в себя комбинации нескольких слов (например, iloveyou123456), регистр смешанных букв (например, iLoVeyOu ) и позволяет говорить (например, il0v3you
    ). Эта эвристика в сочетании с марковскими моделями позволяет HashCat, John the Ripper.. генерировать большое количество новых весьма вероятных паролей.

    Хотя на практике эти эвристики достаточно успешны, они носят случайный характер и основаны на интуиции о том, как пользователи выбирают пароли, а не на основе принципиального анализа больших наборов паролей. По этой причине каждая техника в конечном итоге ограничивается захватом определенного подмножества пространства паролей, которое зависит от интуиции, стоящей за этой техникой. Кроме того, разработка и тестирование новых правил и эвристик - трудоемкая задача, требующая специальных знаний и, следовательно, ограниченная масштабируемость.
    Чтобы устранить эти недостатки, в этой статье предлагаю заменить угадывание паролей на основе правил, а также угадывание паролей на основе простых методов, управляемых данными, таких как модели Маркова, на новый подход, основанный на глубоком обучении. По своей сути идея состоит в обучении нейронных сетей автономно определять характеристики и структуры паролей и использовать эти знания для создания новых образцов, которые следуют тому же распределению. Мы предполагаем, что глубокие нейронные сети достаточно выразительны, чтобы охватить большое разнообразие свойств и структур, которые описывают большинство выбранных пользователем паролей; в то же время нейронные сети можно обучать без каких-либо априорных знаний или предположений о таких свойствах и структурах. Это резко контрастирует с современными подходами, такими как марковские модели и подходы, основанные на правилах (которые могут угадывать только те пароли, которые соответствуют доступным правилам). В результате выборки, генерируемые с использованием нейронной сети, не ограничиваются конкретным подмножеством пространства паролей. Вместо этого нейронные сети могут автономно кодировать широкий спектр знаний по подбору паролей, которые включают и превосходят то, что фиксируется в созданных человеком правилах и процессах генерации марковских паролей.
    Чтобы проверить эту гипотезу, в представляем PassGAN, новый подход для генерации парольных предположений, основанный на глубоком изучении и генерирующих состязательных сетях (GAN).

    GAN - это недавно представленные инструменты машинного обучения, предназначенные для оценки плотности в многомерных пространствах.

    GAN выполняют неявное генеративное моделирование, обучая архитектуру глубокой нейронной сети, которая получает простое случайное распределение (например, гауссово или равномерное), и генерируя выборки, которые следуют за распределением доступных данных. В некотором смысле они неявно моделируют x = F ^ (- 1) (s), где F ( x ) - накопительная функция плотности данных, а s - является равномерно распределенной случайной величиной .

    Для обучения генеративной структуры GAN используют игру в кошки-мышки, в которой существует глубокая генеративная сеть (G) пытается имитировать лежащее в основе распределение выборок, а дискриминационная глубокая нейронная сеть (D) пытается различить исходные обучающие выборки (то есть «истинные выборки») и выборки, сгенерированные G (то есть «поддельные выборки») , Эта состязательная процедура вынуждает D к утечке соответствующей информации для G, чтобы эффективно имитировать исходное распределение данных.

    PassGAN использует эту технику для генерации новых паролей. Мы обучаем D, используя список утечек паролей (реальных образцов) Поэтому на каждой итерации выходные данные PassGAN (поддельные образцы) становятся ближе к распределению паролей в исходной утечке и, следовательно, с большей вероятностью соответствуют паролям реальных пользователей. Насколько известно, эта работа является первой, которая использует GAN для этой цели.
    Взято с оригинальной статьи. https://arxiv.org/pdf/1709.00440.pdf

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

    Показываем, что правильно обученный GAN может генерировать высококачественные пароли. GAN для генерации паролей обучается на части набора данных RockYou и тестируется на двух разных наборах данных: (1) другая (отличная) часть набора данных RockYou и (2) набор данных с утечкой паролей из LinkedIn.

    В экспериментах смогли сопоставить 1 350 178 (43,6%) из 3 094 199 уникальных паролей из набора тестирования, состоящего из реальных пользовательских паролей из набора данных RockYou, и 10 478 322 (24,2%) из 43 354 871 паролей из набора данных LinkedIn. Чтобы проверить способность PassGAN создавать невидимые пароли, мы удалили из каждого набора данных тестирования те образцы паролей, которые присутствуют в обучающем наборе. В результате этой операции в тестовых наборах RockYou и LinkedIn, соответственно, осталось 1978367 и 40 593 536 уникальных подмножеств паролей. Из них PassGAN смог сопоставить 676 439 (34,6%) образцов в наборе данных RockYou и 8 878 284 (34,2%) образцов в LinkedIn.

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

    Мы показываем, что PassGAN конкурирует с современными правилами генерации паролей. Несмотря на то, что эти правила были специально настроены для наборов данных, используемых в нашей оценке, качество вывода PassGAN было сопоставимо с качеством правил для паролей.

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

    PassGAN конкурирует с современным уровнем техники в алгоритмах подбора пароля, основанных на нейронных сетях. Наши результаты показывают, что PassGAN по существу соответствует характеристикам Melicher et al. (указано как FLA в остальной части статьи). Хотя PassGAN достиг этого результата, используя большее количество паролей, он также правильно угадал пароли со структурами, которые FLA не смогла смоделировать.

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

    Мы считаем эту работу первым шагом к полностью автоматизированной генерации качественных парольных предположений. В настоящее время существует компромисс между преимуществами PassGAN (то есть выразительностью, универсальностью и возможностью автономного обучения на основе выборок) и его стоимостью с точки зрения размера выходных данных по сравнению с подходами на основе правил. Несмотря на то, что основанные на правилах инструменты угадывания паролей способны генерировать значительное количество совпадений за удивительно небольшое количество попыток, PassGAN должен вывести большее количество паролей для достижения того же результата. Мы утверждаем, что на практике это не проблема, потому что:
    (1) инструменты подбора пароля могут быть легко объединены таким образом, что как только быстрый инструмент (например, HashCat) исчерпал свои попытки, более всеобъемлющий (такой как PassGAN) может продолжать генерировать новые совпадения; Таким образом, генерация пароля может рассматриваться как автономный процесс.

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

    Мы утверждаем, что эта работа актуальна, важна и своевременна. Уместно , потому что, несмотря на альтернативы, мы видим мало доказательств того, что пароли будут заменены в ближайшее время. Важно, потому что установление пределов подбора паролей - и лучшее понимание того, насколько угаданы реальные пароли - поможет сделать системы на основе паролей более безопасными. И своевременно, потому что недавние утечки, содержащие сотни миллионов паролей предоставить злоумышленникам огромный источник данных для взлома систем, а системным администраторам - пересмотреть политики паролей.
    -------------------------------
    схема работы
    [​IMG]
    [​IMG]
    upload_2020-5-27_17-30-47.png
    -------------------------------
    При атаке с помощью подбора пароля злоумышленник пытается идентифицировать пароль одного или нескольких пользователей путем многократного тестирования нескольких возможных паролей. Атаки с помощью подбора пароля, вероятно, столь же стары, как и сами пароли, а более формальные исследования датируются 1979 годом.

    Два популярных современных средства подбора пароля - HashCat и john. Оба инструмента реализуют различные типы стратегий подбора пароля, включая: исчерпывающие атаки методом перебора; атаки по словарю; атаки на основе правил, которые заключаются в генерации парольных догадок из преобразований словарных слов; и атаки по марковской модели, в котором каждый символ пароля выбирается посредством стохастического процесса, который учитывает один или несколько предшествующих символов, и который обучается на словарях незашифрованных паролей. JTR и HashCat особенно эффективны при угадывании паролей. В частности, было несколько случаев, когда более 90% пароля, просочившегося из онлайн-сервисов, были успешно восстановлены.

    Марковские модели были впервые использованы для генерации парольных предположений Narayanan et al. Их подход использует правила паролей, определенные вручную, например, какая часть сгенерированных паролей состоит из букв и цифр. Эта методика была впоследствии улучшена Weir et al, который показал, как «выучить» эти правила из паролей. Эта ранняя работа была впоследствии расширена Ma et al. и Durmuth et al. Методы, основанные на марковских моделях, также использовались для реализации оценок надежности паролей в реальном времени и для оценки надежности паролей в базах данных в незашифрованном виде.

    Недавно Melicher et al. представил FLA, метод подбора пароля на основе периодических нейронных сетей. С помощью этой техники нейронная сеть обучается с использованием паролей, полученных с нескольких веб-сайтов. Во время генерации пароля нейронная сеть выводит один символ пароля за раз. Каждый новый символ (включая специальный символ конца пароля) выбирается на основе его вероятности, учитывая текущее состояние вывода, в том, что по сути является марковским процессом. (Это свойство было использовано в главным образом для оценки надежности пароля в реальном времени.) Основная цель Melicher et al. с FLA обеспечивает быструю и точную оценку надежности пароля, сохраняя при этом максимально легкую модель и без ущерба для точности. Таким образом, при наличии обученной модели FLA можно подать набор паролей в модель и извлечь в качестве выходного файла файл, содержащий 6 полей, организованных следующим образом:
    (1) пароль,
    (2) вероятность этого пароля,
    (3) предполагаемое число выходных предположений, т. е. надежность этого пароля,
    (4) стандартное отклонение рандомизированного испытания для этого пароля (в единицах количества предположений),
    (5) количество измерений для этого пароля и
    (6) расчетный доверительный интервал для числа догадок (в единицах количества догадок).

    Оценка показывает, что их методика превосходит марковские модели и правила составления паролей, обычно используемые в JTR и HashCat, при тестировании большого количества предположений пароля (в диапазоне от 10^10 до 10^25 ).
    С точки зрения выразительности, мы утверждаем, что различия между вероятностями вывода FLA и PassGAN обусловлены марковской структурой процесса генерации пароля в FLA. Из-за этого свойства любая характеристика пароля, не охваченная в пределах n -граммы, может не кодироваться FLA. Например, если значимое подмножество 10-символьных паролей строится как объединение двух слов (например, MusicMusic), любой марковский процесс с n ≤ 5 не сможет правильно отразить это поведение. С другой стороны, при достаточном количестве примеров нейронная сеть, используемая в PassGAN, сможет изучить это свойство. В результате, в то время как FLA присвоила паролю pookypooky вероятность p ≈ 10^ - 33 (с предполагаемым числом попыток угадать около 10^29 ), это было угадано после примерно 10^8 попыток PassGAN.

    upload_2020-5-27_16-34-59.png

    Представление одного компонента остаточного блока составляющий PassGAN

    4. Параметры для тренировки модели.

    перевод статьи ниже, сам я использовал немного другие параметры, почему? - опишу

    Чтобы использовать способность GAN эффективно оценивать распределение паролей из обучающего набора, экспериментировали с различными параметрами. В этом разделе сообщаем о нашем выборе конкретной архитектуры GAN и гиперпараметров.
    Мы создали PassGAN с использованием улучшенного обучения GANS Вассерштейна (IWGAN) Gulrajani et al. Реализация IWGAN, использованная в этой статье, использует оптимизатор ADAM для минимизации ошибок обучения.

    Следующие гиперпараметры характеризуют нашу модель:

    Batch size (Размер пакета), который представляет количество паролей из обучающего набора, которые распространяются через GAN на каждом шаге оптимизатора. "Мы создали нашу модель с размером партии 64."

    Number of iterations (Число итераций), которое указывает, сколько раз GAN вызывает свой шаг вперед и шаг обратного распространения. В каждой итерации GAN выполняет одну итерацию генератора и одну или несколько итераций дискриминатора. Мы обучили GAN, используя различное количество итераций, и в итоге остановились на 199 000 итераций, поскольку дальнейшие итерации приводили к уменьшению количества совпадений.

    Number of discriminator iterations per generator iteration (Число итераций дискриминатора на одну итерацию генератора), которое указывает, сколько итераций дискриминатор выполняет в каждой итерации GAN. Количество итераций дискриминатора на генеративную итерацию было установлено равным 10, что является значением по умолчанию, используемым IWGAN.

    Model dimensionality (Размерность модели), которая представляет количество измерений для каждого сверточного слоя. Мы экспериментировали с использованием 5 остаточных слоев как для генератора, так и для дискриминатора, причем каждый из слоев в обеих глубоких нейронных сетях имел 128 измерений.

    Gradient penalty coefficient(λ) (Коэффициент штрафа градиента (λ)), который определяет штраф, применяемый к норме градиента дискриминатора относительно его входных данных. Увеличение этого параметра приводит к более стабильной тренировке. В наших экспериментах мы установили значение штрафа градиента до 10.

    Output sequence length (Длина выходной последовательности), которая указывает максимальную длину строк, генерируемых генератором (G). Мы изменили длину последовательности, генерируемой GAN, с 32 символов (длина по умолчанию для IWGAN) до 10 символов, чтобы соответствовать максимальной длине паролей, используемых во время обучения.

    Size of the input noise vector (seed) (Размер вектора входного шума (начального числа)), который определяет, сколько случайных чисел из нормального распределения подается в качестве входных данных в G для генерации выборок. Мы установили этот размер на 128 чисел с плавающей точкой.

    Maximum number of examples (Максимальное количество примеров), которое представляет максимальное количество обучающих элементов (паролей, в случае PassGAN) для загрузки. Максимальное количество примеров, загружаемых GAN, было установлено равным размеру всего набора обучающих данных.

    Adam optimizer’s hyper-parameters (Гипер-параметры оптимизатора Adam):
    - Скорость обучения, т. е. Как быстро корректируются веса модели
    - Коэффициент β1, который указывает скорость убывания скользящего среднего градиента.
    - Коэффициент β2, который указывает скорость убывания скользящего среднего квадрата градиента. Коэффициенты β1 и β2 оптимизатора Adam были установлены на 0,5 и 0,9 соответственно, а скорость обучения составляла 10^−4. Эти параметры являются значениями по умолчанию.

    В наших экспериментах мы использовали 5 остаточных блоков в каждой модели.
    При обучении глубокой нейронной сети изначально ошибка обучения уменьшается с увеличением количества слоев. Однако, после достижения определенного количества слоев, ошибка обучения снова начинает увеличиваться. Для решения этой проблемы He et al. [31] представил ResNet. В отличие от других глубоких нейронных сетей, ResNet включает «быстрое соединение» между слоями. Это можно рассматривать как обертку для этих слоев, и она реализована как функция идентификации. Благодаря использованию нескольких последовательных остаточных блоков ResNet последовательно уменьшает ошибку обучения по мере увеличения количества слоев. Остаточные блоки в PassGAN состоят из двух одномерных сверточных слоев, связанных друг с другом с помощью функций активации выпрямленных линейных единиц (ReLU) Вход блока является функцией тождества и увеличивается на 0,3 · выход сверточного слои, чтобы произвести вывод блока. На рисунку в разделе "Угадывание пароля" это видно.

    Можно убавить learning_rate (10^−5 -6) для большей стабильности
    так-как меня интересует генерация паролей длинной не только до 10 символов, а и более того, Output sequence length = 15
    Тестирование на летнем словаре 3wifi в процессе.

    Важной частью есть подготовка входного словаря. желательно очистить от цифровых паролей.(8-9-10) Зачастую процент числовых паролей довольно большой. Что влияет на тренировку и выходные данные.

    1. Для увеличение стабильности изменяем параметр learning_rate, по дефолту стоит 1e-4.
    (стабильность увеличивается, но для достижения подобного результата понадобится большее количество итераций обучения. тут в зависимости от целей.)
    2. --batch-size - если хотте тренировать большой словарь (>100mb), но на видеокарте 3-4гб памяти только, уменьшаем этот параметр до (32 -16 -8) пока не запустит.
    3. --critic-iters=10 --lambda=15 - на практике это finetuning, поначалу можно не менять.

    Наглядный пример:
    Изменим только learning_rate:

    Тест1: learning_rate=1e-5
    Тест2: learning_rate=1e-4
    Тест3: learning_rate=1e-3

    Пример вывода на 1000-ом шаге обучения: (слева направо ^-5 ^-4 ^-3)
    upload_2020-6-5_12-14-39.png

    Но у быстрого обучения есть свои минусы. стабильность.

    5. Анализ данных на выходе. Проверка на тестовом наборе хешей, добавление в статистику.
    ------------------------------

    В общем потратили в районе 4 суток на тренировку модели на основе 3wifi. Переобучение начал наблюдать уже после 130000 итераций. К сожалению вырубили свет, и графики побились. Но сама модель сохранилась, так-как сейвится каждые 5000 шагов. (learning_rate=1e-5 Batch size = 128)

    Много параметров перепробовал. N-ый заход уже делаю на почищенном словаре (без чисел) и (learning_rate=1e-4 Batch size = 128)

    Графики по моей последней настройке:


    [​IMG]
    [​IMG]

    Наблюдаем весьма стабильное обучение. К чему я и шел.

    Пример вывода на 165000 итерации, эту модель я планирую спользовать в дальнейшем для генерации словаря и тестировании на реальном наборе.
    Code:
    gvst86588``````
    Meeuna038``````
    rohntlonass````
    M2450977```````
    tadietria1982``
    EX4aa5eAYv`````
    afvistoriter16`
    sferlmays1960``
    adj1565133778``
    561757783H`````
    Khfj1185```````
    NKJAea4ALA`````
    K]113431```````
    abrp@12345688``
    vffmhbdj6117833
    punam181123````
    7Oganinz9893```
    PXCBu6XeUv`````
    17051108```````
    stooo181```````
    ab1cdr3ufd`````
    tinav2014``````
    Einotot8941````
    XHJFAADSE9LLL``
    dhay71382789```
    20@-smll2306```
    encris03```````
    YwuELfdJH40f```
    BAOIONIS2006007
    FCED@HA8HOFI8Y`
    ayubunies667.03
    B004PD5KLLTCX``
    gevidzam12343``
    pgce6wgw```````
    as626107```````
    Keacan1988`````
    Ap69de51g``````
    052467108411```
    q16189926vicoe`
    gbV$MDTH4D8PYK`
    icsotepi```````
    Y54MEHYJ```````
    HaldNicperA2017
    Korseby=owl````
    LNCeAEE3```````
    B054C4D67B`````
    53lymunel``````
    35558580ova````
    Gp88d8ydycsy```
    91213246```````
    26986199wctenmo
    huan8484```````
    bally2013``````
    uApYKAX4```````
    Crelil1892`````
    CY2Z4882XI8SY/`
    mahidef78``````
    MUES1987```````
    AJoFIALE08`````
    Gilgoavy```````
    nefavelhay306``
    00ED2DDDEF86E``
    Mano0987```````
    h5009858```````
    hK6ZxKHX```````
    joorvatiena````
    n9***3300080500
    bostani1996````
    EEF6965W96`````
    meandin1```````
    Sudo2153```````
    ZonaOvus#2113``
    67119701282@```
    rcrl110405`````
    30623208120````
    dausynesa``````
    soja9210```````
    )FMAacuu6F3v```
    CtoteNSShm`````
    N255JEWM```````
    U65218dn```````
    FardissSirfi```
    mouco1404``````
    Ge21Vfrw```````
    AS9LSS4H7GUBL``
    eC7J743LYYL````
    lansolfiruce61`
    gir23614042017`
    samiiha3099````
    INIIN1773``````
    86mmtt7567`````
    W9180``````````
    Sushie81```````
    humitheole53z``
    vollonene15````
    AJEWIWA\IA2019@
    oWiled\asmo````
    3CF7E3F25BFBE``
    Cuirlarna``````
    850688008def```
    
    Некоторые пароли весьма неплохи, прям оптимистический настрой нагрянул. Посмотрим что будет на реальном тестировании.
    Не будем придумывать велосипед. Пойдем проверенный способом:

    1. Берем модель которую натренировали выше.
    2. Генерируем пароли (внимательный зритель уже знает, что на вход при генерации подается шум)

    Как минимум 7 заходов:
    10^4
    10^5
    10^6
    10^7
    10^8
    10^9
    10^10

    3. Очищаем от повторов - записываем количество уникальны паролей (для примера при 10^4 будет згенерировано 10000 паролей и уникальных из них будет скажем 7856, принцип вы поняли. и так далее.)
    4. находим количество паролей которые нашлись в нашом базовом словаре для тренировки. % от общего числа


    Еще нужно было бы сгенерировать словари для контрольных точек, для выявления оптимальных, но это занимает немало времени, а расхождение там порядка 0-3%. пропустил. Может как-то займусь.


    upload_2020-6-23_22-30-33.png

    Думал по поводу слишком большого количества дефолтных паролей, из-за чего алгоритму будет трудновато, и самое главное - это может повлиять на генерацию. Не зря тестирование в публикации было именно на rockyou.. И, процент совпадений считал от общего словаря (так-как не выделил 15-20% тестовый набор), по сути последний столбец не показательно. Для теста еще взял подобный WiFiMap_Password словарь, там совпадений в процентном соотношении больше, само собой словарь почищенный и не содержит паролей от train 3wifi.


    Сейчас переработал метод немного и делаю по уму. Обновлю как-то.
    Доступ к архиву: PassGAN

    Против нашего метода играют 173 100 000 MD5 хешей. (немного почищены)

    Что по факту :

    10^9 : 0
    8008 паролей найдено. Без использования правил, гибридок и тд.
    10^10 : 0 18479 паролей найдено. Без использования правил, гибридок и тд.
    3Wifi на сухую без правил и тд. : 0 9942

    6. Выходные данные + правила, статистика.

    best64.rule:
    10^4 : 3 641 (словарь + best64) (0.00%)
    10^5 : 17 436 (словарь + best64) (0.01%)
    10^6 : 67 795 (словарь + best64) (0.04%)
    10^7 : 107 383 (словарь + best64) (0.06%)
    10^8 : 132 614 (словарь + best64) (0.08%)
    10^9 : 172 206 (словарь + best64) (0.10%)
    10^10 : 217 940 (словарь + best64) (0.125%)


    best64:
    10^10 : 134 (словарь + best64) 20m

    d3ad0ne:
    10^9: 2264 (словарь + d3ad0ne) 7h 30m

    dive:
    10^9: 5674 (словарь + dive) 19h 15m

    InsidePro-HashManager:
    10^7: 10 (словарь + InsidePro-HashManager)
    10^8: 102 (словарь + InsidePro-HashManager)
    10^10: 6212 (словарь + InsidePro-HashManager) 6h

    InsidePro-PasswordsPro:
    10^10: 4439 (словарь + InsidePro-PasswordsPro) 5h 7min

    rockyou-30000:
    10^9: 1832 (словарь + rockyou-30000) 7h 15min

    T0XlCv1:
    10^10: 10754 (словарь + T0XlCv1) 19h 11min

    7. Сравнение выходного словаря со словарем базовым+правила.

    3wifi + best64 = 66
    3wifi + InsidePro-PasswordsPro = 100
    3wifi + T0XlCv1 = 98
    3wifi + d3ad0ne = 130
    3wifi
    + rockyou-30000 = 108
    3wifi
    + InsidePro-HashManager = 105

    3wifi + all(all in hashcat rule folder) = 797
    3wifi + KoreLogic (without KoreLogicRulesAppend6NumbersSpecial) = 2704
    Сравнение только в разрезе словаря + правила. Тему гибридок, комбинаций - не сейчас. (но по предварительному тестированию если не смотреть на меньшую скорость при атаке комбинированой - GAN словарь показывает себя на порядок лучше..)

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

    Словарь (базовый) + правила по результатам далеко не так эффективны как словарь созданный нейросетями на основе базового + правила. Иногда перевес в 10-ки раз.

    Протестировано несколько наборов правил. На удивление со словарем 3wifi (на основе GAN) себя очень хорошо показал T0XlCv1. 10^10: 10754

    Что касается использования только базового словаря 3wifi - даже набором из всевозможных правил из различных источников он с трудом подошел к 2500. И дальше наращивать правила уже не эффективно. А что касается GAN - при хорошем железе (gpu в основном) - можно создавать словари большей размерности и брать более специфические правила. И упор при наличии нескольких 1080ti можно увидеть только через месяц. Что дает некое расширение границ для взлома, когда уже практически "все" испробовал.

    8. Выводы, плюсы, минусы. Может для словарей проще использовать правила?

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

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

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

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

    Если есть какие-то мысли, предложения по настройке, улучшению, словарям для тренировки - с радостью выслушаю.
     
    #1 Petr Sitkin, 20 May 2020
    Last edited: 15 Jul 2020
    uzeerpc, CRACK211, fgh_2007 and 7 others like this.
  2. hydra

    hydra Elder - Старейшина

    Joined:
    24 Jul 2015
    Messages:
    3,369
    Likes Received:
    36,835
    Reputations:
    73
    Интересная тема.Кто-нибудь пробовал?Если не ошибаюсь нужна CUDA и дополнительный модуль для питона?
     
  3. Petr Sitkin

    Petr Sitkin Well-Known Member

    Joined:
    17 Dec 2015
    Messages:
    185
    Likes Received:
    1,638
    Reputations:
    3
    Нужно установить tensorflow (реализации которую я рассматриваю базируется на нем). Если есть видеокарта - tensorflow_gpu, нет - tensorflow_cpu (для тренировки моделей cpu не рекомендую. долго) Статтей по установке куча. (некоторые способы позволяют запустить все это без CUDA). Кто заинтересован - советую заводить все через среду Anaconda. (https://www.anaconda.com/products/individual) Плюсы - создает виртуальную среду, не захламляет систему, потом можно environment легко удалить без лишних телодвижений.

    + не забываем о версии, так-как на последнем tensorflow 2.0 не заведется.
    tensorflow==1.4.1
    tensorflow-gpu==1.4.1
    matplotlib==2.1.1
    numpy==1.13.3
    посмотрим как пойдет, есть некоторые идеи по plug and play версии.
     
    #3 Petr Sitkin, 7 Jun 2020
    Last edited: 8 Jun 2020
    CRACK211 and hydra like this.
  4. Petr Sitkin

    Petr Sitkin Well-Known Member

    Joined:
    17 Dec 2015
    Messages:
    185
    Likes Received:
    1,638
    Reputations:
    3
    Результаты по 3wifi (кто-то скажет: "да, можно было лучше.." если кто сделает - буду благодарен)
    Небольшой словарик под WPA в архиве, почищен. (real md5). мало, но что есть)
    Остальное - материалы из тестирования (примеры вывода только до 10^6).
    Пароль от архива - в первом посте. (для закрепления материала)

    https://www.mediafire.com/file/7bpbp763zud2afi/PassGAN_3wifi.rar/file
     
  5. hydra

    hydra Elder - Старейшина

    Joined:
    24 Jul 2015
    Messages:
    3,369
    Likes Received:
    36,835
    Reputations:
    73
    В гитхабе есть версия PassGAN для python3 https://github.com/d4ichi/PassGAN
    Кому интересно,лучше собирайте сами.Под свой процессор.Начиная со сборок tensorflow-1.6, они все собраны с AVX и на старых процессорах не запустятся.
    Собрал версию Tensorflow-2.2.3 (cuda-10.1 cudnn-7.6.4) (bazel-3.1.0 gcc-7.5.0 python-3.5.2) С gcc-5.4.0 ошибка.Возможно потребуется (numpy keras_preprocessing)
    Как советует ТС,во избежание всяких косяков,лучше запускайте это всё в виртуальном окружении.
    Я использую virtualenv.
     
    #5 hydra, 21 Jul 2020
    Last edited: 22 Jul 2020
    4Fun and Petr Sitkin like this.
  6. Petr Sitkin

    Petr Sitkin Well-Known Member

    Joined:
    17 Dec 2015
    Messages:
    185
    Likes Received:
    1,638
    Reputations:
    3
    там по дефолту стоит 200 000. сохранение каждые 5000
    все настроки по умолчанию можно подсмотреть в train.py
    def parse_args():
    parser = argparse.ArgumentParser()

    parser.add_argument('--training-data', '-i',
    default='data/train.txt',
    dest='training_data',
    help='Path to training data file (one password per line) (default: data/train.txt)')

    parser.add_argument('--output-dir', '-o',
    required=True,
    dest='output_dir',
    help='Output directory. If directory doesn\'t exist it will be created.')

    parser.add_argument('--save-every', '-s',
    type=int,
    default=5000,
    dest='save_every',
    help='Save model checkpoints after this many iterations (default: 5000)')

    parser.add_argument('--iters', '-n',
    type=int,
    default=200000,
    dest='iters',
    help='The number of training iterations (default: 200000)')

    parser.add_argument('--batch-size', '-b',
    type=int,
    default=128,
    dest='batch_size',
    help='Batch size (default: 64).')

    parser.add_argument('--seq-length', '-l',
    type=int,
    default=16,
    dest='seq_length',
    help='The maximum password length (default: 10)')

    parser.add_argument('--layer-dim', '-d',
    type=int,
    default=256,
    dest='layer_dim',
    help='The hidden layer dimensionality for the generator and discriminator (default: 128)')

    parser.add_argument('--critic-iters', '-c',
    type=int,
    default=10,
    dest='critic_iters',
    help='The number of discriminator weight updates per generator update (default: 10)')

    parser.add_argument('--lambda', '-p',
    type=int,
    default=10,
    dest='lamb',
    help='The gradient penalty lambda hyperparameter (default: 10)')

    return parser.parse_args()
    По остановке обучения - смотрю на графики тренировки, иногда прерываю и после 40 000 итераций. Это в зависимости от задачи.

    в том же файле train.py
    gen_train_op = tf.train.AdamOptimizer(learning_rate=0.0001, beta1=0.5, beta2=0.9).minimize(gen_cost, var_list=gen_params)
    disc_train_op = tf.train.AdamOptimizer(learning_rate=0.0003, beta1=0.5, beta2=0.9).minimize(disc_cost, var_list=disc_params)
     
    #6 Petr Sitkin, 22 Jul 2020
    Last edited: 22 Jul 2020
    hydra likes this.
  7. Petr Sitkin

    Petr Sitkin Well-Known Member

    Joined:
    17 Dec 2015
    Messages:
    185
    Likes Received:
    1,638
    Reputations:
    3
    Вопрос, может есть кто-то, кто мог бы прояснить пару деталей по архитектуре нейросети? (для улучшения решения, наработки есть) Не хватает опытного взгляда.
     
  8. hydra

    hydra Elder - Старейшина

    Joined:
    24 Jul 2015
    Messages:
    3,369
    Likes Received:
    36,835
    Reputations:
    73
    Благодарю.А то я чё-то не дотумкал туда глянуть.)
    Уже понял.Только что завершился на 200000.
    У меня винт на котором всё это работало,сыпаться начинает.Вот оно и забуксовало.И выбросить жалко.)
    1мб входного файла при -b 128 -l 13 остальное по дефолту,тренеровался ровно сутки.Завтра сгенерю с каждой контрольной точки по 1000000 строк.Посмотрим что с этого выйдет.

    Если я правильно понимаю,с конрольных точек можно генерировать сколь угодно строк?
     
    USER_X likes this.
  9. hydra

    hydra Elder - Старейшина

    Joined:
    24 Jul 2015
    Messages:
    3,369
    Likes Received:
    36,835
    Reputations:
    73
    Попробуй связаться с разрабами passGAN.
     
  10. Petr Sitkin

    Petr Sitkin Well-Known Member

    Joined:
    17 Dec 2015
    Messages:
    185
    Likes Received:
    1,638
    Reputations:
    3
    все верно. Там подается шум на вход и поехало..
    Не уверен что они в курсе, так как при изучении узнал - что они скопировали один в один архитектуру и большую половину кода с другой работы. Тоже связаной с генерацией текста. (та и долго будет)

    //////////
    Добавлю, очищайте от всех цифровых паролей, как показали тесты - от них только хуже для нормальной тренировки и генерации.
     
    #10 Petr Sitkin, 23 Jul 2020
    Last edited: 23 Jul 2020
  11. hydra

    hydra Elder - Старейшина

    Joined:
    24 Jul 2015
    Messages:
    3,369
    Likes Received:
    36,835
    Reputations:
    73
    В качестве исходного словаря,был взят словарь vkdump.Удалены цифровые пароли и пароли со спецсимволами.
    Длинна строк min 8 max 13.Рандомная сортировка.Размер 378 мб.С него взята часть размером 1мб в качестве входного словаря для тренировки.
    На тренировку 1мб с параметрами -b 128 -l 13 (остальное по дефолту) ушло порядка 24 часов.
    Затем с каждой контрольной точки было сгенерено по 10^6 строк,длинной от 8 до 13.В результате получился словарь размером 412мб почищен от дублей сам и относительно исходного словаря.Для теста были взяты left хэшлисты с Hashes.org

    Результаты тестов:

    gan MD5
    OneRuleToRuleThemAll 26
    d3ad0ne 4
    rockyou-30000 6
    dive 10

    gan MD5x2
    OneRuleToRuleThemAll 11502
    d3ad0ne 605
    rockyou-30000 74
    dive 11722

    vkmod MD5
    OneRuleToRuleThemAll 67
    d3ad0ne 3
    rockyou-30000 14
    dive 39

    vkmod MD5x2
    OneRuleToRuleThemAll 12913
    d3ad0ne 506
    rockyou-30000 1801
    dive 12043
     
    #11 hydra, 23 Jul 2020
    Last edited: 23 Jul 2020
    Petr Sitkin likes this.
  12. hydra

    hydra Elder - Старейшина

    Joined:
    24 Jul 2015
    Messages:
    3,369
    Likes Received:
    36,835
    Reputations:
    73
    Я только недавно заметил,что Tensorflow использует только одну видеокарту,хотя видит все.Это так?
     
    #12 hydra, 23 Jul 2020
    Last edited: 23 Jul 2020
  13. Petr Sitkin

    Petr Sitkin Well-Known Member

    Joined:
    17 Dec 2015
    Messages:
    185
    Likes Received:
    1,638
    Reputations:
    3
    Видит он все, но для работы параллельно нужно дорабатывать код. Видел некоторые готовые решения, где-то это все быстро пилится, но протестировать не на чем.

    //на таких малых размерах нет смысла, генерируй минимум 5-10gb, (можно не с каждой точки, а +- после 120 000. сам генерил по 10 9, 10 10. (из первой статьи - суммарно сгенерировал 300gb)
     
    #13 Petr Sitkin, 23 Jul 2020
    Last edited: 23 Jul 2020
    hydra likes this.
  14. hydra

    hydra Elder - Старейшина

    Joined:
    24 Jul 2015
    Messages:
    3,369
    Likes Received:
    36,835
    Reputations:
    73
    Может мне попробовать?Код тензора нужно патчить?
     
  15. Petr Sitkin

    Petr Sitkin Well-Known Member

    Joined:
    17 Dec 2015
    Messages:
    185
    Likes Received:
    1,638
    Reputations:
    3
    скорее всего ничего патчить не нужно, тут постал вопрос как это все красиво запараллелить. (при тренировке нескольких разных моделей вижу простое решение - запустить нужное количество сессий и выбирать нужную карту).
    Но для одной модели на нескольких картах - точно по коду не отвечу. Копал бы в сторону существующих реализаций: https://github.com/timsainb/Tensorflow-MultiGPU-VAE-GAN
     
    hydra likes this.
  16. hydra

    hydra Elder - Старейшина

    Joined:
    24 Jul 2015
    Messages:
    3,369
    Likes Received:
    36,835
    Reputations:
    73
    Тоже вариант.Есть опции для этого?Или при старте он будет использовать другое устройство,так как одно уже занято?
     
    #16 hydra, 23 Jul 2020
    Last edited: 23 Jul 2020
  17. Petr Sitkin

    Petr Sitkin Well-Known Member

    Joined:
    17 Dec 2015
    Messages:
    185
    Likes Received:
    1,638
    Reputations:
    3
    проверить не смогу, но предположу:
    upload_2020-7-23_15-48-33.png
    добавить : перед with tf. Session что-то типа
    with tf.device("/gpu:0"):
    # Setup operations
    и там номер карты. И скорее всего нужно будет клонировать environment
    https://databricks.com/tensorflow/using-a-gpu
    https://stackoverflow.com/questions/40069883/how-to-set-specific-gpu-in-tensorflow
     

    Attached Files:

    hydra likes this.
  18. hydra

    hydra Elder - Старейшина

    Joined:
    24 Jul 2015
    Messages:
    3,369
    Likes Received:
    36,835
    Reputations:
    73
    Вот так работает:
    os.environ["CUDA_VISIBLE_DEVICES"]="0"
    os.environ["CUDA_VISIBLE_DEVICES"]="1"
     
    #18 hydra, 23 Jul 2020
    Last edited: 23 Jul 2020
    Petr Sitkin likes this.
  19. hydra

    hydra Elder - Старейшина

    Joined:
    24 Jul 2015
    Messages:
    3,369
    Likes Received:
    36,835
    Reputations:
    73
    Сгенерил ещё один словарь из 200000 контрольной точки,но уже 10^8 строк.984мб
    Правила: d3ad0ne dive OneRuleToRuleThemAll rockyou-30000
    В качестве оппонента взят примерно равный по характеристикам словарь Hashkiller 900Мб

    gan 23927 Общий результат первого теста.
    gan200000 11845 При большем размере,выхлоп уже меньше.Возможно не имеет смыла раздувать большой объём с 1 контрольной точки.
    Всего с обоих: 35772 Общий размер словарей 1.4Гб Без дублей относительно друг друга.

    hashkiller 37664

    С учётом того,что это мой первый опыт работы с данным софтом и параметры тренировки были взяты от фонаря,считаю выхлоп пассгана очень неплохим.Учитывая тот факт,что тренерован он был всего на 1мб входных данных.
    Для нахождения более оптимальных параметров тренинга и генерации,нужно больше участников.Тема интересная,но отнимает кучу времени.
    Благодарю ТС за помощь.
     
    Petr Sitkin likes this.
  20. Petr Sitkin

    Petr Sitkin Well-Known Member

    Joined:
    17 Dec 2015
    Messages:
    185
    Likes Received:
    1,638
    Reputations:
    3
    1мб входных данных, как для знакомства дал нереально хорошие результаты (как по мне). (от 50 до 500мб словарь тренировочный - идеально почищенный - топчик)
    П.С если будет ругаться на память, из-за большого словаря - уменьшай --batch-size.
    По времени согласен - очень много уходит.
    По мере тренировок - буду добавлять удачные модели, словари.