Русский

Инструменты разработчика · SHA хеш-калькулятор

Почему не следует хранить пароли в виде простых SHA-256 хешей

· Почему это важно

пароли безопасность криптография

Секундомер, показывающий мгновенное угадывание пароля, в сравнении с хеш-функцией пароля, добавляющей преднамеренные задержки
Оригинальная векторная иллюстрация ToolAcre

SHA-256 создан для быстрой работы, а это именно то, чего вы не хотите от паролей. В этом посте объясняется, почему скорость является проблемой и какие функции хеширования паролей работают по-другому.

SHA-256 не является хранилищем паролей; это быстрое хеширование. Обычный SHA-256 дает злоумышленникам такую ​​же скорость угадывания, что делает его непригодным, несмотря на то, что он является криптографически стойким алгоритмом.

Разработчик реализует систему входа в систему и сохраняет пароли в виде хешей SHA-256. Алгоритм является криптографически стойким, и приложение не применяет соль, сохраняя код простым. Когда пользователь входит в систему, приложение хэширует отправленную информацию и сравнивает ее с сохраненным значением. Эта конструкция элегантна в своей простоте и совершенно непригодна для хранения паролей. Это не теоретическая проблема; это самая распространенная серьезная ошибка в системах аутентификации. Проект выглядит вполне оправданным, пока вы не задумаетесь о том, что злоумышленник может сделать с украденными данными.

Проблема не в том, что SHA-256 слабый. SHA-256 — это надежный криптографический алгоритм, которому доверяет сообщество безопасности и который используется во всей отрасли для проверки целостности и адресации контента. Недостаток в том, что SHA-256 работает быстро, а скорость — это полная противоположность тому, что нужно паролям. Хэш пароля — это не просто криптографический примитив; это особый вид инструмента, предназначенный для решения конкретной проблемы: защита от догадок. Скорость — это особенность контрольных сумм; в паролях это катастрофа.

Скорость — это суть SHA-256 — проверки целостности требуют скорости, и злоумышленник получает такую ​​же скорость для угадывания

Когда база данных хэшей паролей SHA-256 скомпрометирована, злоумышленнику не нужно переворачивать хэши. Злоумышленник создает словарь: общие пароли, такие как «пароль», «123456», «привет» и миллионы других. Каждый кандидат хешируется с помощью SHA-256 — вычислительно тривиальной операции — и сверяется с украденной базой данных. Злоумышленник может вычислить возможные значения SHA-256 с помощью того же быстрого примитива, который используется службой входа в систему, а затем сравнить каждый результат в автономном режиме без ограничений скорости. Точная скорость зависит от аппаратного обеспечения и реализации, поэтому в этой статье намеренно не делается заявлений о догадках в секунду или времени взлома.

Скорость – это вся проблема. SHA-256 предназначен для быстрой работы. Это его дизайнерский замысел. Он позволяет без ожидания проверять контрольные суммы загрузки, вычислять адреса контента и строить деревья Меркла. В этих приложениях скорость является особенностью. Для паролей скорость — это катастрофа. Когда база данных паролей украдена и хеширована с помощью SHA-256, злоумышленник имеет такую ​​же скорость угадывания, как и законный сервер для проверки. Именно эта симметрия нарушает безопасность паролей. И законный сервер, и злоумышленник получают преимущество быстрого дайджеста общего назначения; только злоумышленник может повторить это в автономном режиме без средств контроля входа в приложение.

Словари и радужные таблицы — предварительные вычисления на основе несоленых хэшей и что меняет соль

Именно здесь становится практичным заранее вычисленный словарь. Злоумышленник может потратить день и вычислить SHA-256 хеши для тысячи наиболее распространенных паролей, для распространенных шаблонов, таких как Name1990, или для целых словарей на нескольких языках. Полученная таблица называется радужной таблицей. Поиск украденного хеша SHA-256 по заранее вычисленной таблице происходит мгновенно. Даже без предварительно вычисленной таблицы вычисление миллиарда предположений является тривиальной задачей с помощью GPU хеширования. Вычислительные затраты злоумышленника настолько малы, что даже слабые пароли поддаются за считанные минуты.

Хэш-калькулятор ToolAcre SHA напрямую демонстрирует эту скорость. Вставьте короткий текст, нажмите кнопку SHA-256, и результат будет мгновенным. Этот мгновенный результат — свойство, которым вы восхищаетесь в хеш-калькуляторе, — является именно тем свойством, которое делает простой SHA-256 непригодным для использования в паролях. Злоумышленник получает одинаковый мгновенный результат для каждой догадки. Для контрольных сумм и проверок целостности эта скорость идеальна. Для паролей это фатально для безопасности.

