Проводя некоторые исследования 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 (т. Е. Трудно реализовать, когда псевдо работает отлично для большинства целей)?
благодаря
Выбор, вероятно, был сделан на основе практичности, а не надежности криптографии. Если используется RAND_bytes()
, функция может выйти из строя из-за недостаточной случайности. Автор PHP-кода, несомненно, хотел избежать ошибки PHP-функции.
Однако я замечаю, что openssl_random_pseudo_bytes()
имеет необязательный параметр crypto_strong
, который позволяет вызывающему абоненту узнать, действительно ли возвращаемые байты были криптографически сильными, по мнению OpenSSL.
В стороне, можно настроить OpenSSL с внешними механизмами, а некоторые из них (например, CHIL) используют случайный источник аппаратного обеспечения для RAND_pseudo_bytes()
и RAND_bytes()
если это то, что вам нужно.
Кроме того, в Windows PHP-код использует CryptGenRandom
.