Różnica między java.util.Random i java.security.SecureRandom

Mój zespół przekazał kod po stronie serwera (w Javie), który generuje losowe tokeny i mam pytanie dotyczące tego samego -

Cel tych tokenów jest dość wrażliwy - używany do identyfikatora sesji, linków do resetowania hasła itp. Dlatego muszą być kryptograficznie losowe, aby uniknąć zgadywania ich lub brutalnego wymuszania. Token jest „długi”, więc ma 64 bity długości.

Kod obecnie używajava.util.Random klasa, aby wygenerować te żetony. Dokumentacja ([http://docs.oracle.com/javase/7/docs/api/java/util/Random.html][1]) dlajava.util.Random wyraźnie stwierdza, co następuje:

Instancje java.util.Random nie są zabezpieczone kryptograficznie. Rozważ zamiast tego użycie SecureRandom do uzyskania kryptograficznie bezpiecznego generatora liczb pseudolosowych do użytku przez aplikacje wrażliwe na bezpieczeństwo.

Jednak sposób, w jaki kod jest obecnie używanyjava.util.Random jest to - tworzy instancjęjava.security.SecureRandom klasa, a następnie używaSecureRandom.nextLong() metoda uzyskiwania materiału siewnego używanego do tworzenia instancjijava.util.Randomklasa. Potem używajava.util.Random.nextLong() metoda generowania tokena.

Więc moje pytanie teraz - czy nadal jest niepewne, biorąc pod uwagę, żejava.util.Random jest wysiewany za pomocąjava.security.SecureRandom? Czy muszę zmodyfikować kod, aby go używałjava.security.SecureRandom wyłącznie do generowania żetonów?

Obecnie seed kodu jestRandom raz przy starcie

questionAnswers(7)

yourAnswerToTheQuestion