Microsoft RSA CSP генерирует и использует закрытые ключи, которые он может экспортировать и импортировать в формате, описанном на этой странице , и выглядит следующим образом:
BLOBHEADER blobheader;
RSAPUBKEY rsapubkey;
BYTE modulus[rsapubkey.bitlen/8];
BYTE prime1[rsapubkey.bitlen/16];
BYTE prime2[rsapubkey.bitlen/16];
BYTE exponent1[rsapubkey.bitlen/16];
BYTE exponent2[rsapubkey.bitlen/16];
BYTE coefficient[rsapubkey.bitlen/16];
BYTE privateExponent[rsapubkey.bitlen/8];
Таким образом, закрытые ключиCSP может обрабатывать (и в частности генерировать) должен иметь следующие свойства:
- Длина модуля в битах должна быть кратна 16.
- Длина каждого простого множителядолжно быть не более половины длины модуля.
- Частный показатель не должен быть длиннее модуля.
- Частный показатель, уменьшенный по модулю p-1 (соотв. q-1 ) должно быть не больше половины модуля.
Технически существует бесконечно много возможных значений для частного показателя d и аналогично для exponent1
и exponent2
, поскольку все, что имеет математическое значение, это значение d по модулю p-1 и q-1 ;было предложено принять немного более длинные частные экспоненты, если они в итоге получат меньший вес Хэмминга , потому что это приведет к некоторым преимуществам в производительности.Итог: формат, описанный выше, не позволит вам сделать это.
Другие характеристики, которые ключ должен быть должен быть приемлемым для кода Microsoft (но прямо не указано в описании выше):
- Числовое значение первого простого числа ( p , он же
prime1
) должно быть больше, чем числовое значение второго простого числа ( q , он же prime2
). - Публичный показатель (здесь закодированный в поле
rsapubkey
) должен соответствовать 32-разрядному целому числу (без знака).
Поэтому существует много пар ключей RSA, которыеноминально действителен в соответствии со стандартом RSA , но который не может быть обработан кодом Microsoft RSA CSP.Примечательным является последнее ограничение на размер общего показателя: это означает, что ограничение является более общим, чем просто CSP;если вы настроите сервер SSL, где открытый ключ сервера (в его сертификате) имеет открытый показатель, который не умещается в 32 бита, то Internet Explorer не сможет подключиться к нему.
Итак, на практике, если вы генерируете пары ключей RSA, вам необходимо убедиться, что они соответствуют приведенным выше правилам.Не беспокойтесь: насколько нам известно, эти правила не снижают безопасность.