Where does /dev/urandom gather these variables from.
Em todos os lugares, interrompa principalmente o tempo. Por exemplo, se você tiver uma placa de rede, o tempo exato que um pacote chegar será afetado pelo deslocamento entre a base de tempo de cristal na placa de rede e a base de tempo de cristal que faz o clock da CPU. O deslocamento entre dois osciladores de cristal de quartzo é afetado por variações microscópicas de temperatura da zona que se acredita serem realmente aleatórias fisicamente.
Se você tiver um disco giratório, o tempo de leitura será concluído depende da velocidade que o disco gira. Isso é afetado pela força de cisalhamento turbulenta entre a superfície do disco e o ar dentro do conjunto do disco. Enquanto isso não é acreditado para ser verdadeiro aleatoriedade física, é totalmente imprevisível ou repetível por qualquer mecanismo conhecido.
And if you have two machines set to the same time (down to the millisecond-if possible) and have the same speed, OS, etc...and take a hexdump of /dev/random with X number of bytes, will they have the same exact value (because the time was the same)?
Bem, milissegundos não seriam bons o suficiente. Você precisaria estar no mesmo nível em que a CPU mede o tempo - bilionésimos de segundo. Mas, claro, é assim que deve ser. Caso contrário, se você visse o estado de uma máquina, saberia com 100% de certeza que a outra máquina não poderia ter o mesmo estado. E como o estado deveria ser aleatório, você não deveria poder olhar para qualquer outra máquina e saber qualquer coisa sobre o estado com 100% de certeza. Contanto que as chances de isso ser conseguido sejam suficientemente baixas (digamos, menos de uma em 2 ^ 100), então está perfeitamente bem.
Mesmo que você jogue dois dados, cada um com um bilhão de lados, eles podem aparecer da mesma maneira. Desde que eles façam isso apenas uma vez a cada bilhões de vezes, então é como deveria ser.