криптография — PHP: openssl_random_pseudo_bytes () и Crypto Security против экстремальной случайности

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

Документация OpenSSL об этих двух функциях такова:

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

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

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

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

Спасибо

2

Решение

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

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

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

Также в Windows используется код PHP CryptGenRandom.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector