Ответ Дейва довольно приятно возобновить его, но, чтобы уточнить немного по второму варианту:
Реальный аппаратный генератор случайных чисел использует источник физической энтропии. Таким источником энтропии могут быть космическое излучение, электрические помехи, эффект Аванланша от диода с обратным смещением (или транзистор BJT), схема Чуа и т. Д. Чем меньше детерминированный источник энтропии, тем лучше качество случайного вывода. Идеальным источником энтропии было бы использование эффекта квантовой физики или чего-то, что не может быть смоделировано с помощью детерминированных уравнений.
Другим важным фактором, связанным с генераторами случайных чисел, является то, что источник энтропии может генерировать только ограниченное количество энтропии за единицу времени. Хорошим примером является схема Чуа: хотя она довольно случайная, она имеет очень низкую скорость и не может быть использована для реальных приложений.
Во многих процессорах / микроконтроллерах со встроенными RNG используется сдвиг тактовой частоты от 2 до 4 тактов, которые намеренно неправильно синхронизированы. Затем они используют как аналоговые, так и цифровые фильтры, чтобы еще больше рандомизировать шаблон и сдвинуть результат в регистр. Выполнение такой фильтрации требует нескольких циклов, что объясняет минимальное количество циклов, требуемых для данного тактового генератора, прежде чем будет доступно более новое значение.
Дрейф часов - это не совсем квантовый эффект, поэтому его можно смоделировать, но он достаточно случайный, поскольку он зависит от множества параметров, таких как температура, кремниевый процесс, частота работы, электрические помехи, фоновое излучение и т. Д. ,
В приложениях, где аппаратный RNG не обладает достаточной пропускной способностью (например, в криптографических приложениях с высокими требованиями), довольно часто используется аппаратный RNG в качестве начального числа для генератора псевдослучайных чисел, такого как функция rand () в sdtlib. Однако такое приложение обычно обеспечивает лучшую реализацию rand (), которая специально разработана для запуска из начального числа, которое может очень часто отбрасываться с истинными случайными значениями. В более новом процессоре Intel со встроенными аппаратными RNG часть псевдослучайного алгоритма непосредственно интегрирована в кремний, поэтому он выполняется аппаратно, обеспечивая очень высокую случайную пропускную способность.
Если вы не возражаете против самого метода rand (), это всего лишь математическое выражение, предназначенное для генерирования достаточно большого количества энтропии. Достаточно большой, зависящий от приложения: для поколений криптографических ключей случайность должна быть более высокого качества, чем случайность, необходимая для простого случайного воспроизведения в вашем любимом музыкальном проигрывателе. Очевидно, что чем выше качество случайного вывода, тем выше вычислительная стоимость случайного числа.
Операции, связанные со случайным числом, очень похожи на те, которые используются при вычислении хеша MD5 файла: они пытаются использовать своего рода битовый лавинный эффект, так что однозначное изменение начального значения изменяет весь шаблон генерации. В качестве примечания, я НЕ рекомендую использовать MD5 в качестве генератора псевдослучайных чисел; это был только пример. Это было бы неэффективно и не так случайно, но суть в том, что если вы передадите один и тот же файл алгоритму хэдинга MD5, вы всегда будете получать один и тот же детерминированный вывод, почти так же, как вы всегда получали бы один и тот же вывод из функция rand (), если вы вводите то же самое начальное число, если ваша реализация не зависит от некоторых произвольных элементов, таких как текущее время.