4

サーバーに接続してさまざまなアクションを実行するSilverlight3アプリがあります。ユーザーはFormsAuthenticationを使用してログインしますが、要求するアクションはAppPoolアカウントを使用してサーバー上で実行されるため、監査ログにアクセスすると、AppPoolアカウントに対して記録されます。PCI DSS規制では、ユーザー自身のIDを監査ログに含める必要があります。つまり、ユーザーの資格情報を使用してアクションを実行する必要があります。これで、ユーザーがログオンしてリクエストごとに送信するときにユーザーの資格情報を保存でき、サーバーによって実行されるアクションでそれらの資格情報を使用できます。しかし、PCI regsは、クレジットを保存する場合は暗号化する必要があると述べています(誰かがPCのメモリダンプを取得してパスワードを取得するのを防ぐため)。

これを行う唯一の方法は、サーバーから公開鍵を取得してパスワードを暗号化し、暗号化されたパスワードを送信して、秘密鍵を使用してサーバー上で復号化することです。ただし、Silverlightには非対称暗号化はありません。

私は問題に近すぎて、別の解決策があるはずですが、それが何であるかわかりません。誰か助けてもらえますか?

明確化

これは内部アプリケーションです。これまで、SSL経由でActiveDirectoryに対してIISForms AuthNを使用してきました。パスワードがクライアントのメモリに保持されている間だけ、転送中のパスワードを保護する必要はありません。私が理解しているように、私はフォーム認証を使用しているため、LogonUserを使用しない限り、サーバーでのなりすましはできません。つまり、サーバーでパスワードが必要なので、毎回パスワードを送信する必要があるため、保持する必要があります。アプリが閉じるまで、クライアント内、メモリ内。

4

2 に答える 2

1

Silverlight アプリで再利用するためにパスワードを保存する必要があるということですか? パスワードが暗号化されずにメモリに表示されることを懸念している場合は、Silverlight が問題を抱えていると思います。

.NET フレームワークには、SecureString概要を説明した正確な目的のためのクラスがあります。

残念ながら、フレームワークの Silverlight バージョンにはこのクラスがありません。したがって、ある時点でパスワードの論理ストレージを暗号化したままにしておく場合でも、コードはそれを使用するに復号化する必要があります。その時点で、暗号化されていない形式の文字列を含むメモリが割り当てられます。

フォーム認証についてはよくわかりませんが、ユーザー原則をドメインユーザーにマップできる場合(必要であることを示しているようです)、サーバーでコードを実行するときに偽装を使用したいと思うでしょう。

または、フォーム認証の使用を停止し、偽装サーバー側を確実に使用できる Windows 統合認証を使用します。

于 2010-02-09T20:41:53.387 に答える
0

パスワードに暗号化を使用しないでください。何かを暗号化すると、それを解読する方法が必要になります。パスワードには常に一方向ハッシュを使用する必要があります。md5 と sha1 は、どのセキュリティ システムに対しても非常に脆弱であることが証明されています。Sha256 を使用する必要があり、Silverlight ではこのライブラリが処理します: http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha256%28VS.95%29.aspx

実際、「暗号化」を使用してパスワードを保存することは、脆弱性ファミリーCWE-257によって認識されています。メッセージ ダイジェストの使用は、パスワードを安全に保存する唯一の方法です。これは私がでっち上げたものではなく、NIST からのものです。パスワードを保存するときに発生する脆弱性は他にもたくさんあります。NISTがまとめたリストは次のとおりです。

于 2010-02-09T18:21:46.537 に答える