Что делает openssl_random_pseudo_bytes & quot; криптографически безопасным & quot ;?

Мне всегда говорили, что я должен использовать openssl_random_pseudo_bytes при вводе паролей соль.

Но то, что я действительно хотел бы знать, это то, что делает его криптографически безопасным. Какая внутренняя разница между rand, mt_rand а также openssl_random_pseudo_bytes?

Заранее спасибо.

6

Решение

Различия вкратце:

  • rand использует генератор случайных чисел libc (источник), который зависит от системы и обычно не является криптографически безопасным
  • mt_rand использует известный алгоритм, Мерсенн Твистер, отсюда и название; это быстрый алгоритм, который производит хорошо распределенные, но не криптографически безопасные случайные числа
  • openssl_random_pseudo_bytes напрямую вызывает Система OpenSSL для криптографически защищенных случайностей (но см. предупреждение в полном описании)

Свойства также перечислены в таблице ниже:

введите описание изображения здесь

rand

За rand это указано в mt_rand:

Многие генераторы случайных чисел старых библиотек имеют сомнительные или неизвестные характеристики и работают медленно.

Таким образом, для rand вам нужно будет взглянуть на свою библиотеку libc, чтобы выяснить, какой случайный код фактически используется. На сайте Mersenne Twister заявлено, что в настоящее время он должен иметь сопоставимую скорость, но его характеристики зависят от системы. В нем также не указано, как он будет посеян, то есть вы можете использовать его для игры или чего-то подобного, но не для чего-то еще.

mt_rand

Mersenne Twister — это хорошо известный алгоритм, который выдает довольно хорошо распределенные случайные числа. Он имеет очень длительный период, что означает, что пройдет много времени, прежде чем будет найдено предыдущее состояние (если это происходит, оно остается в цикле, размер цикла называется периодом). MT не является безопасным, потому что можно восстановить его безопасное состояние с учетом достаточного количества данных. Это означает, что если вы сначала сгенерируете ключ, а затем используете алгоритм для чего-то другого, то злоумышленник может воссоздать ключ с учетом достаточного количества вывода. Кроме того, небезопасное начальное число как системное время используется при создании.

openssl_random_pseudo_bytes

Генератор случайных чисел в OpenSSL обычно криптографически безопасен (см. Примечание ниже); это означает, что невозможно пересчитать внутреннее состояние с учетом выходной мощности генератора.

Генератор псевдослучайных чисел в OpenSSL построен с использованием хеш-функции, в настоящее время MD5, которая должна быть безопасной для генерации случайных чисел. Он хорошо распределен и — как алгоритм MT — имеет большой период. OpenSSL, rand намного медленнее, чем MT, но все равно должен набрать довольно хорошую скорость.

Он имеет преимущество перед генераторами случайных чисел в ОС, так как не требует дополнительных потоков или системных вызовов. OpenSSL использует генератор случайных чисел операционной системы (+ возможные другие источники) для создания начального начального числа. Генераторы случайных чисел в ОС обычно являются наилучшими из возможных генераторов случайных чисел, поскольку ОС имеет доступ к источникам энтропии, которые не доступны напрямую библиотекам и приложениям.

Предупреждение: в вики OpenSSL указано, что:

RAND_pseudo_bytes возвращает псевдослучайные байты, которые могут быть криптографически сильными. Функция возвращает 1 если байты криптографически сильны, и 0 иначе. Если ваше приложение предъявляет высокие требования к целостности, оно не должно использовать RAND_pseudo_bytes,

Что отражается функцией PHP:

Если оно передается в функцию, оно будет содержать логическое значение, которое определяет, был ли используемый алгоритм «криптографически стойким», например, безопасным для использования с GPG, паролями и т. Д. TRUE если это так, иначе FALSE

Это означает, что он все еще может быть небезопасным, например, долгосрочные ключи.

Предупреждение № 2: дополнительная информация показывает, что PRNG в OpenSSL не всегда может быть безопасным независимо от возвращаемого значения. Поэтому следует проявлять дополнительную осторожность перед выбором OpenSSL.

13

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

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

По вопросам рекламы [email protected]