2013-07-17 202 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>密鑰內的值。

我做錯了什麼?我錯過了什麼嗎?如果我分發這個密鑰,這是一個安全問題嗎?

加密是一個新的和令人興奮的領域,所以我會真正感謝這裏的任何指導。我擔心我搞砸了 - 對密鑰作品進行加密並使用私鑰解密 - 我只是想知道PGP/GPG密鑰在外觀上的差異如此之大,以及我需要如何解決此問題?

預先感謝您!

回答

1

由於使用了方法ToXmlString(),RSAKeyValue,Modulus和Exponent標籤在那裏。

RSA公鑰由模數和公開指數組成。發佈這兩個項目沒有安全問題。但是,您不想在私鑰中分發任何其他項目。私鑰具有以下字段:

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

不要散佈比模量和公共指數,這是在私營和公共鑰匙上發現的任何其他。

當分配公鑰時,通常通過發出一個帶簽名的X509證書來完成,該證書包含公鑰,將該密鑰鏈接到實體的標識信息以及來自可信機構的簽名。

如果您以XML字符串格式發出公鑰,接收方必須使用FromXmlString()方法來使用它。接收方也無法知道,除非您親自給他們(或使用上述證書方法),否則您是否真的發過公鑰。