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