Следует ли использовать SecureRandom в качестве синглтона или каждый раз, когда генерируется случайное число, следует создавать новый объект?
Не следует создавать много экземпляров SecureRandom
. Это дорого и может истощить источник энтропии (случайности) вашей системы.
Если у вас кончится энтропия, создание SecureRandom
может блокироваться в системном вызове ... в ожидании ... для ... больше энтропии, которую нужно собрать.
Имеет ли это какое-либо значение в отношении предсказуемости?
Это не должно иметь никакого значения для предсказуемости. Если вы рассматриваете отобранный SecureRandom
как черный ящик, не будет возможности предсказать следующее число , если вы не знаете семя и предыдущую историю генератора.
Предостережение является то, что ошибочная реализация безопасного генератора случайных чисел может фактически не быть безопасной. (Но с другой стороны, энтропия, которую вы используете для создания семян, может быть не такой случайной, как вы думаете ...).
Этот вопрос возник после прочтения о ... «Предсказуемость линейных Конгруэнтные генераторы.
LCG принципиально не безопасны. Вы не можете использовать один для SecureRandom
реализации.
javado c содержит ссылки на требования к любой реализации SecureRandom
. Если у вас есть практические проблемы, прочитайте ссылки.