Сделал тест по конрольным точкам.Заняло более 3 суток.На этот раз увеличил диапазон для обучения до 2мб новых данных из того же vkmod. Параметры train: learning_rate=1e-5 -b 64 lmin 8 lmax 14 -n 200000. С каждой контрольной точки,генерировал такое же количество строк как vkmod. Видно как снижается эффективность ближе к началу. Тест не совсем полный,но уже понятно,что начальные конторльные точки менее эффективны. Как писалось ранее,параметр -n (количество итерайций) увеличивать более 200000 нет особого смысла.Возможно этот параметр следует убавить.Что сэкономит время. Но нужно проводить не один подбный тест.И тогда станет ясно,насколько можно снизить -n. -c (--critic-iters) Возможно стоит поиграться.Иногда и finetuning даёт неожиданные результаты.Пока не пробовал. Конечно же нужно увеличивать входной диапазон.Тоесть тренеровать нужно словарь гораздо большего размера. При этом нужна очень хорошая выборка с разных словарей а не с одного.Нужна максимально возможная разнообразность входных данных.Что неизбежно приведёт к довольно большому объёму. Ну как и писал ТС выше,до 500мб возможно будет оптимально.Но время обучения.... Возможно всё таки стоит подмешивать цифры.Хоть те же даты в 4 6 8 значных форматах.Это не много,но не известно как это будет обрабатываться. Будут ли например они комбинироваться с другими строками? Тут бы по хорошему, генерить словари коту в stdin, но скорость генерации так низка,что ничего не выходит.Генер даже одну видяху не может прокормить.Даже с правилами. Кот жалуется на слишком медленный поток данных. А было бы не плохо,если бы это работало.Так как на данный момент,я не вижу особого смысла хранить такие словари на винте. Проще наверное всё таки было бы сохранять модель,и при необходимости её использовать. vkmod 361мб 36864000 строк 13593 паролей найдено с правилами OneRuleToRuleThemAll (это топовая выборка из топовых наборов правил) gan200000_b256 _l14_ 36035393 8655 OneRuleToRuleThemAll и далее.... gan195000_b256_l14_36864000 8245 gan190000_b256_l14_36035393 8517 gan185000_b256_l14_36035393 8336 gan180000_b256_l14_36035393 8460 gan175000_b256_l14_36035393 8233 gan170000_b256_l14_36035393 7663 gan165000_b256_l14_36035393 8625 gan160000_b256_l14_36035393 8438 gan155000_b256_l14_36035393 8397 gan150000_b256_l14_36035393 6936 gan145000_b256_l14_36035393 8316 gan140000_b256_l14_36035393 7620 gan135000_b256_l14_36035393 9060 gan130000_b256_l14_36035393 10452 gan125000_b256_l14_36035393 7339 gan120000_b256_l14_36035393 7330 gan115000_b256_l14_36035393 7698 gan110000_b256_l14_36035393 7501 gan105000_b256_l14_36035393 6497 gan100000_b256_l14_36035393 7757 gan95000_b256_l14_36035393 6777 gan90000_b256_l14_36035393 6675 Тут пропустил часть контрольных точек.Ну ход событий,думаю итак на лицо. gan35000_b256_l14_36035393 6580 gan30000_b256_l14_36035393 6414 gan25000_b256_l14_36035393 4941 gan20000_b256_l14_36035393 5089 gan15000_b256_l14_36035393 5653 gan10000_b256_l14_36035393 2994 gan5000_b256_l14_36035393 882 Собрал все словари с контрольных точек в один. 10.9Гб Найдено паролей против многократно меньшего vkmod: 22031
Вопрос очень хороший, как по мне - пароли состоящие только из цифр - все же не имеют смысла. В составе остальных паролей зачастую уже есть даты, дни рождения.. что и так (в достаточной мере) влиет на вывод. Spoiler: вывод, тренировочный словарь без цифровых паролей Code: d4d578953afa2f02603f6423b43a6e80:koldtack0312 2c993fd29a5f48e6b4c3eb166ad44c82:kf4992lancer 6b1616d51d3ca3f77abf53292b69e1ba:ashi9895820456 cf1b385116f8a7db79fb4610ed163194:betazaurs28 397c5300c091ac94327b88a61cadf2ce:862812bally 061ba18e54ab75ec968a93b0ba35e700:Barbmarie22815 f0ec1cf290a8f3b0f88c7fdeed097271:imaandma3009 8160a70327e0364cf197274e12dfad77:mariada153xd 5ea4a1ddd9970183fd41419b6ad294a1:Gongtuffy1914 06d3a814d388e2f1256cd795f02dc449:egn101907k 3f09fdfbdf0a1672d4ded3d03db04c28:2001ab88zyt cae5a95ab096b17623acf737c3592825:vernakiroo12 b0bf3653e0c460c8415a8bd4e737b682:inhi|32414 daf540ecc6eb5b3dbd426c77958bd02a:Rustambella6 01b4ba0f74208828edcf64358fab480d:detrudduja3 027e1ae89d3e7a29452352ea531cea76:samomusto54 afbffee9f93215020f2b89e7e824c345:wsliscarl2012 3a8b38ec46681af5975a5a2c3fb808da:anasgraib33 52df33bc6ddc04f847643e3457cc7876:2043221lyss 2982ad8e453e971409e25223b7bbd699:myapoolove03 a9974685786331e36172ab53cae2876d:MARCE3LL33ES e7e166e8d70f218da8bbf0e5f917749f:mynoubr811 79fac5e23b027b9bacf4ba2dcc1337c8:cen09ca407 8f7f27e7aae4c091fb382a3f212291ff:aingheemdan a31e1f78ebd252de358b789dad9e927f:N20campui ed68935a25d7082ba92bdf1784ef7bd5:K26337jms 4985d9a2f3cfe90320db9e214c39b01e:diagossa1370 58b2fca0060d301da4f35023ff7bb4d5:roodia19abr 5be0653e17a3513a72d4c9f895bdd1df:Tk199795224 166f8ee0329818f9a11a73e14c0c251a:Paomolesta2015 2d7f4a1ef58dd728ce17e4e01d5c0ba0:Sablongalur17 2ece5b88d20bb2f44d38cf9de96a20e0:Gmangelr25 9e4d5efa6761209009f892361f6b057a:pacoolindo2207 50559eeac346581282d397644350a258:tindaver250714 c5e5a47a7afd202dcc38ba7143a0def9:Mommepropen c86ac21ca5712ce125fced6bab9a9ab8:LEMISTHER79 a821b719cd732e3c883bed39008cb461:Jmasd051695 6c543e7b179299da62bf4658ad5a2345:ocaroley13288 da2a116fde05a16af4147de270fd0c69:funameak1404 34efac1b5873dc69b64f3d846fa8a9da:pamieglogen 1e2d5e3061efe1d3e0867480748d183e:sonanagu548 f8c2cb6ba1b219d3b5e8ca0a5eebdfce:lekziilovem ab8422457c9f74072cf20fb22c55ab66:jwidsandle b5e282c7859140e68aebd1528e183016:j68j88sham df82bd361c23e28e694a6538adbc20d2:mishmaria12M ce16668744ba4e9418a0b1cdc458ebf4:pettinolove04 8f9b1eccf8f5cf69e256a72aefe00f63:[email protected] 4cc30d1a013c1ea935c91dd0f9a00219:shalen70rma 23fd6258d111f209a1e9e818247fd024:ytrbngQ12 088c6fc76d3de7d7ae332f3085622e77:Cholomina7886 c0dd865d71b5fdd7362d57c61c9adcbb:Lovereu4eva* b2151c75cce5e04d109661c6c7a57f43:lichandaxe1405 797fc6ed3487bc3aa8245f4721d3280c:asatog432100 ea2d7649c75f5ef9b056a2de6027fc4e:NAFKAMACHE d071a3c141f31722ea301703e0dbc245:#Rose346621 634e721bb8785429c65c302831fb0c94:Tisagurrida 53f3e5de80b0333ea4ba8cd70e94e3ac:titomaro10131 9f644ac48ca9233bd726fa7b3b434000:thune3ne31998 78b53bba7abdda84a984a62552bc9b5c:jeisi091325 Эх, было бы отлично.. Думал по началу. Для дела купил 2тб винт с барахолки - складирую на нём. Обработку и действия с нагрузкой на диск - провожу на ssd. По поводу нет смысла хранить - не соглашусь - у меня иногда уходит до недели на генерацию, это с учетом 1080ti и 970pro.. терять данные и при необходимости генерировать - очень затратно по времени.
Не заметил какого-то оптимального значения для всех случаев. для себя вынес основные 5 правил: 1) Словарь чистим хорошо. Дубли, цифровые пароли удаляем. (самый важный этап) 2) Рандомным образом сортируем. Обязательно! (если при обучении на графиках видите подобные скачки - скорее всего этот пункт пропущен) Spoiler: // " alt="js1" border="0"></a> 3) Если Ваша цель исследование - делим словарь в пропорции 70/30 (тренировка/тестирование). Далее можно будет по выводу отследить процент вхождения в словарь для тестирование с той же выборки, но который не участвовал в обучении. (для контроля качества) 4) то что влияет - вот +- learning_rate которые использую (неплохо показали себя) Spoiler: // Code: 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) для теста можно прогнать с learning_rate=0.001 (но учитуйте, скорость обучение может очень сильно повлиять на выходные данные. Показательность прогона с такими настройками такова - если удовлетворил вывод на 5000-10000 итерации - уменьшаем скорость обучение и приступаем к нормальной тренировке. 5) Далее это уже finetuning.. который может немного улучшить стабильность --layer-dim можно увеличить, но увеличится время тренировки. --lambda - можно уменьшать по 1 значению.
Опять же в зависимости от целей. Если потратил тучу времени на очистку-подгонку словаря. То и несколько суток подождать могу. 200 000. можно поглядывать на графики (явная нестабильность - уменьшаем скорость обучения), обычно больше 200 000 не имеет смысла. Например, твой тест выше показал на 130000 - лучший результат. В идеале бы проверять так на каждом тренировочной модели и генерировать словарь только с лучших точок.
Если я правильно понимаю,это как раз в районе вот этих скачков.Тоже обратил на это внимание.А какова причина такого поведения?
это нормально, возможно сказалась небольшая выборка. Функция потери, оптимизатор.. не всегда улучшают, бывают такие локальные скачки. https://www.tensorflow.org/tutorials/keras/overfit_and_underfit http://www.deeplearningbook.org/contents/numerical.html
Опять таки по поводу строк состоящих только из букв.Как они обрабатываются?Вероятно так же как и только цифры?Тогда возможно в них тоже нет особого смысла? Сделал стату по очищенному словарю rockyou.Без цифр min 5 max 15.Спецсимволы не трогал. Spoiler: Стата [*] Length: [+] 8: 21% (2536023) [+] 7: 17% (2018703) [+] 9: 16% (1881645) [+] 6: 13% (1558188) [+] 10: 13% (1533124) [+] 11: 06% (756415) [+] 12: 04% (515227) [+] 13: 02% (333544) [+] 14: 02% (235068) [+] 5: 01% (215433) [*] Character-set: [+] loweralphanum: 51% (5945086) [+] loweralpha: 31% (3593460) [+] upperalphanum: 03% (401783) [+] loweralphaspecialnum: 03% (370689) [+] mixedalphanum: 03% (370639) [+] loweralphaspecial: 02% (339171) [+] upperalpha: 01% (223484) [+] mixedalpha: 01% (155495) [*] Simple Masks: [+] stringdigit: 45% (5247683) [+] string: 34% (3972439) [+] digitstring: 05% (647612) [+] othermask: 04% (486138) [+] stringdigitstring: 03% (430840) [+] stringspecialstring: 01% (190501) [+] stringspecialdigit: 01% (161071) [+] stringspecial: 01% (143774) [+] digitstringdigit: 01% (124706) [*] Advanced Masks: [+] ?l?l?l?l?l?l?l?l: 05% (688461) [+] ?l?l?l?l?l?l: 05% (601837) [+] ?l?l?l?l?l?l?l: 05% (585533) [+] ?l?l?l?l?l?l?l?l?l: 04% (517165) [+] ?l?l?l?l?l?l?d?d: 03% (420577) [+] ?l?l?l?l?l?l?l?l?l?l: 03% (417164) [+] ?l?l?l?l?l?d?d: 02% (292547) [+] ?l?l?l?l?l?l?l?d?d: 02% (273815) [+] ?l?l?l?l?l?l?l?l?l?l?l: 02% (267893) [+] ?l?l?l?l?d?d?d?d: 02% (235469) [+] ?l?l?l?l?d?d: 01% (215283) [+] ?l?l?l?l?l?l?l?l?d?d: 01% (213256) [+] ?l?l?l?l?l?l?d: 01% (193284) [+] ?l?l?l?l?l?l?l?d: 01% (189977) [+] ?l?l?l?l?l?l?l?l?l?l?l?l: 01% (189482) [+] ?l?l?l?d?d?d?d: 01% (178383) [+] ?l?l?l?l?l?d?d?d?d: 01% (173664) [+] ?l?l?l?l?l?l?d?d?d?d: 01% (160719) [+] ?l?l?l?l?l?l?l?l?d: 01% (160151) [+] ?l?l?l?l?l?d?d?d: 01% (152495) [+] ?l?l?l?l?l?l?d?d?d: 01% (132299) [+] ?l?l?l?l?l?l?l?l?l?d: 01% (129903) [+] ?l?l?l?l?l: 01% (126278) [+] ?l?l?l?l?l?l?l?l?l?l?l?l?l: 01% (119310) Наблюдается довольно болшая разница по количеству типов строк.Это ведь наверняка влияет на конечное качество выходного словаря.Что если рапределять данные более равномерно?Это даст лучший эффект? Поставил тренировать вышеописанный rockyou 110мб.Займёт по приблизительно около 2 суток. learning_rate=0.0001 -b 128 -l 15 остальное по дефолту. В планах попробовать этот же словарь,но уже с более равномерным распределением типов строк.
Удаляю строки которые из цифр, чтобы потом при генерации не получать цифровые пароли ои 8 до 12 (пример). Это все я могу перебрать отдельно. Но согласен, возможно цифры от 12-14 символов можно оставлять, которые потом могут дать положительный результат при переборе словарь+правила. это скорее всего даст лучший эффект по графикам. Но на практике, как по мне - нет. Распределять равномерно - это в смылсе взять например loweralpha только и на основе этого создавать модель? (идея как по мне - хороша, возможно что если создать 5 моделей из топа Character-set (выше) то это даст свой эффект. (стоит ли оно потраченых усилий?) На практике не проверял - но как по мне нелинейность в той степени в которой подаем ее мы сейчас - не мешает обучаться нейросети адекватно. Вот тут из-за кулис вылезла архитектура нашей нейросети. Лучшая ли она для нашего дела - вопрос открытый. Возможно стоит попробовать добавить несколько скрытых слоев, нормализацию и тд. красивенько, с умом. (то что пока делал - слишком усложняет сеть, что приводит к очень длительному обучению) в общем - нужно время..
Нет,не совсем так.Брать максимальное количество разных чарсетов,но в чтобы в словаре их было приблизительно одинаковое количество строк. ?l?l?l?l?l??d?d?d 04% ?l?l?l?l??d?d?d 04% ?l?l?l?l?l??d?d?d?d 04% Ну и так далее... Тут опять бы по хорошему провести более масштабную стату по всем реалпасс словарям,затем объеденить её в одну.И согласно ей конструировать словарь.
Вот например: ?l?l?l?l?l?l?l?l,688461 ?l?l?l?l?l?l,601837 ?l?l?l?l?l?l?l,585533 ?l?l?l?l?l?l?l?l?l,517165 Есть ли смысл в содержании такого большого количества однообразных строк?Может лучше выровнять их по минимуму и добавить строк другой,недостающей длинны? Опять таки повторюсь.Непонятно как идёт обучение со строками только из букв.
Да.. в слишком большом количестве - смысла не вижу, строки недостающей длинны (из реалпасс) добавить - от этого будет толк. А по поводу как идет обучение со строками только из букв - это по сути как черный ящик(знать точно нельзя, очень много переменных), если веса настроены так, что генератор смог обманывать дискриминатор, то строки там из букв или из состава цифры+буквы тд - разницы нет
Тот самый случай.Но рандомная сортировка была сделана.Возможно где-то попались слишком однообразные по каким-то характеристикам данные? Выходит что данные до 80000 точки,могут заметно отличаться по харктеристикам,от данных после неё?И нужно будет выбирать как минимум 2 лучшие точки?Впрочем,тесты покажут,что к чему.
если сортировка сделана и все настройки +- по дефолту - могу предположить, что алгоритм такими скачками нашел локальные минимумы. Можно попробовать увеличить batch-size (2^N 64 128 256..), если позволяет карта. трудно ответить значительно ли, иногда графики обучения не совпадают с реальной картиной, только проверять
Мы проверяем как - нагенерили словарь - взяли реальные хеши - смотрим на количество взломанных. Если количество большое - мы думаем что контрольная точка, параметры - неплохи. и все отлично. Но на самом деле те хеши и их количество взломов не имеют практически ничего общего с качеством нашей модели. Именно деление 70/30 (или другие пропорции 80/20) потом дает нам возможность оценить % вхождения сгенерированных данных в данные для тестирования (70/30) с той же выборки, но которые не участвовали в тренировке модели. И именно это дает нам хоть как-то в реальности оценить модель. И сравнить ее. А реальные хеши то уже дальше, и зачастую хорошая модель - может показывать результат реального взлома хуже, нежели средняя модель. (и причин тому может быть множество)
Ну тогда наверное справедливей будет 50/50? И сколько например нужно сгенерить данных с 1 точки (по размеру или количеству строк) для более честного теста? Я на крайнем тесте генерил одинаковое количество строк относительно базового словаря.И при таком раскладе тестовые словари проигрывали,хоть по моему мнению и не сильно.
70/30 и 80/20 это не я придумал, это оптимальное отношение к которому пришли исследователи и повсеместно используют. Тоже генерировал одинаковое количестов строк. 10^6 или 10^7 для каждой точки, но это чисто для +- определения оптимальной точки (можно двух) для генерации. А дальше использовать только эту точку (точки) для генерации. Хотя как показывает практика - брать можно точки после 120 000 - 150 000 и они особо отличаться не будут +- несколько процентов. (поэтому это своего рода улучшения, но уже когда все остальное настроено на отлично)
Словарь rockyou.Тестировался уже целиком 110мб.Удалены только цифры. learning_rate=0.0001 0.0003 -b 128 -l 15 остальное по дефолту. Сделал полный тест всех кт. rockyou 17366 OneRuleToRuleThemAll 5000 6781 OneRuleToRuleThemAll и далее... 10000 7761 15000 7959 20000 9472 25000 10177 30000 10769 35000 12080 40000 10785 45000 12214 50000 10311 55000 12026 60000 12369 65000 11522 70000 11436 75000 11679 80000 11782 85000 14148 2тест 14099 90000 12219 95000 13018 100000 13360 105000 13287 110000 13624 115000 13505 120000 14348 2тест 14362 125000 13777 130000 12718 135000 13326 140000 13503 145000 13487 150000 14086 2тест 14080 155000 14209 2тест 14128 160000 13610 165000 13720 170000 13081 175000 12526 180000 13810 185000 14084 190000 13560 195000 14265 2тест 14161 200000 13628 Проверил,какова будет эффективность лучших кт,если сгенерить с них словарь повторно.Как видно,эффективность сохраняется. Если сравнить общие результаты предыдущего теста и этого видно,что разница по выхлопу небольшая. Но в прошлом тесте было взято всего 2мб словаря.А в этом уже 110,но в нём некоторых типов строк было с избытком. Если руки дойдут,может попробую сделать словарь с максимально возможным количеством типов строк.Тогда станет понятнее,какие характеристики словаря наиболее эффективны.