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.Randomklasy do generowania tych tokenów. Dokumentacja dla java.util.Randomjasno 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.Randomtaki - tworzy instancję java.security.SecureRandomklasy, a następnie używa SecureRandom.nextLong()metody do uzyskania zarodka, który jest używany do tworzenia instancji java.util.Randomklasy. 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.Randomjest ono zaszczepiane java.security.SecureRandom? Czy muszę zmodyfikować kod, aby używał java.security.SecureRandomwyłącznie do generowania tokenów?
Obecnie ziarno kodu jest Randomjednorazowe przy starcie
Randomjeden raz przy starcie, czy też inicjuje nowy dla każdego tokena? Mam nadzieję, że to głupie pytanie, ale pomyślałem, że sprawdzę.
longlub doublewartości.