2009-03-17 9 views
6

私の.Netアプリケーションがユーザの代わりにいくつかのリモートサービスにログインするためにユーザ名/パスワードをどこかに保存する必要があります。レジストリに値を「秘密」として保存することが可能であることはわかっています。これは、Windowsドメインのユーザートークンなどで暗号化されていることを意味します。言い換えれば、私は自分自身で暗号化に対処する必要はありません。パスワードをレジストリに "秘密"として保存する

明確にする:私はパスワードのハッシュを保存することはできません。これらの資格情報はサードパーティ製のシステム用で、私のユーザーに代わってこのシステムにログインできる方法は、何らかの形で資格情報を保持し、それらを復元できるようにすることです。

とにかく、レジストリにこのような場所があるのは漠然としていますが、詳細は暗いです。そして、私はC#でそれを行う必要があります(しかし、それは重要ではないはずの簡単なレジストリアクセスの場合)。

編集:もう1つのことは、Windowsユーザーセッション(ユーザーログオフ後にパスワードが判読できない場合はIOWには役立たない)の間に維持する必要があります。

+0

@Assaf - はい、暗号化機能はWindows自体の一部であり、要素はユーザーセッション間で保持されます。 – overslacked

答えて

10

あなたはおそらくデータ保護APIを考えています。 MSDNまたはread some blogsを検索し、それが機能するかどうかを確認してください。

+0

はい、良いキャッチ! DPAPIは、OPが話しているようだ。 – Cerebrus

+0

暗号化はユーザーセッションより永続的ですか? (つまり、ユーザーがログオフして戻った場合や十分な時間が経過した場合でも、データは読み込み可能ですか?) –

5

ユーザーごとのキーを使用して暗号化できるSystem.Security.Cryptography.ProtectedDataを試すことができます。 http://msdn.microsoft.com/en-us/library/system.security.cryptography.protecteddata.aspx.

ユーザーとして実行されているコードがデータを復号化できるため、完全に安全ではありません。

+0

暗号化はユーザーセッションより永続的ですか? (つまり、ユーザーがログオフしてから再度ログオンするか、十分な時間が経過してもデータが読み取れる場合) –

+0

はい、ユーザーごとの暗号化キーです。 – Michael

0
  • 資格情報を平文として保存しないでください。対称キー暗号を使用します。実行時にパスワードを取り出す。暗号化機能に関するMSDN referenceを参照してください。
+0

実行時にパスワードを削除することはどういう意味ですか?私がバイナリを調べる誰よりも対称キーを使用すると、それを引き出すことができます。 –

+0

バイナリを見せてください。複数のハッシュを使用する。パスワードを取り出すと解読が行われます。これは平日の任意の日のパスワードよりはるかに優れています。 – dirkgently

+0

@dirkgentlyそれは素晴らしいですが、どこに対称キーを保存しますか?レジストリで?ファイルですか?それはどのようにしてより安全ですか? – Dan

1

パスワードを自動的に(ユーザーの入力なしで)取得できる場合は、実際には何も格納していないことに注意してください。 RSA、シンメトリック、またはその他の暗号化を使用しても、アプリケーション内にデコードキーを格納する限り、違いはありません。誰かが鍵を入手すると、その秘密は消滅します。

ただし、上記のデータ保護APIは、同じマシン上の他のユーザーからパスワードを保護する必要があります。 (sounds like DPAPIは、暗号化にログイン資格情報を使用します)。

さらにいくつかのオプションについては、Threat Mitigationのmsdnページを参照してください。

関連する問題