web-dev-qa-db-ja.com

Windowsのアプリケーションベースにクライアントシークレットを安全に保存する方法

貴重なクライアントデータ(パスワード、OAuthトークンなど)を1つのアプリケーションからのみアクセスできるように保存したい(アプリケーションベースでの分離)。メカニズムは透過的でなければならないユーザー-追加のパスワード保護は苛立たしくなります。

Windowsでそれを達成する方法はありますか?

(Androidの場合、このような分離は、各アプリケーションに一意のユーザーIDを割り当て、標準の* nixメカニズムを利用することで可能になります。)

分離ストレージ( http://msdn.Microsoft.com/en-us/library/3ak841sy.aspx )の存在を認識していますが、ドキュメントには、貴重なデータを保存することは推奨されていないことが明記されています:

次の状況では、分離ストレージを使用しないでください。

  • 分離されたストレージは、信頼性の高いコード、管理されていないコード、またはコンピューターの信頼されたユーザーから保護されていないため、暗号化されていないキーやパスワードなどの価値の高いシークレットを保存します。
5
random_crane

[〜#〜] dpapi [〜#〜] を使用して、データを分離ストレージに保存する前に暗号化する必要があります。 DPAPIは主にアプリごとではなくユーザーごとのセキュリティを対象としていますが、シナリオにはいくつかの規定があります。

ログオンパスワードを使用することの小さな欠点は、同じユーザーで実行されているすべてのアプリケーションが、知っている保護されたデータにアクセスできることです。もちろん、アプリケーションは独自の保護されたデータを格納する必要があるため、データへのアクセスを取得することは、他のアプリケーションにとって多少難しいかもしれませんが、不可能ではありません。これに対処するために、DPAPIでは、アプリケーションがデータを保護するときに追加のシークレットを使用できます。この追加のシークレットは、データの保護を解除するために必要です。

3
Bruce