web-dev-qa-db-ja.com

デスクトップアプリの資格情報を保存する

C#で記述されたデスクトップアプリケーションがあり、3つのユーザーロールといくつかの事前定義されたユーザーがあります。別のユーザーを作成したり、事前定義されたユーザーのパスワードを変更したりすることもできます。アプリはWindows XP以降でオフラインで動作する必要があります。
事前定義されたユーザーが必要な場合、ローカルマシンでユーザー資格情報を操作するための最良の方法は何ですか? Data Protection API(DPAPI)がこれを処理する最良の方法だと思いましたが、よく理解していれば、1人のWindowsユーザーにしか機能しないため、事前定義されたユーザーを出荷する必要があるため、役に立たないです。アプリのインストールであり、これらの事前定義されたユーザーをソースコードで保持することは間違いなく最善の方法ではありません(インストール後にDPAPIを使用してディスクに保存した場合でも)。

1
Artholl

資格情報をテストする必要がありますか、それとも実際に保存する必要がありますか?

ユーザーが特定の資格情報を知っているかどうかを確認するだけの場合は、安全な パスワード鍵導出関数 (たとえば、 PKBDF2BCrypt )を使用します。または SCrypt )代わりに。

資格情報を本当に保存する必要がある場合(たとえば、外部サービスに転送する必要がある場合)、答えはモデルを再考する必要があるということです。

  • リモートサービスに事前に入力されたパスワードを提供している場合(たとえば、すべてのユーザーにメールサーバー上の特定のアカウントを共有させたい場合)、ハードコードされたパスワードを使用していることを意味します。これは非常に悪いことです。おそらくそれを保護することはできず、たとえ難読化したとしても、これらのパスワードを取得することは、通常、攻撃者がそれを取得するのは非常に簡単です。そして、1人の攻撃者がそのパスワードを取得すると、他のすべての人が使用できるようにパスワードを漏らすことができます。
  • 事前に入力したパスワードが実際には後で変更されることになっている初期値である場合は、それらを空白のままにして、インストール中にユーザーに変更を強制します。
1
Stephane