В большинстве современных операционных систем имеется криптографически безопасный генератор псевдослучайных чисел .
Например, Windows имеет CryptGenRandom . Вы можете получить доступ к тому же потоку из .NET с помощью класса RNGCryptoServiceProvider . Из C ++ вы можете получить доступ к тому же потоку, используя библиотечную функцию Microsoft C ++ rand_s . Из Python это доступно с помощью функции urandom (см. Нижнюю часть связанной страницы) в модуле os.
В отличие от обычных PRNG, CSPRNG предназначены для прохождения строгих статистических тестов на случайность. Они также предназначены для того, чтобы хорошо выдерживать серьезные атаки, даже когда их начальное или рабочее состояние становится доступным для атакующего.
Термин «псевдослучайный», используемый криптографами, может вводить в заблуждение нетехнического читателя. CSPRNG расширяет коллекцию случайных значений, называемых начальным числом, в более длинную последовательность чисел. Эта последовательность воспроизводима с учетом начального числа, но для любого хорошего CSPRNG незначительное изменение начального числа дает совершенно другую последовательность. Следовательно, до тех пор, пока по меньшей мере некоторая часть начального числа выбирается с помощью достаточно случайного процесса, злоумышленник не может предсказать результирующую последовательность, даже если злоумышленник может повлиять на оставшуюся часть начального числа.
Многочисленные важные системы, от военных коммуникаций до шифрования, которое защищает практически все онлайн-транзакции, полагаются на функционально-эквивалентную защиту между «криптографически безопасным псевдослучайным» и «случайным».
EDIT : если вам повезло работать с процессорами Intel Ivy Bridge, у вас есть еще одна очень интересная альтернатива .