【问题标题】:.Net Crypto Service Provider error using nShield HSM.Net Crypto Service Provider 错误使用 nShield HSM
【发布时间】:2014-04-07 14:51:11
【问题描述】:

我正在尝试使用 Thales 的 nShield 在其上生成一对非对称密钥。 我在 msdn 上找到了以下example

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 或 Thales 或类似的东西。

编辑:

工作测试:

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);

【问题讨论】:

    标签: c# cryptography cryptoapi nshield


    【解决方案1】:

    您需要运行 nCipher CSP 安装向导,该向导位于开始 > 所有程序 > nCipher 下,以便在您的操作系统中注册 nCipher CSP。之后提到的注册表项将可用,您将能够从中读取确切的 CSP 名称。

    【讨论】:

    • 在调用 rsa.ToXmlString(true) 时出现“拒绝访问错误”,如何指定 HSM 不存储密钥?
    • 提供安全密钥存储是 HSM 的主要功能之一。如果您不希望 HSM 存储密钥,为什么还要使用它?
    • 我只希望它为我生成它们,我会以另一种方式进行存储,它们将以不同的方式使用。
    • @A.K 通常,所有 CSP 密钥都应该是可导出的,除非您指定 CspProviderFlags.UseNonExportableKey 标志。至少这是它与基于 Microsoft 软件的 CSP 的工作方式。但是我不确定是否可以导出 nCipher CSP 生成的密钥,因为可能有一些自定义供应商策略禁止此类操作。我认为您应该考虑使用 PKCS#11 接口,它可以让您对 HSM 进行更多控制,并且绝对允许您导出密钥。
    猜你喜欢
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    相关资源
    最近更新 更多