1. Новые покупки

    28.04.2017: Инсталлятор pmta 4.5 + курс по рассылкам 4.0[эксклюзив, от виталия шелеста]

    28.04.2017: ТРЕНИНГ - МАСТЕР РСЯ

    28.04.2017: Чёрный и Серый Интернет-маркетинг для коммерческих продаж

    28.04.2017: Бесплатные покупки на Aliexpress, Amazon,asos + заработок от 200% на одной покупке

    28.04.2017: Игорь Ледоховский - Мастерство разговорного гипноза (46 DVD - Часть 4)

    28.04.2017: Игорь Ледоховский - Мастерство разговорного гипноза (46 DVD - Часть 5)

    28.04.2017: Игорь Ледоховский - Мастерство разговорного гипноза (46 DVD - Часть 3)

    28.04.2017: Торговый Робот ProFit

    28.04.2017: Ретаргет Машина

    28.04.2017: Клиенты для фотографа из социальной сети вконтакте

    28.04.2017: Видеокурс по художественной обработке фото

    28.04.2017: SEO Марафон 2.0 по продвижению сайтов от WPNEW (2017)

    28.04.2017: Профессиональный курс SEO-SEM (ТОПЭКСПЕРТ) 2016

    28.04.2017: [Артур Гранд и Виталий Гандзий] - Профессия мастер РСЯ

    28.04.2017: Мастер Рекламных Сетей Яндекс (РСЯ) (2017)

    28.04.2017: Льём трафик из ВК v.3 (Все фишки + Автоматизация ВК vs.. starters)

    27.04.2017: НОВОСТРОЙКИ 2017

    27.04.2017: Продажи через Яндекс Директ 2017

    27.04.2017: Простая полностью онлайн тема от 40 000 рублей в месяц на автопилоте (2016)

    27.04.2017: Уникальная методика слива трафика из Facebook

    27.04.2017: Ebay Dropshipping Coaching Courses Andrei Kreicbergs

    27.04.2017: Amazon FBA Arbitrage/ Dropshipping Coaching Courses Andrei Kreicbergs

    27.04.2017: Яндекс.Директ по-взрослому (2017)

    27.04.2017: Игорь Ледоховский - Мастерство разговорного гипноза (46 DVD - Часть 2)

    27.04.2017: Торговый Робот ProFit

  2. Сбор взносов

    28.04.2017: Ретаргет Машина

    27.04.2017: Профессиональное CPA продвижение в Instagram (CPA-поток)

    26.04.2017: 100 способов увеличить посещаемость сайта

    25.04.2017: Электронный учебник «Типографика и вёрстка» Артёма Горбунова

    25.04.2017: Antidetect 7.1.1

    25.04.2017: Быстрая анимация в After Effects

    24.04.2017: LPACK: создаём лендинги западного уровня при помощи шаблонов + как на этом заработать + 550 шаблонов

    24.04.2017: Палю тему на миллион Insta + Facebook

    23.04.2017: Заработок от 500 рублей в день на CPA товарах

    22.04.2017: Самый полный курс по рекламе в myTarget (2017)

    21.04.2017: Самый полный курс по продвижению на YouTube (2017)

    21.04.2017: Пошаговый курс-практикум прибыльного интернет-магазина

    20.04.2017: Коучинг - Самое Полное И Эффективное Обучение По Созданию Сайтов С Высокой Конверсией

    20.04.2017: Вебинар продвижение instagram

    17.04.2017: Закрытый клуб от Тимура Тажетдинова

    14.04.2017: Бизнес Молодость [БМ] МЗС Storage. Хранилище секретной информации (Подписка на месяц №3) 2017

    13.04.2017: Идеальный landing page 3.0

    13.04.2017: Обмен валют по рыночному курсу

    12.04.2017: Контекстная реклама – подготовка профессионалов (2016)

    11.04.2017: (Повтор)INSTASOFT 4.0.9.5

    07.04.2017: [Оптарь] Заработок на AliExpress и Пабликах ВК

    05.04.2017: Онлайн-Марафон по дизайну во Вконтакте

    30.03.2017: Cinematic LUTs - цветокоррекция по известным фильмам и сериалам

    24.03.2017: Простая и РАБОЧАЯ схема заработка от 1000 рублей в день!

    19.03.2017: Facebook Маркетинг Безумие Версия 2.0 - Продвижения в Свой Бизнес (2016)

Скрыть объявление
Схемы заработка, Складчины, Инфопродукты
Постоянные обновления только у нас!
Присоединяйся :)

Как надо хешировать пароли и как не надо.

