посев безопасным случайным в Яве - PullRequest
1 голос
/ 31 декабря 2011

Я хочу генерировать случайные целые числа, используя SecureRandom в Java.

private SecureRandom myRandom = new SecureRandom();
private int myInt = 10;
int myResults;
myResults = myRandom.nextInt(myInt);

Я понимаю, что заполнение означает указание начальной точки для генератора случайных чисел.Должен ли я перезапускать генератор случайных чисел после каждой итерации, чтобы обеспечить случайность?

1 Ответ

2 голосов
/ 31 декабря 2011

Нет. SecureRandom запустится сам, если вы не предоставите начальное число в первый раз, и если он использует псевдослучайный генератор, последующие случайные числа будут непредсказуемыми.

Фактически, если вы попытаетесь повторно заполнить его, вы, вероятно, снизите безопасность сгенерированных случайных чисел, поскольку вам придется откуда-то получить новое начальное число (и это, вероятно, не будет столь же хорошим источником случайность как реализация SecureRandom).

В соответствии с https://www.synopsys.com/blogs/software-security/proper-use-of-javas-securerandom/,, если вы используете SecureRandom для большого числа случайных чисел, вы должны периодически его повторно заполнять, поэтому либо

Периодически выбрасывать существующий java.security.SecureRandom экземпляр и создать новый. Это создаст новый экземпляр с новое семя.

Периодически добавляйте новый случайный материал в начальное число PRNG, вызывая java.security.SecureRandom.setSeed (java.security.SecureRandom.generateSeed (INT)).

Но не перезаряжайте его после каждого звонка.

Обратите внимание, что API SecureRandom должен быть разъяснен в Java 8: http://openjdk.java.net/jeps/123

...