7

我试图弄清楚如何使用 MCSAPI 与 ncipher 加密服务提供商 (CSP) 进行 AES 加密。令我困惑的是AesCryptoServiceProvider构造函数不接受一个CspParameters类,用于将 nCipher 指定为 csp。

CspParameters cp = new CspParameters(24, "nCipher Enhanced RSA and AES Cryptographic Provider");
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(CspParameters)  // works fine
AesCryptoServiceProvider aes = new AesCryptoServiceProvider();   // Constructor takes no parameters.

据我所知,Rijndael 类也没有办法指定其他第三方 CSP。我错过了什么?有没有办法初始化我的整个系统以为所有后续加密调用加载 CSP?我是否想使用 CSP 来管理对称密钥,然后使用默认值AesCryptoServiceProvider来加密/解密? RSACryptoServiceProvider(CspParameters)工作得很好。但我想做对称加密。我需要在 C# .NET 框架中执行此操作。

4

2 回答 2

8

Microsoft CAPI 不支持对称算法的硬件保护密钥。这是 API 的缺点,而不是 nCipher CSP 的缺点。唯一可以受硬件保护的密钥是 CAPI 容器的签名和交换密钥对。创建的任何对称密钥都是在软件中生成和使用的。

您可以将(软件)对称密钥包装在(硬件)容器密钥中以进行保护和持久性,但这不会使这些对称密钥受到硬件保护。

如果您在任何 Vista、Server 2008 或更高版本上进行部署,则应考虑 CAPI Next Generation 或 CNG:它支持生成和使用受硬件保护的对称密钥,并且 Thales/nCipher CNG CSP 对此提供支持。但是,Thales/nCipher CNG CSP 不支持持久对称密钥,因此您必须将它们包装在容器密钥对中,就像使用老式 CAPI 一样。

我为泰雷兹工作,但不代表他们:如果您有任何问题和/或想了解如何获得开发人员支持,请联系泰雷兹支持。

于 2012-07-08T23:02:11.773 回答
1

AES 是一种对称算法,因此不能使用 CspParameters。

nCipher 是一种硬件标准(请参阅http://technet.microsoft.com/en-us/library/dd277354),因此您的令牌可以计算 AES 算法,但每个人(Alice 和 Bob)都需要知道密钥在硬件令牌上计算或存储密钥没有任何好处。

您可以在MSDN 示例中看到如何使用 AesCryptoServiceProvider ,也许您想使用AesManaged(还有一个示例)。

于 2012-07-05T14:34:20.253 回答