V2.4.2 Credential Storage
Requirement:#
Verify that the salt is at least 32 bits in length and be chosen arbitrarily to minimize salt value collisions among stored hashes. For each credential, a unique salt value and the resulting hash SHALL be stored. (C6)
Explanation:#
Существуют схемы формирования динамической соли, при которых значения соли генерируются для каждого входного значения индивидуально, что затрудняет составление словарей перебора, а также скрывает факт хранения одинаковых паролей, используемых разными пользователями. Также эффективность схемы увеличивается, если используется нетривиальное подмешивание по некоторому алгоритму. Например, соль можно не просто приписывать к концу пароля, а «подмешивать» в определённые промежутки пароля. К тому же хэш можно вычислять циклически, подмешивая соль частями с некоторыми изменениями, зависящими от номера итерации хэширования.
Remediation:#
Вот шаги для реализации безопасного механизма хэширования и хранения паролей, который соответствует указанным вами требованиям:
- Генерируйте уникальное значение соли для каждого пароля: значение соли должно генерироваться случайным образом и иметь длину не менее 32 бит. Это значение должно быть уникальным для каждого хэша пароля и храниться в безопасном месте вместе с результирующим хэшем.
- Хэшируйте пароль: используя безопасную хэш-функцию, такую как bcrypt, scrypt или Argon2, хэшируйте пароль с помощью сгенерированного значения соли. Это создаст уникальный хэш для каждого пароля, даже если у двух пользователей одинаковый пароль.
- Сохраните соль и хэш: Сохраните значение соли и полученный хэш в защищенной базе данных или файле. Убедитесь, что место хранения безопасно и защищено от несанкционированного доступа.
- Проверка паролей: когда пользователь входит в систему, система должна получить значение соли и хэш для учетной записи пользователя. Затем он должен хэшировать введенный пароль с извлеченным значением соли и сравнить результат с сохраненным хешем. Если два значения совпадают, пользователь аутентифицируется.
- Регулярно обновляйте хэши: в качестве меры безопасности рекомендуется периодически повторно хэшировать все сохраненные пароли с использованием новейших стандартов и алгоритмов безопасности. Это помогает защитить хэши паролей от недавно обнаруженных атак.
Следуя этим шагам, вы можете обеспечить надежное хранение паролей и защиту данных пользователей от несанкционированного доступа.
Пример хеширования на Python