2016-12-12 7 views
0

Я хочу подписать и проверить данные с помощью RSACryptoServiceProviderRSACryptoServiceProvider Public/Частные ключи Импорт

Для этого мне нужно открытых и закрытых ключей.

В моем проекте я храню файлы MyPublic и Private в файлах XML.

Один раз, я произвожу MyPublic и частные ключи

public bool SignutureCheckForVerify(string myData, byte[] SignedData) 
    { 
     ... 

     RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(); 
      RSAalg.FromXmlString(MyPublicKey()); 
     return RSAalg.VerifyData(Encoding.ASCII.GetBytes(myData), new MineCryptoService(), SignedData); 

     ... 

    } 

    private static string MyPublicKey() 
    { 
     return "<RSAKeyValue><Modulus>-----Pubic Key Here ----</RSAKeyValue>"; 
    } 

В Выше я показал, что «Проверка через данные открытые ключи»

Мой метод SignData похож.

В там,

RSAalg.FromXmlString(GetPrivateKey()); 
    ... 
    RSAalg.SignData(...) 

Мой вопрос си, что; На каком-то примере я это признал; Импорт государственных и частных ключей через файлы сертификата crt/pem/cert и т. Д. Там я хранил файлы XML.

İs Мое решение не так?

Второй вопрос, который,

Если я использую этот метод импортировать ключи

https://msdn.microsoft.com/en-us/library/tswxhw92(v=vs.110).aspx

GetKeyFromContainer ("MyKeyContainer");

IS MyKeyContainer личные и открытые ключи статические?

В каждом прогоне, Могу ли я иметь тот же закрытый ключ/открытый ключ

или каждый работает у меня есть различный набор ключей?

ответ

0

Является ли Мое решение неправильным?

Это зависит от ваших требований и модели угрозы. Генерация подписи RSACryptoServiceProvider должна быть явно задана хешем, отличным от MD5 или SHA-1. Из вашего вопроса неясно, произошло ли это.

Если я использую этот метод для импорта ключей

https://msdn.microsoft.com/en-us/library/tswxhw92(v=vs.110).aspx

GetKeyFromContainer("MyKeyContainer");

Является MyKeyContainer частных и открытых ключей статические?

Да, это общая идея использования магазина ключей в любом случае.

При каждом запуске, могу ли я иметь тот же секретный ключ/открытый ключ? Или я должен иметь разные ключи при каждом создании подписи?

Да, вы можете, учитывая, что используете большой размер ключа, скажем, 2048 бит или выше.


На самом деле, для вашего решения будет обеспечить потребности приемника к доверия открытого ключа. Когда доверие не установлено, любой может отправить вам свой открытый ключ.

+0

Очень много за ваш ответ. Что можно хранить в файле XML для хранения ключей. И каковы различия между Storege в XML и Storege в файле сертификата. Вы можете мне помочь? –

+0

XML используется для запатентованного хранения Microsoft. Сохранение открытого ключа в сертификате позволяет хранить дополнительные данные в сертификате. Сертификаты могут быть «самоподписаны» с закрытым ключом или подписаны центром сертификации (или, в случае PGP, «anybody»), который позволяет вам создавать PKI. Обратите внимание, что тема «управление ключами» огромна. Он выходит за пределы StackOverflow, чтобы обсудить все варианты и последствия конкретных вариантов. –

+0

@MaartenBodewes RSACryptoServiceProvider требует алгоритма в качестве аргумента, что вы имеете в виду по умолчанию для SHA-1? (Он поддерживает только SHA-1 для OAEP, но это шифрование, а не подписание). – bartonjs