Если PHP mt_rand () использует более быстрый алгоритм, чем rand (), почему бы просто не изменить rand () для использования более новой реализации?

Цель случайной функции числа – получить – вы догадались – случайное число, то, что вы не можете предсказать (или очень сложно предсказать с уверенностью). Если функция mt_rand() быстрее и менее предсказуема (более «случайная»), чем старая rand() , почему бы просто не переключить базовую реализацию на новый метод?

Другими словами, какая программа, использующая rand() будет разбита на более позднюю версию PHP, если /, потому что базовая реализация изменилась?

В основном потому, что это путь PHP . Точно так же, как они добавили mysql_real_escape_string вместо замены mysql_escape_string .

Однако это также может быть связано с недостатками, которые имеет алгоритм mersenne-twister (я не имею в виду, если они также присутствуют в алгоритме rand() ):

Алгоритм в его родной форме не подходит для криптографии (в отличие от Blum Blum Shub). Наблюдая за достаточным количеством итераций (624 в случае MT19937, поскольку этот показатель представляет собой размер вектора состояния, из которого производятся будущие итерации) позволяет предсказать все будущие итерации. Мамато Мацумото и др. Предложили пару криптографических потоковых шифров, основанных на выходе из Mersenne twister. Авторы утверждают, что скорость в 1,5-2 раза выше, чем Advanced Encryption Standard в режиме счетчика. википедия

Другая проблема заключается в том, что может потребоваться много времени, чтобы превратить неслучайное начальное состояние (в частности, наличие многих нулей) в вывод, который проходит тесты случайности. Небольшой запаздывающий генератор Фибоначчи или линейный конгруэнтный генератор запускаются гораздо быстрее и обычно используются для засева Mersenne Twister со случайными начальными значениями. википедия

Оба алгоритма являются псевдослучайными. Это означает, что знание начальных условий позволяет узнать обо всех будущих итерациях. Невозможно узнать, полагается ли кто-либо на такие детали реализации (т. Е. Полагаться на реализацию функции, а не на намерение функции), и поэтому более безопасно создавать новую функцию.