Пару слов о генерации случайных чисел в PHP

16.05.2013

Случайные числа — это неотъемлемая часть программирования, особенно если это касается систем безопасности. К примеру, криптография основывается на генерации случайных значений, для получения чисел которые невозможно предугадать. Конечно же и в PHP случайные числа играют огромную роль: с помощью них мы можем генерировать токены, соль и другие значения.

Генерация случайных чисел основывается на специальных алгоритмах. Входным параметром, от которого будет отталкиваться алгоритм, может быть как случайное значение, так и заранее определённое.

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

Использование случайных чисел

В PHP случайные числа играют огромную роль, т.к. очень часто используются для различных целей. В основном, они связаны с безопасностью. На их основе генерируются токены CSRF, ключи API, значения для аутентификации, значения для сброса паролей и многое другое. Всё это делается, для того чтобы получаемые значение было невозможно предугадать.

Самые важные примеры применения случайных значений:

  • Генерация соли для криптографии — случайное число соли используется, как правило, для шифрования “в одну сторону”, а также для хэширования паролей. Это случайное значение используется как вектор инициализации в криптографии.
  • Генерация случайных значений, таких как ID сессии — PHP используется для создания огромного количества приложений, где безопасность стоит на первом месте. Многий функционал базируется на работе с сессиями и сгенерированными ID сессий.
  • Генерация токенов для аутентификации, которые практически невозможно предугадать — многие PHP приложения базируются на работе с другими системами через специальные API интерфейсы. Обычно перед использованием API нужно пройти процесс аутентификации. Получать трудно-подбираемые значения для токенов очень сложно. Именно поэтому в данных задачах используются случайные числа.

Генераторы случайных чисел

Случайные числа, использующиеся в случаях, описанных выше, в PHP генерируются псевдо-генераторами. Всего доступно несколько алгоритмов:

Фактически данные функции возвращают не случайные числа, а числа, распределённые таким образом, что они выглядят как случайные. Последовательность этих чисел зависит от базового случайного числа внутри реализованного алгоритма.

Базовые числа для генераторов

Базовые числа или вектора таких чисел — это наборы данных, которые используются для генерации случайных чисел. Псевдо-генераторы случайных чисел работают, только отталкиваясь от них. Если злоумышленник узнает это базовое число, то в будущем сможет предугадать значения ваших случайных чисел.

В PHP вы можете задать базовые числа двумя способами. Первый — это используя функцию mt_srand(). Этот способ в основном используется при юнит тестах случайного ряда. Второй способ — это предоставление PHP право самому генерировать базовые числа. Начиная с версии 4.2, PHP предоставляет эту возможность. В последствии для генерации случайных чисел будет задействован Вихрь Мерсенна.

PHP генерирует базовое число, в зависимости от операционной системы. На платформах Linux можно воспользоваться функциями mcrypt_create_iv() или openssl_pseudo_random_bytes() в /dev/urandom. Windows предоставляет специальный псевдо-генератор, к которому можно получить доступ через функции openssl_pseudo_random_bytes() и the mcrypt_create_iv().


 

Итог

Поскольку случайные числа играют огромную роль в построении безопасных веб приложений, то нам нужно больше знать о том, как они работают. Если вы сами захотите генерировать базовые числа для псевдо-генераторов, то убедитесь в надёжности ваших методов.

Источник:

Другие темы:

10-Красивых Галерей+jQuery,CSS3,Флэш
Практика верстки сайта под мобильные устройства
Бизнес с Китаем
Курс Сайт на Joomla за 7 часов