希望将加密文件存储在PKCS#11兼容硬件令牌上

时间:2014-05-22 23:35:34

标签: smartcard usb-drive fips pkcs#11

我的C#.NET4程序已将数据存储在常规Windows文件系统上的加密文件中,我们的一位客户要求我们将程序与PKCS#11令牌(以下称为“令牌”)集成。经过一番研究,我发现了NCryptoki,我相信它将在我的程序和兼容的令牌之间提供必要的接口。

我有几个问题似乎无法找到答案,我希望这里有经验的人可以帮助我。我对PKCS#11和密码学原理一般都是新手,因此其中一些问题可能看起来有些少年。

  1. 我的理论是,令牌将能够插入到计算机中,并且使用我的程序中实现NCryptoki库的方法,加密文件将能够直接保存到它上面。只能通过程序中的向导访问这些文件。只要令牌有空间,我就能继续保存驱动器上的文件。这一切都是正确的吗?
  2. 我需要至少64K内存令牌,令牌必须至少为FIPS 140-2 Level 2,最好是3级。我看过并且只遇到了SafeNet iKey 4000.我知道必须更多具有至少64K存储空间的PKCS#11兼容令牌。我花了几个小时通过FIPS 140-1 / 2验证加密模块寻找USB存储PKCS#11令牌,但没有太多运气。有谁知道任何其他公司出售我正在寻找的东西?这可以是USB设备,甚至是智能卡。我们希望能够为客户提供多种选择。
  3. 在此之前是否有人有过这种实施的经验可以为我提供一些“经验教训”或需要注意的事项?
  4. 另外,如果这不是正确的地方,请告诉我重新发布的地方。我感谢所有的帮助!

2 个答案:

答案 0 :(得分:2)

虽然PKCS#11支持在设备上存储应用程序数据,但设备本身(我现在谈论的是USB cryptotokens和智能卡)是为不同目的而设计的。特别是,它们旨在保存一小部分秘密或敏感数据。它们不是数据存储。一些供应商提供混合令牌,其中USB cryptotoken与闪存盘相结合。但即使在这种情况下,在一种情况下这些将是两个设备。

您的方案可能会以下列方式进行修改,以便您:

  1. 生成会话密钥(可能在设备上)
  2. 使用此密钥加密您的敏感数据。
  3. 将加密数据存储在别处(例如,在混合设备的USB磁盘部分上),并使用USB cryptotoken加密/解密数据。
  4. 旁注:几乎所有的密码设备都要求将其驱动程序安装到系统中。与USB磁盘和闪存卡不同,操作系统中没有通用驱动程序可以让您插入USB密码并立即使用它而无需安装驱动程序。从用户的角度来看,这是一个麻烦,所以也要考虑到这一点。

答案 1 :(得分:0)

虽然NCryptoki很好并且您可能没有使用它的问题,但我建议您查看PKCS11Interop。它经过完全的单元测试,甚至单元测试都记录在案,并作为示例。使用它是一种快乐:)(免责声明:我不是这个库的作者。我恰好认识了作者并且一直在使用这个库。)

  1. 有可能。作为如何在智能卡上保存数据对象的参考,请查看此keypass plugin
  2. 我曾使用金雅拓卡和西门子卡,但我不知道他们是否有FIPS 140-2认证。当我搜索那个keypas插件时,我找到了Cryptostick。不会说它是否有Fips,但它有通用标准5认证,因此可能值得一看。
  3. 看看我提到的keypass插件。它是使用我之前提到的PKCS11Interop实现的。