Вопрос или проблема
Согласно моему исследованию, если вы хотите безопасно хранить пароли, вам следует использовать встроенные функции хеширования, которые были проверены профессионалами. Рекомендуется не добавлять жестко закодированный “перец”.
Но почему?
Допустим:
- DumbWebsite.com имеет полный утечку базы данных, и их пароли хранятся в открытом виде.
- YourWebsite.com хранит зашифрованные пароли (в соответствии с лучшими практиками).
- Злоумышленник знает, что его цель использует как DumbWebsite.com, так и ваш сайт.
Что мешает злонамеренному лицу использовать утеченные email и пароль цели для входа на ваш сайт?
Разве добавление вашего собственного секретного “перца” к паролю (перед передачей его в password_hash()
) не защитит пароль вашего пользователя в этом случае?
Ответ или решение
При рассмотрении вопроса о том, почему рекомендуется не добавлять свой собственный “перец” (pepper) к паролям перед их хэшированием, важно понимать несколько ключевых аспектов, связанных с безопасностью, криптографией и архитектурой веб-приложений.
### 1. Природа “перца”
“Перец” — это дополнительный секрет, который добавляется к паролю с целью усложнить его хэширование. Он, как правило, хранится отдельно от базы данных. Похоже, что добавление перца укрепляет защиту паролей, однако эта практика вызывает ряд проблем.
### 2. Усложнение управления
Добавление собственного перца требует от разработчика строгого контроля за его хранением и использованием. Это означает, что разработчик должен создать механизм для защиты перца, а также обеспечить его конфиденциальность в коде. Если перец будет скомпрометирован или неправильно реализован, вся система безопасности окажется под угрозой.
### 3. Повышенные риски
В случае утечки базы данных (например, как в случае с DumbWebsite.com), злоумышленник получает доступ ко всем паролям в открытом виде. Если существует возможность комбинировать пароли с перцем, а злоумышленник знает, что ваш сайт использует тот же алгоритм, можно столкнуться с ситуацией, когда эквивалентные пароли будут просто заменены на компрометированные.
### 4. Непредсказуемость
При добавлении перца разработчик может столкнуться с ситуацией, когда его собственные меры безопасности будут лучше или хуже, чем другие стандартные хэш-функции. Стандартные хэш-функции, такие как bcrypt, Argon2 или PBKDF2, разрабатывались с учетом многолетних исследований и служат надежной защитой благодаря алгоритмам, которые защищают от атак.
### 5. Процесс хэширования и аутентификации
При аутентификации пользователя проверяется хэшированный пароль. Если злоумышленник получит пользовательские данные с другого сайта, содержащие хэшированные пароли с перцем, он может попытаться использовать эти данные для логина на вашем сайте. Поскольку перец может быть известен только вам, это создает дополнительную уязвимость, так как злоумышленник может пытаться найти его уязвимости.
### 6. Пользуйтесь проверенными методами
Современные подходы к хэшированию паролей уже включают в себя защитные меры, которые учитывают риски и гарантируют безопасное хранение паролей. Вместо того чтобы пытаться усложнить уже проверенные подходы, лучше полагаться на алгоритмы, прошедшие аудит безопасности и имеющие широкое сообщество разработчиков.
### Заключение
В общем, добавление собственного перца к паролям перед хэшированием не рекомендуется из-за множества связанных с этим рисков. Гораздо надежнее полагаться на проверенные методы хранения паролей, такие как использование стандартных криптографических хэш-функций и адекватных стратегий контроля доступа. Таким образом, прощение рисков и усиление безопасности можно добиться не путем усложнения, а за счет использования хорошо зарекомендовавших себя и проверенных решений.