私が問題を正しく理解していれば、平文のパスワードが必要なので、別のユーザーとして外部プロセスを開始できます。プレーンテキストのパスワードが必要なため、これによりパスワード ハッシュが除外されます。
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 は実行中のコンピューターの情報を使用してパスワードを暗号化します。このコンピューターで実行されているプロセスだけがパスワードを解読できるはずです。