Что добавляют функции хеширования паролей — рабочие факторы, жесткость памяти и соли для каждого пользователя в bcrypt, scrypt, Argon2 и PBKDF2

Соль — это случайное значение, добавляемое к паролю перед хешированием, поэтому соль каждого пользователя различна. Даже если два пользователя имеют один и тот же пароль, они имеют разные значения хеш-значений. Это нарушает заранее вычисленные радужные таблицы; злоумышленник должен вычислить таблицу независимо для каждой соли. Благодаря независимому генерированию солей для каждого пользователя одна заранее рассчитанная таблица больше не применяется без изменений к каждой учетной записи. Однако соль подталкивает злоумышленника вычислять таблицу только во время атаки, а не заранее. Если хеширование все еще происходит быстро, злоумышленник просто параллельно вычисляет больше таблиц и продолжает угадывать каждую учетную запись с помощью быстрого примитива. Соль необходима, но недостаточна. Это предотвращает повторное использование словаря жертвами, но не замедляет основную операцию злоумышленника: угадывание. Скорость хеширования по-прежнему остается скоростью угадывания.

Рабочий пример — насколько быстро распознается SHA-256 обычного пароля по сравнению с настроенным хэшем пароля, качественно описанным.

Функция хеширования паролей использует другой подход. Bcrypt, scrypt, Argon2id и PBKDF2 созданы специально для проверки пароля. Все они включают фактор работы: параметр, который делает хеширование намеренно дорогим. Аргон2 – самый современный; он регулирует как время CPU, так и потребление памяти. Bcrypt использует настраиваемый коэффициент стоимости, который удваивает работу с каждым шагом. Все они имеют встроенную генерацию соли. Эти инструменты разработаны с учетом модели злоумышленника. Фактор работы имеет решающее значение.

Функция хеширования пароля делает настроенную стоимость каждой проверки. Злоумышленник, желающий проверить кандидатов, также должен заплатить эту цену за каждое предположение. Конкретные тайминги не могут быть безопасно скопированы между развертываниями, поэтому раздел, посвященный параметрам, требует сравнения с фактическим производственным классом оборудования. Именно эта асимметрия делает хеширование паролей эффективным. Фактор работы меняется с «преимущества нападающего» на «преимущество защитника».

Миграция устаревшей таблицы SHA-256 — перенос существующих хэшей и повторное хеширование при следующем входе в систему

Проведенное сравнение остается качественным, поскольку этот репозиторий не содержит тестов для конкретной функции пароля или злоумышленника. Общий пароль каждый раз создает один и тот же простой SHA-256, поэтому существующая словарная запись может идентифицировать его по равенству. Настроенная запись пароля включает свои собственные параметры соли и стоимости и требует настройки работы для каждого кандидата.

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

Чего здесь не касается — выбор параметров для конкретного хеша пароля, который зависит от вашего оборудования и модели угроз.

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

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

Вывод: мгновенным результатом является предупреждение — хэш-калькулятор ToolAcre SHA показывает, насколько быстр SHA-256, поэтому он не должен хранить пароли ваших пользователей.

Устаревшую систему, в которой пароли хранились в виде обычного SHA-256, можно перенести, не требуя от всех пользователей немедленного сброса настроек. Техника заключается в том, чтобы «обернуть» старый хеш: взять значение SHA-256 и снова хешировать его с помощью Argon2. При следующем входе пользователя в систему система проверяет, соответствует ли старый SHA-256; если да, то он вычисляет Argon2 по этому результату и сохраняет обернутую версию. При следующем входе пользователя в систему система проверяет непосредственно Argon2. Миграция происходит прозрачно во время обычного процесса входа в систему.

Такой комплексный подход гарантирует, что старые пароли, которые были скомпрометированы, теперь защищены рабочим фактором. Злоумышленник со старой базой хэшей SHA-256 больше не сможет просто взломать их; они должны атаковать завернутую версию, которая включает стоимость Аргона2. Миграция происходит прозрачно для пользователей во время обычного процесса входа в систему. Каждый вход в систему создает возможность усилить хэш, не нарушая работу пользователя. Выбор правильного рабочего фактора зависит от вашего оборудования и модели угроз. Значения по умолчанию Argon2 разумны: 19 итераций, 512 MB памяти и 1 параллелизма для веб-сервисов.