Я присоединяюсь к вам в борьбе со слабыми хэшами.
OWASP имеет защитный чехол для хранения пароля (https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet) с некоторым руководством; они рекомендуют 64 000 итераций PBKDF2 по состоянию на 2012 год, удваивая каждые два года (т. е. 90 510 в 2012 году).
Обратите внимание, что хранение длинной криптографически случайной соли для каждого пользователя всегда является основным.
Обратите внимание, что при использовании переменного числа итераций с переменной частотой и сохранении количества итераций вместе с солью будет добавлена некоторая сложность для взлома программного обеспечения и может исключить определенные оптимизации. Например, «bob» зашифровывается с помощью итераций 135817, тогда как «alice» использует 95121 итераций, то есть, возможно, минимум (90510 + RAND (90510)) для 2013 года.
Обратите также внимание, что все это бесполезно, если пользователи разрешено выбирать слабые пароли, такие как «пароль», «Пароль1!»,« P @ $$ w0rd »и« P @ $$ w0rd123 », все из которых будут найдены с помощью основанных на правилах словарных атак очень быстро (последний просто« пароль »со следующими правилами: прописная первая буква, 1337-говорите, добавьте трехзначный номер в конец). Возьмите базовый список словарей (phpbb, для хорошего, небольшого стартового словаря) и примените к нему правила, подобные этому, и вы взломаете большое количество паролей, «умные» трюки.
Таким образом, при проверке новых паролей не просто применяйте «Все четыре цифры сверху, снизу, цифры, цифры не менее 11 символов», так как «P @ $$ w0rd123» соответствует это, по-видимому, очень жесткое правило. Вместо этого используйте этот базовый список словарей и посмотрите, будут ли его исправлять базовые правила (это намного проще, чем на самом деле пытаться взломать - вы можете сократить свой список и их слово, а затем просто написать код типа " если последние 4 символа - общий год, chec k всех, кроме последних четырех символов, против слова списка ", и" если последние 3 символа являются цифрами, проверьте все, кроме последних 3 символов, на список слов "и" проверьте все, кроме двух последних символов, на словосочетание "и" 1337 пароль - превратите @ в a, 3 в e и т. Д., А затем проверьте его на список слов и попробуйте другие правила ».
Что касается кодовых фраз, в общем, это отличная идея , особенно если некоторые другие символы добавляются к середине слов, но если и только если они достаточно длинные, так как вы отказываетесь от множества возможных комбинаций.
Обратите внимание, что современные машины с графическим процессором рассчитаны на десятки миллиардов итераций хэша (MD5, SHA1, SHA-256, SHA-512 и т. Д.) В секунду, даже в 2012 году. Что касается словосочетания «правильно» лошади батарея штапеля ", это, в лучшем случае, очень скромный пароль - это всего 4 слова в нижнем регистре длиной 7 или меньше с пробелами. Итак, если мы ищем поисковые пароли XKCD с 18-миллиметровой догадкой второй установки: современный маленький англо-английский словарь имеет: 6k слов длиной 5 или менее 21k слов длиной 7 или менее 36k слов длиной 9 или менее 46k слов длиной 11 или менее 49 тыс. слов длиной 13 или менее
С кодовой фразой в стиле XKCD и без необходимости фильтровать слова по популярности («правильное» или «стул» против «дампье» против «геморрообразования») мы имеем 21k^4, что имеет только около 2E17 возможностей. С установкой 18 миллиардов/сек (единственная машина с 8 GPU, если мы сталкиваемся с одной итерацией SHA1), это составляет около 4 месяцев, чтобы полностью искать пространство ключей. Если бы у нас было десять таких установок, это примерно две недели. Если бы мы исключили маловероятные слова типа «дампье», это намного быстрее для быстрого первого прохода.
Теперь, если вы получаете слова из «огромного» словаря английского языка английского языка, такого как «Бальзамина» или «Кальвинистика» (оба выбраны с помощью функции «перейти к строке», тогда у нас будет 30 тыс. Слов длиной 5 или менее 115 тыс. слов длиной 7 или менее 231 тыс. слов длиной 9 или менее 317 тыс. слов длиной 11 или менее 362 тыс. слов длиной 13 или менее
Даже с максимальным пределом длины 7 с этим огромным словарем как базовое и случайно выбранное слова, мы имеем 115k^4 ~ = 1.8E20 возможностей, или около 12 лет, если установка будет обновлена (удвоение мощности каждые 18 месяцев). Это очень похоже на 13 символов, в нижнем регистре + только номер. «300 лет» - это то, что вам скажут большинство оценок, но они не учитывают закон Мура.
Через некоторое время после того, как я это написал, я узнал о замене склепа на SHA, используемом в RedHat Linux. Вероятно, он лучше разработан, чем рассматриваемая схема PBKDF2. http://en.wikipedia.org/wiki/Crypt_%28Unix%29#SHA-based_scheme – joeforker