Случайные значения имеют решающее значение в компьютерном программировании для разработки безопасных систем, которые не уязвимы для злонамеренной подрывной деятельности. Криптография, например, полагается на генерирование или случайные значения и их воспроизводимость для непредсказуемого вывода. Случайные значения также играют фундаментальную роль во многих защищенных приложениях PHP, и многие библиотеки и платформы используют их для генерации токенов, солей и в качестве входных данных для других функций.
Генератор случайных чисел — это алгоритм, который генерирует последовательность, казалось бы, случайных чисел. Входное значение для инициализации такого алгоритма известно как начальное состояние или начальное число. Начальное число может быть случайным значением данных или известным значением.
В этой статье я дам вам обзор того, для чего используются случайные значения и почему они важны, а также краткий обзор того, как они генерируются.
Использование случайных значений
Случайные значения в PHP очень важны, так как они используются для самых разных целей. Методы безопасного кодирования требуют, чтобы определенные вещи, такие как токены CSRF, ключи API, одноразовые авторизации, токены сброса пароля и другие подобные вещи, создавались с большой степенью непредсказуемости. Они должны быть созданы так, чтобы их было очень сложно угадать.
Некоторые из важных применений для случайных значений:
- Генерация солей для криптографии . Солт — это случайное значение, которое используется в качестве входных данных для функции шифрования, обычно односторонней, для хеширования паролей. Эти случайные данные называются вектором инициализации для шифрования.
- Генерация уникальных идентификаторов, таких как Session IDs — PHP используется при разработке многих замечательных веб-приложений, которые требуют безопасности и постоянства для пользователей. PHP позволяет создавать настраиваемые приложения и более привлекательные веб-сайты с поддержкой сеансов, которая с помощью идентификаторов сеансов позволяет сохранять определенные данные в последующем запросе.
- Генерация трудно угадываемых токенов / одноразовых номеров для авторизации — многим PHP-приложениям требуется выполнять вызовы API для других приложений и систем. Такие вызовы часто требуют использования токенов авторизации, а не отправки учетных данных пользователя по сети. Таким образом, использование трудно угадываемых токенов очень важно, и случайные значения играют роль в генерировании этих токенов для обеспечения безопасности.
Генерация случайных значений
Чтобы генерировать случайные значения для таких целей, PHP использует генераторы псевдослучайных чисел. Доступные алгоритмы:
- Линейный конгруэнтный генератор (LCG), используемый при вызове функции
lcg_value()
. - Алгоритм Марсенна-Твистера чаще используется и используется при
mt_rand()
функцииmt_rand()
. - Функция
rand()
которая является локально поддерживаемой функцией C.
Эти алгоритмы не генерируют фактические случайные числа, но числа, которые распределены способом, который приближает реальные случайные числа. Алгоритм засеян со случайным значением для генерации псевдослучайной последовательности.
Посев Генератора
Заполнение — это инициализация генератора случайных чисел с использованием числа или вектора, который известен как начальное число. Целостность начального значения очень важна для псевдослучайных генераторов, поскольку один и тот же набор псевдослучайных значений будет генерироваться при многократном запуске с одним и тем же начальным значением. Если злоумышленник получает семя, он может предсказать будущие выходные наборы.
В PHP случайные данные для заполнения генератора случайных чисел могут быть получены двумя способами. Одним из способов является использование функции mt_srand()
для ручной установки начального числа. Этот способ в основном используется в устаревших системах или модульном тестировании, казалось бы, случайных рядов. Второй способ получить начальное значение — позволить PHP генерировать его автоматически. Это наиболее предпочтительный способ, который в основном используется в более новых версиях PHP (4.2 и выше). Алгоритм повторно инициализирует начальное число, так что одно и то же начальное число не используется снова и снова с алгоритмом Мерсена Твистера
PHP использует другие способы получения высококачественного начального числа для генерации случайных значений для использования в нетривиальных задачах, таких как шифрование. Средства предоставляются через платформу операционной системы, на которой работает PHP. Таким образом, PHP требует запуска в операционной системе, которая предоставляет начальное начальное число.
На платформах Linux доступ к семени осуществляется из <code> / dev / urandom с использованием mcrypt_create_iv()
или openssl_pseudo_random_bytes()
. Windows предоставляет криптографически безопасный псевдослучайный генератор, доступ к которому можно получить с помощью расширений, предоставляющих функции openssl_pseudo_random_bytes()
и mcrypt_create_iv()
.
Вывод
Поскольку случайные значения очень важны для приложений безопасности, а также для решения различных задач программирования, использование высококачественных начальных чисел для генераторов является фактором, который программист должен всегда иметь в виду. Использование любого начального числа для нетривиальных задач, таких как хеширование пароля, может привести к высокому риску безопасности. Обеспечить использование сильных случайных генераторов и высококачественных семян.
Изображение через Fotolia