Я пытаюсь использовать nShield из Thales для создания пары асимметричных ключей на нем. я нашел следующий example на MSDN:. Ошибка провайдера Crypto Service с использованием nShield HSM
CspParameters csp = new CspParameters(1, "eToken Base Cryptographic Provider");
csp.Flags = CspProviderFlags.UseDefaultKeyContainer;
try
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp);
key = rsa.ToXmlString(true);
}
catch(Exception ex)
{
string s = ex.Message;
}
я могу использовать KEYSAFE для подключения и успешно генерировать ключевые пары на HSM. Код выше выдает следующее исключение:
System.Security.Cryptography.CryptographicException
"Invalid Signature." System.Security.Cryptography.CryptographicException
У меня есть ощущение, что я не правильно выполнять настройку второго параметра в конструкторе CspParameters. Это то, что он говорит, что в примере:
// The 1st parameter comes from HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider Types.
// The 2nd parameter comes from HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider.
Я не вижу никаких nCipher или nShield или Фалес или что-нибудь подобное есть.
Edit:
Дрессировка:
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp);
byte[] data = Encoding.ASCII.GetBytes("string");
byte[] enc = rsa.Encrypt(data, false);
String dec = Encoding.ASCII.GetString(rsa.Decrypt(enc, false));
key = rsa.ToXmlString(true);
при вызове rsa.ToXmlString (true) Я получаю сообщение об ошибке «Отказано в доступе» и как указать HSM, чтобы не хранить ключи? – AlexandruC
Это одна из основных функций HSM для обеспечения безопасного хранения ключей. Зачем вам использовать HSM, если вы не хотите, чтобы он хранил ключи? – jariq
Я только хочу, чтобы он сгенерировал их для меня, я сделаю хранилище по-другому, они будут использоваться по-другому. – AlexandruC