Изменить метод шифрования

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

Нет, не из области фантастики. Проблема с md5 в том, что он слишком быстр. Двойное хеширование бесполезно (скорость вычисления хеша увеличивается незначительно) и доже вредит (вероятность коллизии увеличивается, но мы не про это сейчас, к паролям это слабо относится).
Длинная статическая соль (этот самый конфиг со здоровенной фразой) не решает проблему.

При написании алгоритмов аутентификации и безопасного хранения хешей нужно исходить из таких предположений: утекла вся БД и злоумышленнику известен алгоритм хеширования (сорцы тоже утекли). Цель: получить plain-text пароль пользователя.
Что будет делать злоумышленник? Скармливает софту-брутфорсеру алгоритм хеширования и самый большой словарь, который может себе позволить, примерно в таком виде (как предложенный Alligat0r вариант): md5(md5(STATIC_SALT.DICTIONARY_WORD)) и запускает брутфорс. Уже видите проблему с такой солью? Она статическая (одна на все пароль) и никак не влияет на брутфорс, он все еще чертовски быстр. При каждой итерации подбора софт ищет полученный хеш в бд. Есть такой? Ну вот, один пароль мы нашли. И так далее.

Что же делать? Не использовать статическую соль, а рандомизированную для каждого пользователя. Как её хранить? Да прямо рядом с хешем пароля. Это намного безопаснее. Почему? Рассмотрим тот же вариант: у хацкера так же есть БД и алгоритм генерации хеша. Как он будет брутфорсить: взять уникальную соль для каждой записи из таблицы юзеров. Прилепить к слову из словаря и сгенерировать хеш: md5(md5(RANDOMIZED_SALT.DICTIONARY_WORD)). Проверить, что полученные хеши не совпадают. Взять следующее слова из словаря... Я думаю что уже стало очевидно, что в первом случае нужно сделать n итераций, где n -- размер словаря. Во втором уже Nn, где N - общее кол-во записей в таблице юзеров. Другими словами, при наличии словаря на 1000000 (миллион) парольных фраз и 1000 юзеров злоумышленник переберет 1000000 хешей (что для md5 очень быстро), а во втором уже 1000 * 1000000 = 1000000000 (миллиард) итераций! Что уже усложняет жизнь.
Но не делает эту задачу невозможной при наличии GPU :)

И таки что делать? Все просто, вот алгоритм успеха: уникальная рандомизированная для каждого юзера соль, более требовательный к вычислительным ресурсам алгоритм хеширования, нежели md5: блоуфиш с адекватным кост-фактором и уникальной солью обломает хацкеру зубы (что как раз и реализует PHP password api, к слову).
 

Alligat0r,

2013 год
 
тогда уже перебор вообще окажется из роли фантастики
Видеокарта 980ti на изи 3-4 миллиардов ком/сек поверит твой md5, забудь про md5 или sha1, whirlpool и прочие актуальные 90х начала 00 годов медоты хеширования.
 
  • Мне нравится
Реакции: kick
Все что написано в последних сообщениях это не методы взлома а методы подбора/перебора, нужно понимать разницу.

Вот к примеру md5 хеш обычный не двойной сгенерированный по 4 символам, попробуйте вскройте, прежде чем писать о способе взлома хеша и о гигантской скорости перебора.

a1333e478770f8a193b3cd4e76bfa606
 
5^Bc
 
Никто твой хеш не будет ломать, он никому не нужен чтоб на него тратили свои мощности.
Взлом или брут хеша это одно и тоже, так как хеш функция не обратима, слово "взлом" в данном контексте означает получения первичного пароля.
Тебе объяснили что md5 устаревший алгоритм хеширования, что тебе ещё не понятно. Хочешь используй, хочешь нет, всем плевать.
 
Тема себя исчерпала, мнение и споры приводят к определенным выводам, и это есть конечный результат для начала реализации чего то нового, но оно никому ненужно. Парадокс.
Но спасибо всем кто принял участие. Было весьма интересно.
 
Назад
Сверху Снизу