Моя команда получила серверный код (на Java), который генерирует случайные токены, и у меня есть вопрос относительно того же самого -
Назначение этих токенов довольно чувствительно - используется для идентификатора сеанса, ссылок для сброса пароля и т. Д. Поэтому они должны быть криптографически случайными, чтобы не допустить, чтобы кто-то их угадал или применил грубую силу. Токен является «длинным», поэтому он имеет длину 64 бита.
Код в настоящее время использует java.util.Random
класс для генерации этих токенов. Документация для java.util.Random
четко говорится следующее:
Экземпляры java.util.Random не являются криптографически безопасными. Вместо этого рассмотрите возможность использования SecureRandom для получения криптографически безопасного генератора псевдослучайных чисел для использования чувствительными к безопасности приложениями.
Однако в настоящее время код использует java.util.Random
следующее: он создает экземпляр java.security.SecureRandom
класса, а затем использует SecureRandom.nextLong()
метод для получения начального числа, которое используется для создания экземпляра java.util.Random
класса. Затем он использует java.util.Random.nextLong()
метод для генерации токена.
Итак, мой вопрос сейчас - это все еще небезопасно, учитывая, java.util.Random
что сеют с помощью java.security.SecureRandom
? Нужно ли изменять код так, чтобы он использовался java.security.SecureRandom
исключительно для генерации токенов?
В настоящее время начальный код является Random
единственным при запуске
Random
один раз при запуске или новый для каждого токена? Надеюсь, это глупый вопрос, но я решил проверить.
long
или double
значения.