Как создать ключ RSA с настраиваемым размером экспоненты

#c# #rsa

#c# #rsa

Вопрос:

Мне нужно создать пару ключей RSA с настраиваемым общедоступным размером экспоненты (в частности, 64 байта). Создание такого:

 var rsa = new RSACng();
PrivateKey = rsa.ExportParameters(true);
 

или это

 var rsa = RSA.Create();
PrivateKey = rsa.ExportParameters(true);
 

Всегда получается показатель в 3 байта: 1,0,1.

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

Комментарии:

1. Я знаю, что Microsoft CSP всегда были ограничены 32-разрядными показателями, и все функции генерации пары ключей по умолчанию, похоже, используют F4, пятое простое число или Ферма, о которых вы упоминаете (хотя, возможно, со временем все изменилось). Может быть, попробовать Bouncy Castle для C #?

2. Я предполагаю, что Bouncy Castle не может быть запущен в Linux, потому что мне требуется .Net Framework, а не Core. Существует ядро Bouncy Castle, но я не знаю, как реализовать этот код с помощью этой библиотеки.

3. Тьфу, я всегда забываю об ужасном качестве исходного кода BC, но здесь вы можете увидеть класс генерации, который включает в себя установку общедоступного показателя. Обратите внимание, что я бы не рекомендовал использовать класс в небезопасном месте из-за возможности атаки по побочным каналам при генерации простых чисел.

4. Вот пример кода (исполняемый онлайн), как создать ключ с определенным пользователем показателем степени, используя C #/.NET5/BC.NETCore. Может быть, вы сможете перенести это в свою среду. Независимо от аспекта переноса, библиотека BC требует использования чисел Ферма для экспоненты. Т.е. Вы не сможете применить показатель в 64 байта, ближайшее число Ферма — F9 с 65 байтами (2^(2^9) 1).