Mój zespół otrzymał 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 - służy do identyfikatora sesji, linków do resetowania hasła itp. Dlatego muszą one być kryptograficznie losowe, aby ktoś ich nie zgadł lub nie zastosował brutalnej siły. Token jest „długi”, więc ma 64 bity.
Kod obecnie używa java.util.Random
klasy do generowania tych tokenów. Dokumentacja dla java.util.Random
jasno stwierdza co następuje:
Instancje java.util.Random nie są bezpieczne kryptograficznie. Zamiast tego rozważ użycie SecureRandom, aby uzyskać kryptograficznie bezpieczny generator liczb pseudolosowych do użytku przez aplikacje wrażliwe na bezpieczeństwo.
Jednak sposób, w jaki obecnie używa kod, jest java.util.Random
taki - tworzy instancję java.security.SecureRandom
klasy, a następnie używa SecureRandom.nextLong()
metody do uzyskania zarodka, który jest używany do tworzenia instancji java.util.Random
klasy. Następnie używa java.util.Random.nextLong()
metody do wygenerowania tokena.
Tak więc moje pytanie - czy nadal jest niepewne, biorąc pod uwagę, że java.util.Random
jest ono zaszczepiane java.security.SecureRandom
? Czy muszę zmodyfikować kod, aby używał java.security.SecureRandom
wyłącznie do generowania tokenów?
Obecnie ziarno kodu jest Random
jednorazowe przy starcie
Random
jeden raz przy starcie, czy też inicjuje nowy dla każdego tokena? Mam nadzieję, że to głupie pytanie, ale pomyślałem, że sprawdzę.
long
lub double
wartości.