Отменить хешированный пароль с помощью pbkdf2
Я использую алгоритм pbkdf2 для хэширования паролей. Для каждого пароля генерируется случайная соль, а количество итераций устанавливается для того, чтобы вычисление длилось около 1 секунды.
Я также сохраняю соль и хеш в буфере sambe:
-----------------------
| SaltLen | 4 |
-----------------------
| Salt | saltBytes |
-----------------------
| HashLen | 4 |
-----------------------
| Salt | hashBytes |
- ---------------------
Моя проблема в том, что этот хешированный пароль не связан с одним пользователем (у пользователя может быть несколько паролей), и мне нужно иметь возможность отменить пароль только с использованием самого пароля. Единственный способ, которым я вижу, - это хешировать пароль для отмены каждой соли в базе данных, пока не будет найден тот же хеш, который будет длиться вечно (1 секунда на соль).
Есть ли лучший способ сделать это?
1 ответ
Нет смысла рассматривать лицензии как пароли.
PBKDF2 & итерации имеют смысл только для проверок на стороне клиента. На стороне сервера они просто позволяют выполнять DOS-атаку на ваш сервер. В любом случае на сервере вы можете просто добавить задержку в 1 секунду для каждого запроса.
Вам не нужно их хэшировать, потому что только лицензии в вашей базе данных считаются действительными. Нет никакого смысла взламывать ваш сервер и красть их.
Для проверки правильности ввода лицензии вам просто нужно добавить идентификатор записи базы данных лицензии к самой лицензии, и вы точно знаете, какую запись проверять.