Как сгенерировать случайные данные с помощью RSA?

После загрузки моего объекта RSACryptoServiceProvider rsa я хотел бы создать ключ для моего объекта AES. Поскольку мне не нужно хранить ключ AES (он нужен мне только для дешифрования на моей стороне prv), я считаю, что мне не нужно его хранить, и я могу сгенерировать его с помощью своего открытого ключа.

Я думал сделать rsa.Encrypt (byte [] с 4 жестко закодированными байтами); генерирует нужные мне данные. Оказывается, каждый раз, когда я вызываю эту функцию, даже с одними и теми же данными, я получаю разные результаты. Так что у меня нет возможности воссоздать ключ AES, если он каждый раз меняется.

Как я могу сгенерировать данные с помощью RSA таким образом, чтобы в любой момент можно было воссоздать их заново?


person Community    schedule 14.06.2010    source источник


Ответы (1)


Вы не генерируете ключ AES с вашим открытым ключом. Вы генерируете ключ AES с помощью генератора случайных чисел и шифруете его открытым ключом получателя. В .NET у вас будет, например, AesCryptoServiceProvider для ваших функций AES и RSACryptoServiceProvider для основных транспортных функций. Обычная последовательность событий для шифрования данных, отправляемых Бобу, следующая:

  1. Создайте случайный ключ AES с помощью метода AesCryptoServiceProvider.GenerateKey.
  2. Зашифруйте свои данные с помощью AES.
  3. Получите ключ AES из свойства Key экземпляра AES.
  4. Зашифруйте этот ключ AES ключом RSA Боба с помощью RSACryptoServiceProvider.
  5. Передайте это вместе с зашифрованными данными Бобу.

Когда Боб получает эти данные, он использует свой закрытый ключ RSA, чтобы отменить эти шаги.

Обратите внимание, что это упрощенное описание того, что делается в стандартах шифрования сообщений, таких как CMS и PGP. В общем, вместо того, чтобы изобретать колесо, вам следует подумать об использовании одной из этих реализаций на C #.

РЕДАКТИРОВАТЬ

В System.Security.Cryptography.Pkcs Namespace, похоже, имеет дело с CMS. Я ими не пользовался.

person President James K. Polk    schedule 14.06.2010
comment
Я никогда не слышал о реализации того и другого в библиотеке .NET. - person ; 14.06.2010
comment
Я жду несколько дней или 2 недели в надежде на другой. - person ; 23.06.2010