RNGCryptoServiceProvider так же хорош, как аппаратный RNG? - PullRequest
10 голосов
/ 28 сентября 2010

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

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

РЕДАКТИРОВАТЬ: Я хотел бы предположить во всем этом, что компьютер, на котором работает RNG, не является компромиссным, т. Е. На нем нет шпионского приложения.

Ответы [ 3 ]

7 голосов
/ 28 сентября 2010

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

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

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

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

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

5 голосов
/ 28 сентября 2010

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

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

4 голосов
/ 28 сентября 2010

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

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

...