Почему SecureRandom в Java называется CS PRNG, а не TRNG? - PullRequest
1 голос
/ 24 ноября 2011

SecureRandom внутренне использует другие алгоритмы, как в случае Linux, использует NativePRNG, что, в свою очередь, использует /dev/urandom.Но /dev/urandom фактически использует события прерываний и т. Д. Для генерации энтропии, которая аналогична Истинному Генератору Случайных Чисел (TRNG).Так почему же SecureRandom называется PseudoRandom Генератором чисел, хотя это зависит от реализации алгоритма, который он использует?

Спасибо

Ответы [ 2 ]

3 голосов
/ 24 ноября 2011

Я ожидаю, что это связано с гарантиями.Гарантия /dev/urandom заключается в том, что он будет использовать случайные данные, если они доступны, и заполнять псевдослучайными данными, если необходимо, чтобы избежать блокировки.Поэтому, если вы используете /dev/urandom, вы не можете претендовать на истинную случайность, даже если иногда вы ее получаете.

В документации для SecureRandom написано:

Многие реализации SecureRandom представлены в форме генератора псевдослучайных чисел (PRNG), что означает, что они используют детерминированный алгоритм для создания псевдослучайной последовательности из истинного случайного начального числа.Другие реализации могут создавать истинные случайные числа, а другие могут использовать комбинацию обоих методов.

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

1 голос
/ 24 ноября 2011

Не все операционные системы реализуют одинаковую функциональность для / dev / random, и нет никакой гарантии, что это будет что-то кроме алгоритма (хотя большинство современных систем используют прерывания и т. Д.).Вот почему Java называет его PRNG.

/ dev / random в Linux - это TRNG.

...