rand(), емнип, это линейный конгруэнтный метод, плохой, небезопасный для криптографии, но зато быстрый. А так, без внешнего источника "случайности", компьютер не может генерировать случайные для нас числа, т.к. компьютер действует по строго определённой логике, поэтому люди придумывают сложные алгоритмы псевдослучайных чисел, которые выдают последовательность, похожую на случайную, если же нужны действительно случайные числа, то нужно брать их из физических процессов, которые мы предсказать не в силах. Для примера, когда мы бросаем кубик, мы предполагаем, что выпавшее число случайное, но на самом деле это не так, если знать начальное положение кубика, учесть все силы, действующие на него до падения(трением о воздух в принципе можно пренебречь) и поверхность, на которую он упадёт, то можно предсказать, какое там будет число ещё до того, как он упал, но мы этого не знаем и предсказать не можем, поэтому считаем его случайным. В компьютере в качестве такого кубика может служить аппаратный генератор(
https://ru.wikipedia.org/wiki/RdRand), шум с звуковой карты, сигнал с вебкамеры, движение мыши, какие-то другие действия пользователя, которые для компьютера являются случайными, а лучше несколько таких источников, смешанных по особым алгоритмам. Для примера можете написать в командной строке линукса
cat /dev/random
он начнёт выдавать какие-то непонятные символы и рано или поздно они закончатся, если подвигать мышью, на экране может появиться ещё несколько символов.