ハードウェアセキュリティモジュールの暗号化をC#アプリケーションと統合するにはどうすればよいですか?
3 に答える
HSMは通常、ハードウェアセキュリティモジュールを意味します。これは通常、秘密鍵または秘密鍵がコンピュータのRAMに入らないように物理的に保護するデバイスです。ほとんどのHSMは、キーを保持するだけでなく、暗号化と署名を行います。
HSMの暗号化機能へのアクセスは、少数のAPIを介して行うことができます。PKCS#11、Chil(OpenSSL)を含みます。HSMを使用するためのMSCAPIおよびCNGプロバイダーも存在します。
ほとんどの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 )
残念ながら、CAPIとCNGの管理対象部分では、C#経由でCAPI /CNGHSMを使用する必要があるサードパーティプロバイダーへのアクセスが許可されていません。PInvoke呼び出しを使用して、アンマネージCAPI / CNGまたはPKCS#11ライブラリコードを直接呼び出す必要があります。
PKCS#11準拠のデバイスの場合は、NCryptokiを使用できます。彼らのウェブサイトから:
NCryptokiは、PKCS#11仕様を実装し、PKCS#11準拠のトークンを任意のアプリケーションに統合するためのC#、VB.NET、Visual Basic 6、Delphi、およびその他のCOM相互運用言語用のAPIを提供する.NETFramework用のライブラリです。
[...]
主な特徴:
- PKCS#112.20仕様に準拠
- PKCS#11スマートカード/トークン/HSMに準拠
- 32ビットまたは64ビットプラットフォーム
- .NET Framework 2.0、3.0、3.5、および4.0
Pkcs11Interopを使用しましたが、非常にうまく機能しました。これは、Apache2.0ライセンスのオープンソースライブラリです。私が見る限り、それはかなり最新であり、まだ維持されています。