kobezzza
@kobezzza

Оптимальные параметры для pbkdf2

Для хеширования паролей пользователей на сайте использую pbkdf2. Но я не совсем понимаю, какими должны быть оптимальные входные параметры для этой функции: сейчас поставил 1 тысячу итераций и длину ключа 512. Это нормально или нет?

Исходный код генерации хеша вместе с солью (node.js):
crypto.randomBytes(32, (err, buf) => {
	if (err) {
		return callback(err, null);
	}

	crypto.pbkdf2(password, buf, 1e3, 512, (err, encodedPassword) => {
		if (err) {
			return callback(err, null);
		}

		callback(null, {password: encodedPassword, salt: buf});
	});
});


Заранее благодарен!
  • Вопрос задан
  • 4375 просмотров
Решения вопроса 1
ntkt
@ntkt
Потомственный рыцарь клавиатуры и паяльника
Оптимальные по какому критерию? :)
Попробуйте сначала понять, от кого защищаемся и чем готовы пожертвовать.

Если нужны конкретные рекомендации, то открываем, например, NIST SP800-132 «Recommendation for Password-Based Key Derivation», глава «A2. PBKDF»
csrc.nist.gov/publications/nistpubs/800-132/nist-sp800-132.pdf
Или те же самые вещи можно прочитать тут, например: www.ietf.org/rfc/rfc2898.txt

image

У Вас 32 байта соль? Тогда все хорошо. От длины соли скорость вычисления внутри системы не сильно зависит, а вот атакующему будет сильно хуже, чем если бы соль была, скажем, 32 бита.

image

Смотрим дальше: количество итераций в PBKDF, грубо говоря, линейно увеличивает сложность атаки.
Поэтому делаем бенчмарк и ставим столько итераций, сколько влезет. 1000 рекомендовалось давно (2000 год), сейчас ставят больше — 10000 и т.д.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы