Я использовал unsalted md5/sha1 в течение длительного времени, но поскольку этот метод не является действительно безопасным (и с течением времени становится еще менее безопасным), я решил переключиться на соленое sha512. Кроме того, я хочу замедлить генерацию хеша, используя множество итераций (например, 100).
Мой вопрос: должен ли я добавлять соль на каждой итерации или только один раз в начале. Вот два возможных кода:
Добавить каждый раз:
// some nice big salt
$salt = hash($algorithm, $salt);
// apply $algorithm $runs times for slowdown
while ($runs--) {
$string = hash($algorithm, $string . $salt, $raw);
}
return $string;
Добавить один раз:
// add some nice big salt
$string .= hash($algorithm, $salt);
// apply $algorithm $runs times for slowdown
while ($runs--) {
$string = hash($algorithm, $string, $raw);
}
return $string;
Сначала я хотел использовать вторую версию (добавить один раз), но затем нашел несколько скриптов, добавляющих соль каждый раз.
Итак, я задаюсь вопросом, добавляет ли он каждый раз добавление некоторой силы в хеш. Например, возможно ли, что злоумышленник нашел какой-то умный способ создать функцию 100timesSha512, которая была быстрее, чем просто выполнить sha512 100 раз?