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


Нет, не из области фантастики. Проблема с 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
 
Никто твой хеш не будет ломать, он никому не нужен чтоб на него тратили свои мощности.
Взлом или брут хеша это одно и тоже, так как хеш функция не обратима, слово "взлом" в данном контексте означает получения первичного пароля.
Тебе объяснили что md5 устаревший алгоритм хеширования, что тебе ещё не понятно. Хочешь используй, хочешь нет, всем плевать.
 
Тема себя исчерпала, мнение и споры приводят к определенным выводам, и это есть конечный результат для начала реализации чего то нового, но оно никому ненужно. Парадокс.
Но спасибо всем кто принял участие. Было весьма интересно.