Разница между java.util.Random и java.security.SecureRandom
Моя команда получила серверный код (на Java), который генерирует случайные токены, и у меня есть вопрос относительно того же самого -
Назначение этих токенов довольно чувствительно - используется для идентификатора сеанса, ссылок для сброса пароля и т. Д. Поэтому они должны быть криптографически случайными, чтобы не допустить, чтобы кто-то их угадал или применил грубую силу. Маркер является "длинным" так что это 64 бита.
Код в настоящее время используетjava.util.Random
класс для генерации этих токенов. Документация ([http://docs.oracle.com/javase/7/docs/api/java/util/Random.html][1]) заjava.util.Random
четко заявляет следующее:
Instances of java.util.Random are not cryptographically secure. Consider instead using SecureRandom to get a cryptographically secure pseudo-random number generator for use by security-sensitive applications.
Тем не менее, способ, которым код в настоящее время использует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
один раз при запуске