web-dev-qa-db-ja.com

秘密鍵がスマートカード、ハードウェアセキュリティモジュール、TPMチップなどにある場合、C#を使用してデータを暗号化/復号化するにはどうすればよいですか

スマートカード、ハードウェアセキュリティモジュール、TPMチップ(など)とやり取りして、データを暗号化および復号化できるC#コードサンプルを知っている人はいますか?

私の目標は、アプリケーションがさまざまなキーストアをサポートできるようにすることであり、管理者が秘密キーをそれらのデバイスに常駐させることを決定した場合、それをサポートできるようにしたいと考えています。

これらのデバイスにアクセスするための一貫した、または普遍的な方法はありますか? C#を使用する方法はありますか?

4

Windowsの世界では、特別なハードウェアによる暗号化は「暗号化サービスプロバイダー」(CSP)を通過します。 CSPはOSに登録されているモジュールで、このようなハードウェアへのアクセスを提供します。

C#から、特定のCSPを指定するいくつかのパラメーターを使用して作成できる RSACryptoServiceProvider を確認できます。

Windows以外の世界では PKCS#11 を使用する傾向があります。 Googleは、PKCS#11 DLL(つまり、暗号化ハードウェアのドライバー)をC#から使用できるように見えるソフトウェアパッケージをいくつか見つけます。例: pkcs11.net および NCryptoki (前者はオープンソースであり、後者ではないようです)。

6
Thomas Pornin