Является ли RNGCryptoServiceProvider столь же хорошим, как аппаратный RNG?

Я пытаюсь выяснить, действительно ли аппаратный RNG безопаснее, чем RNGCryptoServiceProvider.

Учитывая, что случайность из RNGCryptoServiceProvider предоставляется с использованием различных системных и пользовательских данных, таких как идентификатор процесса, идентификатор потока, системные часы, системное время, системный счетчик, состояние памяти, кластеры свободного диска и хэшированный блок пользовательской среды вместе с международным стандартом криптографические алгоритмы [ref], действительно ли есть веские причины использовать аппаратный RNG для приложения безопасности, помимо скорости?

EDIT: Я бы хотел предположить, что компьютер, на котором работает RNG, не состоит, т.е. на нем нет шпионского приложения.

Ответ 1

Это большой вопрос, и я подозреваю, что ответ (как предложил Хенк) более теоретический. Аппаратный компонент может быть использован для генерации белого шума, затем выборки и использования в качестве аппаратного RNG. Теоретически это было бы "более случайным", чем использование таймингов из системы.

На практике, однако, RNG подвергаются тестированию, когда они проходят через сертификацию FIPS. RNGCryptoServiceProvider прошел сертификацию FIPS 140-2 (источник: http://technet.microsoft.com/en-us/library/cc750357.aspx)

Некоторые ответы основаны на неправильном понимании того, что, поскольку программное обеспечение RNG использует известные источники для своих входных значений, тогда эти входные значения могут контролироваться и обнаружено семя.

Это не истинная слабость (если бы это было то же самое можно сказать о аппаратном RNG, мы могли бы отслеживать его текущее (одиночное?) значение и определять семя)

Слабость (если таковая имеется) заключается в том, что большинство программных RNG используют источники входных данных, которые можно манипулировать (в некоторой степени) в программном обеспечении. Это позволило бы эффектно обработанному вредоносному ПО манипулировать аппаратным обеспечением до точки, где RNG выводит предсказуемое (то есть неслучайное) число.

Ответ 2

Нет, RNGCryptoServiceProvider не так хорош, как использование аппаратного обеспечения.

Но это намного дешевле и доступно на каждой машине. И достаточно хорошо (и достаточно быстро) для большинства случаев использования.

Ответ 3

Независимо от параметров, используемых реализацией PRNG в качестве семени, они имеют ограниченное количество энтропии - не более длины представлений значений, но на самом деле намного меньше (например, PID легко ограничить вероятным диапазоном, системное время очень легко угадать точно и т.д.). Независимо от того, сколько данных, которые вы генерируете из PRNG, высевали таким образом, количество энтропии остается неизменным, и, следовательно, объем работы, требуемый для определения семени, остается неизменным.

С аппаратным RNG, напротив, количество энтропии - это количество генерируемых данных. Там нет возможности грубой силы искать набор возможных значений семени, потому что нет никакого состояния для использования.