Моя команда получила серверный код (на 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значения.