Как работает RSA в C#?

День добрый, тов. программисты. Пытаюсь сделать приложение для RSA шифрования, но не могу понять одной вещи.

В RSACryptoServiceProvider явно задаю длину ключа, где byteLenRSAKeys = 2048

rsa = new RSACryptoServiceProvider(byteLenRSAKeys);
// Экспортирую ключи        
privateKey = rsa.ExportParameters(true);

В дальнейшем выясняется, что фактическая длина ключа другая:

введите сюда описание изображения

256 * 2 + 128 * 5 = 1152

Создаю 2048, а по факту 1152. Кто может объяснить? Я что-то делаю не так или дело в самом RSACryptoServiceProvider?


Ответы (1 шт):

Автор решения: Exploding Kitten

Не все приведенные составляющие являются часть ключа. Насколько я помню. Размер влияет только на Modulus, т.е. вы указали 2048 бит, то у вас он и будет равен 256 * 8 = 2048.

  • Exponent это некое простое число, часто его берут как 65537.
  • P и Q два простых числа, на основании которых будут высчитываться другие числа, в том числе и Modules, размер этих чисел обычно берется как половина ключа.
  • D, DP, DQ - разные экспоненты.
  • InverseQ - коэфициент.

Публичный ключ состоит Modules и Exponent. Приватный - из всего что перечислено выше, но напрямую это не зависит от ключа, эти все поля нужны, чтобы каждый раз и не рассчитывать заново, т.к. в теории будет хватать только P, Q, Exponent.

→ Ссылка