Повдигнах темата, защото се занимавам с един алгоритъм за генериране на псевдо-произволни числа - Mersenne Twister. Та сийда на този алгоритъм се генерира като се включва като фактор и PID-то на процеса на PHP да кажем, ако се използва в PHP (функцията mt_rand).
Ако се успее да се предвиди какво ще бъде PID-то, то ще бъде по-лесно да се разбере какво ще генерира приблизително и функцията. Е, след като сме предвидили и другите фактори де.
Каква е целта на занятието? PID-а на текущият процес има ужасно ниска ентропия, на повечето линукс дистрибуции, въпреки че pid_t е typedef-нат като long, реално новия pid се AND-ва с една маска, която на практика те ограничава до 2^15 или 32 хиляди възможни PID-а. В PHP, seed-а на mt_rand() е 32-битов или 4 милиарда стойности. С други думи използваш мнооооого малка част от възможните стойности с които да seed-неш алгоритъма.
На практика, PHP също проявава престъпна простотия в името на лесното ползване - никой не е казал, че Mersenne Twister-а трябва да се seed-ва с една 32-битова стойност, seed-а на алгоритъма са първите няколко шестстотиникусур числа от една редица. В PHP за да не си измисляш толкова на брой стойности, хващат един скапан PRNG, LCG-базиран както rand(), seed-ват го с твоята стойност, генерират въпросните шестстотин и нещо стойности и с тях seed-ват mersenne twister-а.
Ако мислиш да ползваш mt_rand() за някакви security неща, примерно генериране на session cookie-та, линкове за ресетване на пароли или нещо подобно, МНОГО внимавай в картинката
Ако разчиташ само на PID-а на процеса за seed-ване примерно, със сигурност ще имаш проблеми.