Il mio team ha ricevuto un codice lato server (in Java) che genera token casuali e ho una domanda riguardo allo stesso -
Lo scopo di questi token è abbastanza sensibile - usato per ID sessione, collegamenti per reimpostare password ecc. Quindi devono essere crittograficamente casuali per evitare che qualcuno li indovini o li costringa brutalmente. Il token è un "lungo", quindi è lungo 64 bit.
Il codice attualmente utilizza la java.util.Random
classe per generare questi token. La documentazione per java.util.Random
indica chiaramente quanto segue:
Le istanze di java.util.Random non sono crittograficamente sicure. Prendi invece in considerazione l'utilizzo di SecureRandom per ottenere un generatore di numeri pseudo-casuali sicuro crittograficamente per l'utilizzo da parte di applicazioni sensibili alla sicurezza.
Tuttavia, il modo in cui il codice utilizza attualmente java.util.Random
è questo: crea un'istanza della java.security.SecureRandom
classe e quindi utilizza il SecureRandom.nextLong()
metodo per ottenere il seme utilizzato per creare un'istanza della java.util.Random
classe. Quindi utilizza il java.util.Random.nextLong()
metodo per generare il token.
Quindi la mia domanda ora: è ancora insicuro dato che java.util.Random
viene utilizzato il seeding java.security.SecureRandom
? Devo modificare il codice in modo che venga utilizzato java.security.SecureRandom
esclusivamente per generare i token?
Attualmente il seed del codice è Random
una volta all'avvio
Random
esegue il seeding una volta all'avvio oppure ne esegue uno nuovo per ogni token? Spero che questa sia una domanda stupida, ma ho pensato di controllare.
long
o double
valori possibili .