`System.Security.Cryptography.RSACryptoServiceProvider`クラスを使って、鍵をコンテナに格納しようとしています。コンテナ名を指定することになりますが、このコンテナ名には何を指定して、どのように管理していますでしょうか。

コンテナ名が分かれば格納されている鍵も取得できてしまうのであれば、コンテナ名こそがキーやパスワードに相当してしまう重要な値であるように思えてしまうのです。

```

    //CspParametersオブジェクトの作成
    CspParameters cp = new CspParameters();
    
    //キーコンテナ名を指定する
    //これさえわかれば鍵を取得できてしまう？
    cp.KeyContainerName = "キーコンテナ名";
    
    //RSACryptoServiceProviderオブジェクトを作成
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);
    
    //鍵を取得
    return rsa.ToXmlString(true);
    
```
CC BY-SA 3.0
2016-09-18T04:44:40.290
28961
2016-09-21T06:11:46.960
2016-09-21T05:18:04.577
8000
18829
question
c# .net security
CryptoAPIはコンテナ名が分かれば鍵を取り出せてしまうが、どのようにコンテナ名を選定・保管すべき？
コンテナー名ではなくアクセス制御リスト(`CryptoKeySecurity`)で信頼できないユーザーのアクセスを防ぐべきかと思います。  
逆に正規のアプリケーション実行権限を持ったユーザーが不正な方法で秘密鍵を閲覧するのを防ぎたいのであれば、キーはローカルマシン上ではなくWebアプリケーションなど直接アクセスできない場所で管理すべきでは。
CC BY-SA 3.0
2016-09-21T06:11:46.960
29020
2016-09-21T06:11:46.960
5750
28961
answer