RSACryptoServiceProvider - где генерируются начальные данные? - PullRequest
1 голос
/ 06 ноября 2019

У меня есть следующий код, который генерирует открытый и закрытый ключи с использованием RSA.

// generate RSA 1024
                using (var rsa = new RSACryptoServiceProvider(1024))
                {
                    var publicString = RSACryptoService.ExportPublicKeyNoHeaderFooter(rsa);
                    var privateString = RSACryptoService.ExportPrivateKey(rsa);

                    rsaKey = Convert.FromBase64String(publicString);
                }

Мой вопрос о том, как RSACryptoServiceProvider генерирует каждый раз случайный, использует ли он тип начального числа, основанный на аппаратном обеспечении или на временной метке?

1 Ответ

3 голосов
/ 07 ноября 2019

как RSACryptoServiceProvider генерирует случайное начальное число? это основано на оборудовании или на временной метке?

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

  • На машине может быть установлено оборудование, предназначенное для создания случайной криптостойкости. См. https://en.wikipedia.org/wiki/Trusted_Platform_Module

  • Аппаратное / микропрограммное обеспечение, которое контролирует последовательность загрузки - то, что мы называли BIOS - может предоставлять услуги криптографии. См. https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface.

  • Современные процессоры Intel и AMD имеют команду генерации случайных чисел, которая получает аппаратную случайность. См. https://en.wikipedia.org/wiki/RDRAND

  • Современные чипы обычно имеют высокоточные часы;младшие биты могут быть использованы в качестве источника энтропии.

  • Если ничего из вышеперечисленного не доступно, Windows может вернуться к старомодному подходу использования таймингов клавиатуры, таймингов дисков, время мыши и т. д. как источники энтропии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...