使用带有MSCAPI的ncipher CSP进行AES加密

时间:2012-06-29 18:02:56

标签: c# winapi encryption aes nshield

我正在尝试弄清楚如何使用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框架中执行此操作。

2 个答案:

答案 0 :(得分:8)

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

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

如果您要在任何Vista,Server 2008或更新版本上部署,您应该考虑CAPI Next Generation或CNG:它支持生成和使用硬件保护的对称密钥,而Thales / nCipher CNG CSP支持此功能。但是,Thales / nCipher CNG CSP不支持持久对称密钥,因此,您必须将它们包装在与旧学校CAPI相同的容器密钥对中。

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

答案 1 :(得分:1)

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

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

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