Intereting Posts
Как разбить информацию mySQL для отображения в столбцах HTML Почему cron не выполнит мой PHP-скрипт правильно? PHP отправляет ответ SOAP раньше? Как скрыть код формы из кода просмотра / проверить браузер элемента? PHP PDO Bit (1) возвращает неверный тип данных Написание приложения для чата скрыть видеоконтейнер, когда в базе данных не будет отображаться видео HTML PHP Какие решения для корзин с открытым исходным кодом PHP имеют функции, которые приносят мне пользу в качестве веб-разработчика? перенаправление URL неверно с использованием .htacess в php Не удалось включить PHP LDAP, хотя я редактировал php.ini и php_ldap.dll в нужном месте? html не распечатывает способ, которым я его ожидаю в источнике веб-страницы drupal_http_request возвращает код ошибки Отправить HTML-форму с методом GET с полным пути действия Какова цель абстрактных классов? Почему `intval (19.9 * 100)` равно `1989`?

PHP: openssl_random_pseudo_bytes () и Crypto Security vs Extreme Randomness

Проводя некоторые исследования openssl_random_pseudo_bytes () в PHP, я заметил это в реализации функции openssl_random_pseudo_bytes () в источнике PHP. Функция RAND_pseudo_bytes от OpenSSL используется для генерации возвращаемого значения в отличие от RAND_bytes, также доступного в OpenSSL.

Документация OpenSSL по этим двум функциям выглядит следующим образом:

RAND_pseudo_bytes () помещает число псевдослучайных байтов в buf. Псевдо-случайные байтовые последовательности, созданные RAND_pseudo_bytes (), будут уникальными, если они имеют достаточную длину, но не обязательно непредсказуемы. Они могут использоваться в не криптографических целях и для определенных целей в криптографических протоколах, но обычно не для генерации ключей и т. Д.

RAND_bytes () помещает в buf число криптографически сильных псевдослучайных байтов. Произошла ошибка, если PRNG не был посеян с достаточной случайностью, чтобы обеспечить непредсказуемую последовательность байтов.

Я предполагаю, что мой вопрос заключается в том, почему не использовался RAND_bytes или почему в PHP нет функции openssl_rand_bytes (), если это, в соответствии с OpenSSL, более случайным образом.

Просто любопытно. Было ли это проблемой скорости? Не достаточно надежный? Или был вопрос PRNG (т. Е. Трудно реализовать, когда псевдо работает отлично для большинства целей)?

благодаря

Solutions Collecting From Web of "PHP: openssl_random_pseudo_bytes () и Crypto Security vs Extreme Randomness"

Выбор, вероятно, был сделан на основе практичности, а не надежности криптографии. Если используется RAND_bytes() , функция может выйти из строя из-за недостаточной случайности. Автор PHP-кода, несомненно, хотел избежать ошибки PHP-функции.

Однако я замечаю, что openssl_random_pseudo_bytes() имеет необязательный параметр crypto_strong , который позволяет вызывающему абоненту узнать, действительно ли возвращаемые байты были криптографически сильными, по мнению OpenSSL.

В стороне, можно настроить OpenSSL с внешними механизмами, а некоторые из них (например, CHIL) используют случайный источник аппаратного обеспечения для RAND_pseudo_bytes() и RAND_bytes() если это то, что вам нужно.

Кроме того, в Windows PHP-код использует CryptGenRandom .