Я знаю, что mt_rand()
PHP не должен использоваться для целей безопасности, поскольку его результаты не являются криптографически сильными. Тем не менее, много PHP-кода делает это или использует его как резерв, если лучшие источники случайности недоступны.
Так насколько это плохо? Какие источники случайности используют mt_rand
для посева? Существуют ли другие проблемы безопасности с mt_rand
для криптографических приложений?
В PHP 5.4, если mt_rand
автоматически высевается при первом использовании ( источник PHP ). Начальное значение является функцией текущей временной метки, ПИД-процесса процесса PHP и значения, созданного внутренним LCG-модулем PHP. Я не проверял источник для предыдущих версий PHP, но в документации подразумевается, что этот алгоритм сеяния использовался начиная с PHP 5.2.1.
Алгоритмом RNG за mt_rand
является Mersenne Twister . На самом деле не имеет смысла говорить о том, «как это плохо», потому что это явно документировано (а не на странице документов PHP, к сожалению), что оно совершенно непригодно для криптографических приложений . Если вы хотите случайную криптопрочность, используйте задокументированный генератор криптопрочности.
Обновление: вы также можете просмотреть этот вопрос с crypto.SE.