Я что-нибудь пропустил? Существуют ли какие-либо дополнительные шаги по сохранению паролей к БД?
Сохранение пароля:
После максимально возможного изучения предмета я пришел к выводу, что лучший способ хранить пароли пользователей в БД веб-приложений (в моем случае MySQL + PHP) выглядит следующим образом:
Атака №1: Злоумышленник выгружает базу данных с помощью SQL-инъекции.
БД результаты
наша hash_function и случайный
пользовательская соль.
После свалки злоумышленник мог получите $ userPassword и $ randomSalt , просмотрев его собственный аккаунт. Затем, угадав хэш такую функцию, как md5, он мог запустить Радужная атака на $ sitewideSalt . Но это может занять до 1,41 миллиона столетий [1].
При использовании этого типа безопасности не позволяет дамп БД скомпрометировать сохраненные пароли . Пользователь все еще должен найти $ sitewideSalt другим методом.
Атака №2: Злоумышленник находит вектор включения локального файла (LFI).
Злоумышленник может получить необработанный код для нашего веб-приложения.
После использования веб-приложения через возможный LFI
или RFI [2] злоумышленник читает
исходный код для нашей сети
приложение и получает наши простые
алгоритм и сохраненная
$ sitewideSalt .
Куда дальше?
Теперь у злоумышленника есть обе возможности, которые он может использовать, чтобы получить настоящие пароли. За исключением того, что он должен создать 1 радужную таблицу для каждого пользователя, поскольку у каждого пользователя есть своя случайная специфическая для пользователя соль ($ randomSalt).
«Современный сервер может вычислить MD5 хэш около 330 МБ каждую секунду. Если у ваших пользователей есть пароли, которые строчные, буквенно-цифровые и 6 длинные символы, вы можете попробовать все единственный возможный пароль такого размера примерно за 40 секунд. "
" ... CUDA, вы можете собрать свой собственный небольшой суперкомпьютерный кластер, который позволит вам пробовать около 700 000 000 паролей в секунду ... "[3]
Что нам нужно сделать сейчас Это расширяет функцию хеширования, используя трудоемкий алгоритм, такой как bcrypt. Коэффициент рабочей нагрузки bcrypt может быть на 5-6 порядков больше, чем у более простых функций хеширования. Взлом одного пароля может занять годы, а не минуты. И в качестве бонуса bcrypt уже генерирует случайную соль для каждого хэша и сохраняет ее в полученном хэше.