2015-03-07 5 views
1

Мне интересно, почему у этой функции есть «псевдо» на ее имя. Могу ли я доверять тому, что эти байты действительно случайны? Я не нашел объяснений об этом в руководстве php.Действительно ли openssl_random_pseudo_bytes действительно случайный?

openssl_random_pseudo_bytes 
+1

Практически невозможно иметь истинную случайность. Даже аппаратные генераторы случайной генерации не идеальны. –

+0

Посмотрите на [Криптографически безопасные генераторы псевдослучайных чисел] (// en.wikipedia.org/wiki/Pseudorandom_number_generator#Cryptographically_secure_pseudorandom_number_generators), затем прочитайте [страницу руководства 'openssl_random_pseudo_bytes'] (// php.net/manual/en/ function.openssl-random-pseudo-bytes.php) –

+0

Это [связанный вопрос] (http://stackoverflow.com/q/28113145/4486839). – softwariness

ответ

2

Есть два вида толкования слова «Псевдо» в Псевдо генератор случайных чисел (ПСЧ). Это может означать, что результаты могут быть не полностью случайными. Это также может означать, что сам генератор случайных чисел является детерминированным. Это то, что подразумевается под псевдонимом в смысле OpenSSL.

Хорошие детерминированные генераторы случайных бит (DRBG) - еще один термин для PRNG - имеют очень высокое время цикла. Это означает, что выход должен быть неотличим от случайного, если в данных семян достаточно энтропии - он будет навсегда, прежде чем он начнет повторяться. Большинство DRBG библиотек/систем высеваются, когда они инициализируются, опять же это верно и для OpenSSL.

Часто «истинный случайный» предназначен для случайных значений, непосредственно извлекаемых из источников энтропии. Довольно часто эти источники обеспечивают достаточную энтропию, но это не обязательно означает, что энтропия хорошо распределена. Поэтому часто лучше и быстрее использовать энтропию истинного случайного источника для высева DRBG.

Теперь случайные источники часто доступны только операционной системе (поскольку они часто связаны с операциями ввода-вывода низкого уровня). Следовательно, случайное семя сначала используется для случайных пулов в ОС (например, /dev/random), которые, в свою очередь, могут использоваться для посева DRBG. Эти пулы часто уже отбелены, чтобы создать лучшее распределение.

Итак, вы получите: энтропия -> os entropy pool -> openssl random_pseudo_bytes -> PHP wrapper -> ваше приложение.

Когда на встраиваемых системах, которые вы можете захотеть внял следующее предупреждение:

Это также указывает на то, если криптостойкие алгоритм был использован для получения псевдослучайных байтов, и делает это с помощью дополнительного crypto_strong параметра. Для этого редко бывает FALSE, но некоторые системы могут быть разбиты или стары.

В противном случае это, вероятно, самый надежный источник случайных чисел.

Смежные вопросы