秘密鍵を格納するのに十分な安全な鍵コンテナ?
-
12-09-2019 - |
質問
私は .NETでキーコンテナ約読んでいましたA>非対称暗号化とデジタル署名のための秘密鍵を格納するための安全な場所ます。
など私の質問は、キーコンテナどのように安全ですか?私はキーコンテナ名を知っていれば私が見つけたので、私は、次の使用してプライベートキーを取得することができるようになります。
// Create the CspParameters object and set the key container
// name used to store the RSA key pair.
CspParameters cp = new CspParameters();
cp.KeyContainerName = ContainerName;
// Create a new instance of RSACryptoServiceProvider that accesses
// the key container MyKeyContainerName.
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);
// Display the key information to the console.
Console.WriteLine("Key retrieved from container : \n {0}", rsa.ToXmlString(true));
キーコンテナに秘密鍵を格納するために安全な場所はありますか?
解決
それは本当にあなたの要件によって異なります。
RSACryptoServiceProvider背後にあるキーストアは本当にCryptoAPIのキーストアです。ここでの鍵は、ユーザーの資格情報(ユーザーストアを使用している場合)またはマシンのクレデンシャル(マシンストアを使用している場合)の下に保護されたファイルシステムに格納されています。これは、適切な資格情報へのアクセス権を持つ攻撃者は、秘密鍵を抽出することができることを意味します。
このは、すべての暗号スマートカード内のキーを格納しない実装、ハードウェアセキュリティモジュール、TPMチップなどのためにtrueになります。
能力の低い攻撃者から保護するために、それゆえのCryptoAPIとRSACryptoServiceProviderはあなたに非エクスポートするための鍵を設定する可能性を提供します。これは、CryptoAPIの/ .NETは、あなたのための秘密鍵のエクスポート(しかし、知識の豊富な攻撃者はまだこの問題を回避することができるようになります)を実行することを拒否することを意味します。これを行うには、CspProviderFlags.UseNonExportableKey
で鍵を生成します。
また、確認のために、ユーザと秘密鍵が使用されるたびに、オプションの追加のパスワードを聞いてきますCspProviderFlags.UseUserProtectedKey
を使用することができます。