Ian*_*ton 6

HSM通常表示硬件安全模块。这是一种通常会物理保护私钥或秘密密钥的设备,这样它们就不会进入您计算机的 RAM。大多数 HSM 会为您进行加密和签名,而不仅仅是保存密钥。

可以通过少数 API 访问 HSM 的加密功能。包括PKCS#11Chil (OpenSSL)。MSCAPI 和 CNG 供应商也存在使用 HSM。

大多数 HSM 供应商会为您提供 PKCS#11 库或 CAPI/CNG 提供程序。一旦你有了这个,那就是针对已发布的 API 进行编程的问题。

通常,使用 HSM 会遵循以下几点:

provider = HSM.Connect()
keyhandle = provider.LoadKey("my_rsa_key")
signature = provider.Sign( keyhandle, "Sha1WithRSA", "myData" )
provider.UnloadKey( keyhandle )
Run Code Online (Sandbox Code Playgroud)

不幸的是,CAPI 和 CNG 的托管部分不允许访问第三方提供商,您需要通过 C# 使用 CAPI/CNG HSM。您必须使用 PInvoke 调用直接调用非托管 CAPI/CNG 或 PKCS#11 库代码。


GWL*_*osa 5

如果它是 PKCS #11 兼容设备,您可以使用NCryptoki。从他们的网站:

NCryptoki 是一个用于 .NET 框架的库,它实现了 PKCS#11 规范,并为 C#、VB.NET、Visual Basic 6、Delphi 和其他 COM 互操作语言提供了一个 API,用于在任何应用程序中集成符合 PKCS#11 的令牌。

[...]

主要特点:

  • 符合 PKCS#11 2.20 规范
  • 兼容任何 PKCS#11 智能卡/令牌/HSM
  • 32 或 64 位平台
  • .NET 框架 2.0、3.0、3.5 和 4.0


meh*_*mak 5

我们使用了Pkcs11Interop,效果非常好。它是一个 Apache 2.0 许可的开源库。据我所知,它是最新的并且仍在维护中。