Моїй команді передали код із боку сервера (на Java), який генерує випадкові жетони, і у мене є питання щодо того ж -
Мета цих маркерів досить чутлива - використовується для ідентифікатора сесії, скидання пароля і т.д. Маркер "довгий", тому він становить 64 біти.
В даний час код використовує java.util.Random
клас для генерації цих маркерів. Документація для java.util.Random
чітко говориться наступне:
Примірники java.util.Random не є криптографічно захищеними. Розглянемо натомість використовувати SecureRandom, щоб отримати криптографічно захищений генератор псевдовипадкових чисел для використання у відношенні до безпеки додатків.
Тим не менш, спосіб використання коду в даний час 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
один раз при запуску
Random
один раз під час запуску, або ж він створює новий на кожен маркер? Сподіваюся, це дурне питання, але я думав, що перевірю.
long
або double
значень.