Тема в разделе "Статьи/Новости IT", создана пользователем Toretto, 30 янв 2014.

  1. Toretto

    Администратор

    Регистрация:
    13 янв 2014
    Сообщения:
    6.716
    Симпатии:
    4.917
    [​IMG]

    Сразу определю какую задачу применения хешей буду рассматривать — аутентификация пользователей. Не токены восстановления паролей, не аутентификация запросов, не что-то еще. Это также не статья про защиту канала передачи данных, так что комментарии по challenge-response и SSL неуместны!

    Матчасть (короткая)

    Hash = хеш функция — (свертка) функция однозначного отображения строки (любой длины) на конечное множество (строку заданной длины).
    Само число (строка) хеш — результат вычисления хеш-функции над данными.
    Существуют криптографические и некриптографические (классифицируются отдельно, к ним относятся, например, контрольные суммы) хеш-функции.

    Для криптографических хэшей есть три дополнительных условия, которые отличают их от всех остальных:
    • Необратимость: для заданного значения хеш-функции m должно быть вычислительно неосуществимо найти блок данных X, для которого H(X)=m.
    • Стойкость к коллизиям первого рода: для заданного сообщения M должно быть вычислительно неосуществимо подобрать другое сообщение N, для которого H(N)=H(M).
    • Стойкость к коллизиям второго рода: должно быть вычислительно неосуществимо подобрать пару сообщений ~(M, M'), имеющих одинаковый хеш
    Подробнее :
    Hidden Content:
    Для просмотра содержимого Вы должны иметь 2 или более. Либо Вы можете просто "Снять все ограничения на скачивание курсов "
    Вникать в тонкости криптографии прикладному разработчику не обязательно, достаточно запомнить какие хэш-функции (алгоритмы по названию) можно сейчас использовать, а какие уже нет. MD5 — уже нельзя, коллеги, — используйте bcrypt/scrypt.

    В веб-приложениях, в числе прочего, хеш-функции используются для безопасного хранения секретов (паролей) в базе данных.
    Именно хэш-функция становится вашим последним оплотом, если злоумышленник смог свести нападение к локальной атаке на систему аутентификации. Про онлайн атаки (перебор паролей НТТР запросами), может быть, кто-то еще напишет позже.

    Ниже перечислены требования, которым ваш хеш в базе должен удовлетворять:
    • стойкость к атакам перебора (прямой перебор и перебор по словарю)
    • невозможность поиска одинаковых паролей разных пользователей по хешам


    Для выполнения первого требования нужно использовать стойкие в настоящее время (а не в 90х годах!) хеш-функции.
    Для выполнения второго — к паролю перед хешированием добавляется случайная строка (соль). Таким образом, у двух пользователей с паролем «123456» будут разные соли «соль1» и «соль2», а соответственно и хеш-функции от «123456соль1» и «123456соль2» в базе тоже будут разные.

    Теперь немного про систему хранения — и соль и сам хеш хранятся в базе данных.
    То есть получив доступ к СУБД, злоумышленник получает и значения хешей и соли.

    Используйте локальный параметр!

    Чтобы усложнить жизнь при атаке перебора следует дописать соль к паролю, а не наоборот (для людей, которые пишут слева направо, конечно).
    Так как хеш-функция, как правило, вычисляется последовательно по строке (требования поточности алгоритма), то злоумышленнику при переборе «соленых» хешей, будет проще, когда подхешовое выражение начинается с соли.
    Проще потому, что он (злоумышленник) может предвычислить заранее хеш(соль) и далее считать хеш(соль)+хеш(пароль) уже куда быстрее (практически с той же скоростью, что и просто хеш(пароль)). Для всех паролей, что он будет перебирать.

    Для того чтобы еще усложнить жизнь атакующему, Solar Designer:
    Hidden Content:
    Для просмотра содержимого Вы должны иметь 2 или более. Либо Вы можете просто "Снять все ограничения на скачивание курсов "
    предлагает ввести еще одну штуку, под названием локальный параметр.

    Это по сути «вторая соль» дописывается ко всем (паролям+соль) конструкциям, и является одинаковой для всех хешей в базе. В чем же трюк? В том, что локального параметра в базе нет. Это константа системы, которая храниться в памяти приложения, куда она попадает из конфига (любым способом, только не из базы).

    Очень простая и действенная мера, которая позволяет практически полностью исключить атаку перебора по данным только одного хранилища хешей (без знания локального параметра).

    Единственный раз мы (ONsec) ломали хеши с локальным параметром, выработав при этом тактику атаки на сам локальный параметр (регистрируемся в приложении, затем ищем в базе свой хеш, соль (свой пароль мы и так знаем) и перебираем ЛП). И тщетно. На длинах 16+ байт для современных функций хеширования — это очень дорого по железу. В итоге проще оказалось скомпрометировать систему аутентификации (проставить себе role=admin в базе через UPDATE ;) )

    Очень рекомендую ознакомиться с презентацией:
    Hidden Content:
    Для просмотра содержимого Вы должны иметь 2 или более. Либо Вы можете просто "Снять все ограничения на скачивание курсов "
    Защищайте свои хранилища надежно и грамотно!

    Заключение

    Буду реалистом — естественно, никто не станет переписывать свои проекты ради «каких-то» хешей. Но новые проекты можно писать на scrypt/bcrypt. А также — внедряйте локальный параметр даже на слабых MD5 — он правда помогает, проверено :)

    При переходе на другой тип хеширования, помимо трудозатрат, часто встает вопрос производительности. Действительно, более стойкие алгоритмы потребляют больше ресурсов. Тестируйтесь перед внедрением для своих нагрузок по скорости аутентификации пользователей в секунду (для большинства крупных проектов переход на scrypt оказался безболезненным). Выбор конкретного идеального типа хеша в конкретной ситуации может сильно разнится. Так, например, ДБО все чаще выбирают железные решения для генерации хешей с заданной скоростью.

    В заключении, привожу скорости перебора хешей (единицы измерения — мегахэши в секунду, то есть количество ), полученных на карточке AMD Radeon 7990 стоимостью менее $1000 (даже по старому курсу):

    • MD5: 16000 M/s
    • SHA-1: 5900 M/s
    • SHA256: 2050 M/s
    • SHA512: 220 M/s
    • NTLM: 28400 M/s
    • bcrypt: 8,5 k/s
    А по поводу эффективности перебора bcrypt рекомендую также ознакомиться с:
    Hidden Content:
    Для просмотра содержимого Вы должны иметь 2 или более. Либо Вы можете просто "Снять все ограничения на скачивание курсов "
     
    InfoManyak нравится это.
XenForo add-ons by Waindigo™ ©2014 Waindigo Foundation.