So zufällig sind Zufallsgeneratoren gar nicht.
Optional bestimmt man einen Startwert (seed), z.B. aus der aktuellen Uhrzeit oder durch Vorgabe des Programmierers.
Dann wird bei jedem random() dieser Wert verändert durch Multiplikation, Modulorechnung mit großen Primzahlen oder ähnlichem. Wenn du nur genug Zufallszahlen generierst, wiederholt sich die Zahlenfolge irgendwann.
Hier der Zufallsgenerator von Java (openJDK): Link
Und etwas C Code: Link