Совет по безопасности: увеличьте количество проходов bcrypt

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Приветствую! На этой неделе мы отправимся в интересный и сложный мир механизм хэширования паролей, и рассмотрим очень простое изменение, которое Вы должны сделать в своих приложениях для повышения безопасности, основываясь на двух PR, которые я недавно отправил в Laravel.

Увеличьте количество проходов bcrypt

(Я привёл некоторые справочные данные. Пропустите их, если Вам нужна краткая информация)

bcrypt - это функция хэширования паролей, используемая для их защиты в базах данных чтобы их не смог использовать тот, кто получит доступ к исходному кэшу. В настоящее время bcrypt является алгоритмом шифрования по-умолчанию как в Laravel, так и в самом PHP, и на момент написания статьи является наиболее безопасным вариантом Периодически возникают разговоры о переходе на <strong>argon2</strong> и он часто рекламируется как лучшая альтернатива <strong>bcrypt</strong>, однако в нём есть ряд фундаментальных недостатков, которые делают его непригодным для веб-приложений. Этот вопрос поднимался в <a href="https://github.com/laravel/laravel/pull/6245#issuecomment-1730448152">моём PR</a>&nbsp;и в списке рассылки <a href="https://externals.io/message/120993">PHP Internals</a>, а один из экспертов, участвовавших в выборе argon2, <a href="https://twitter.com/TerahashCorp/status/1155119064248913920">публично заявил, что его выбор был ошибкой</a>.</p><p></p>" data-abbr="хэширования паролей">хэширования паролей.

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

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

Поэтому по мере роста вычислительной мощности необходимо повышать безопасность хэширования паролей. Это достигается за счёт Rounds / Costs / Work Factor, которые эффективно замедляют работу функции хэширования. Таким образом, если для генерации хэша пароля требуется больше времени, то и для перебора потребуется больше времени, а для достаточно сложных паролей этот перебор становится невыполнимым в любом реалистичном сценарии.

Поддержка хэширования паролей с помощью bcrypt была реализована в PHP 11 лет назад и начиналась с 10 проходов по-умолчанию. Аналогично и в Laravel используется 10 проходов bcrypt. Однако, как я уже говорил, вычислительные мощности растут и 10 проходов уже не считаются достаточными для обеспечения безопасности. В связи с этим, в PHP проводится опрос по RFC, рекомендующий повысить значение по-умолчанию с 10 до 11 или 12. И, следуя их примеру, мы сделали то же самое в Laravel, повысив стандартную версию до 12.

И это всё для того чтобы сказать об увеличении количество проходов bcrypt по-умолчанию с 10 до 12!

Поскольку это значение определяется в файле config/hashing.php, необходимо найти и заменить значение bcrypt.rounds с 10 на 12:

'bcrypt' => [
    'rounds' => env('BCRYPT_ROUNDS', 12),
],

И всё!

Источник: https://habr.com/ru/articles/765524/


Интересные статьи

Интересные статьи

Здравствуйте, товарищи. Сегодня речь пойдёт о, можно сказать, легенде советского и российского автопрома-ГАЗ «Волга» 3102. Как начиналась разработка модели, почему она не достигла целей, поставленных ...
Привет, я редактор блога Максилект на Хабре. Сегодня я впервые буду высказываться от своего имени. Расскажу, как выглядит история с нашим блогом в ракурсе событий последнего года и почему ИТ-специалис...
ПредисловиеВсем привет! Меня зовут Александр, и я Junior Project Manager в ICL Services. На путь ПМа я встал в начале 2021 – и пора бы рассказать, с чего все началось и кто стал инициатором моего пути...
Мы публиковали несколько статей на тему клавиатур — хотя бы потому, что в нашей команде немало тех, кому нравятся необычные современные клавиатуры. Это инструмент, с которым проводишь много часов в ...
В Haulmont приходят как опытные специалисты, так и разработчики без опыта. Мы часто общаемся с новичками, которые не знают, с чего начать путь в IT. Собрали полезные ресу...