2013-07-17 4 views
2

Я пишу приложение, которое использовало PKI для защиты электронной почты, файлов и т. Д. Используя пространство имен System.Cryptography, я создаю новую пару ключей, используя RSACryptoServiceProvider.RSA Основные значения и модуль в общедоступных/закрытых ключах

Метод:

public static void GenerateKeys(int keySize, out string publicKey, out string privateKey) 
{ 
    using (var provider = new RSACryptoServiceProvider(keySize)) 
    { 
     publicKey = provider.ToXmlString(false); 
     privateKey = provider.ToXmlString(true); 
    } 
} 

keySize = 2048.

Это приводит к открытому ключу, как (это было обрезается/дополненное «----- START/END PUBLIC KEY BLOCK -----»обертки для опрятности.

-----START PUBLIC KEY BLOCK----- 
<RSAKeyValue><Modulus>xs1GwyPre7/knVd3CAO1pyk++yp/qmBz2TekgrehYT 
WU7hs8bUCeVQrL2OB+jm/AgjdPMohWHD/tLcJy35aZgVfPI3Oa3gmXxdoLZrfNRb 
nrCm3Xr1MR7wnhMyBt5XXyU/FiF46g5qJ2DUIUg7teoKDNUSAN81JTIoH0KC+rZB 
oO3tu9PR7H75K5G2eT6oUWkWKcZZU/4WNCDasNtizTe41Jy99BjrChww5r2ctqG8 
LvIv7UeeFaK1vhxGKaNH/7JvKJI9LbewWNtmb/nRzQg9xK3e0OhblbW+o6zg5pTw 
+n37fS7pkXK7lbRfUfaQmhoGy6ox4UWGmOgm8yPu8S4Q==</Modulus><Exponen 
t>AQAB</Exponent></RSAKeyValue> 
-----END PUBLIC KEY BLOCK-----` 

Когда я смотрю на PGP на основе общественности (или частные) ключи, нет <RSAKeyValue>, <Modulus> или <Exponent> значений внутри ключа.

Я что-то не так? Я что-то пропустил? Если я распространю этот ключ, это проблема безопасности?

Crypto - новое и захватывающее поле для меня, поэтому я ДЕЙСТВИТЕЛЬНО оценил бы любые рекомендации здесь. Я обеспокоен тем, что я напортачил - шифрование на ключевые работы и дешифрование с помощью закрытого ключа работает - мне было интересно только, как клавиши PGP/GPG различаются по внешнему виду настолько и что мне нужно сделать, чтобы исправить это?

Спасибо заранее!

ответ

1

Теги RSAKeyValue, Moduleulus и Exponent находятся там, потому что вы использовали метод ToXmlString().

Открытый ключ RSA состоит из модуля и общего показателя. Нет проблем с безопасностью при распространении этих двух элементов. ОДНАКО, вы НЕ хотите распространять любые другие элементы в Private Key. Секретный ключ имеет следующие поля:

<RSAKeyValue> 
    <Modulus>…</Modulus> 
    <Exponent>…</Exponent> 
    <P>…</P> 
    <Q>…</Q> 
    <DP>…</DP> 
    <DQ>…</DQ> 
    <InverseQ>…</InverseQ> 
    <D>…</D> 
</RSAKeyValue> 

ли что-нибудь, кроме Modulus и общественного экспонента, которые находятся как в частном и государственном ключе не распространять.

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

Если вы выдаете открытый ключ в формате XML String, то приемник должен использовать метод FromXmlString() для его использования. Получатель также не имеет возможности узнать, действительно ли вы отправили открытый ключ, если вы не передадите его лично (или используйте вышеприведенный метод сертификата).