1

別のユーザー (対話モード) としてプロセスを実行する必要がある C# サービスがあります。そのユーザーは管理者レベルのユーザーであり、コードにパスワードを文字列として保存してはならないことを知っています。

私が行ったすべての調査は、私がやりたいことにすべてが適合していないように見える多くの方法を指しているように見えるので、私を正しい方向に向ける助けを借りることができます.

ハッシュ化された PW を構成ファイルに保存する必要はありますか? ハッシュ化された PW をコードに保存し、誰かがそれを安全な文字列に渡すことはできますか? ここで少し道に迷ったので、いくつかのガイダンスが必要です。

4

1 に答える 1

1

私が問題を正しく理解していれば、平文のパスワードが必要なので、別のユーザーとして外部プロセスを開始できます。プレーンテキストのパスワードが必要なため、これによりパスワード ハッシュが除外されます。

1) おそらく最も安全な方法は、サービスを開始するたびにパスワードを要求することです。サービスは、サービスが稼働している限り、パスワードをメモリに保持できます。

  • この方法では、パスワードをハードディスクに保存する必要はまったくありません。
  • 欠点はもちろん、サービスの開始時にパスワードを入力する必要があることです。

2) パスワードを永続化する必要がある場合、絶対に安全な方法はありませんが、Windows はまさにこの問題に対する API である Data Protection API (DPAPI) を提供しています。これは、鍵をどこかに保存しないとパスワードを暗号化できないという問題を解決します (これにより、鍵をどこに保存するかという問題が生じます...)。

using System.Security.Cryptography;

byte[] passwordBytes = Encoding.UTF8.GetBytes(plaintextPassword);
byte[] encryptedPassword = ProtectedData.Protect(passwordBytes, optionalEntropy, DataProtectionScope.LocalMachine);

このコードにより、Windows は実行中のコンピューターの情報を使用してパスワードを暗号化します。このコンピューターで実行されているプロセスだけがパスワードを解読できるはずです。

于 2017-03-20T09:05:13.540 に答える